Effective Android Development. UA Mobile 2016.
Transcript of Effective Android Development. UA Mobile 2016.
EFFECTIV E
ANDROID
DEVELOPMENT
S E R G I I Z H U K
1 6 - 0 4 - 2 0 1 6
2
HELLO!
My name is Sergii Zhuk
• Android Developer @ Zalando SE
• Author of DOU.ua Android Digest
• In Berlin since August 2015
• twitter.com/sergiizhuk
• medium.com/@sergii
3
ZALANDO SE
• Europe’s leading online fashion platform
• ~ 10,000 employees in Europe
• ~ EUR 3bn revenue in 2015
• ~ 60% of shop traffic came from mobile
• 10M+ downloads Android app
4
AGENDA
• Android Studio
• Test Devices
• Dev & Environment
• App Performance
• Gradle Hacks
5
ANDROID STUDIO
6
ANDROID STUDIO – T IP 0
Show line numbers, please!
7
ANDROID STUDIO – T IP 1
How often to update your IDE version?
8
ANDROID STUDIO – T IP 1
How often to update your IDE version?
• Use two installations: stable and canary
• Enable auto-update for the relevant channel
9
ANDROID STUDIO – T IP 2
How to make a code review?
Switch between branches could be slow:
•stash your changes
•checkout branch
• reload gradle config
10
ANDROID STUDIO – T IP 2
How to make a code review?
Switch between branches could be slow:
•stash your changes
•checkout branch
• reload gradle config
• Launch two IDE instances: one for the review, another one for the main work
• Yes, you will need a powerful machine
11
ANDROID STUDIO – T IP 3
Use Android Studio Live Templates
12
ANDROID STUDIO – T IP 3
Use Android Studio Live Templates
13
ANDROID STUDIO – T IP 4
Learn how to debug
14
ANDROID STUDIO – T IP 4
Learn how to debug
• Attach the debugger
15
ANDROID STUDIO – T IP 4
Learn how to debug
• Use Frames Debug window
16
ANDROID STUDIO – T IP 4
Learn how to debug
• Breakpoint only during interesting iterations
17
ANDROID STUDIO – T IP 5
18
ANDROID STUDIO – T IP 5
Fast preview & build
19
ANDROID STUDIO – T IP 5
Fast preview & build
JRebel
• Multidex only in expensive “Business” version
• 21-day trial
20
ANDROID STUDIO – T IP 5
Fast preview & build
JRebel
• Multidex only in expensive “Business” version
• 21-day trial
Instant Run
• minSdkVersion 15+, 21+ recommended
• Free & accepted by community
21
TEST DEVICES
22
TEST DEVICES – T IP 1
A lot of UI issues could be discovered if compare app on Lollipop and pre-Lollipop
devices
23
TEST DEVICES – T IP 1
A lot of UI issues could be discovered if compare app on Lollipop and pre-Lollipop
devices
• Use at least two emulator instances or devices during dev tests
• Use both 4.* and 5+ OS versions
24
TEST DEVICES – T IP 2
Emulators question
25
TEST DEVICES – T IP 2
Emulators question
Genymotion
• Free only for private use & limited functionality
• Latest OS version with the delay
26
TEST DEVICES – T IP 2
Emulators question
Genymotion
• Free only for private use & limited functionality
• Latest OS version with the delay
New Android SDK Emulator
• push apps/data 10x faster than to a device
• includes Google Play Services built-in
27
TEST DEVICES – T IP 3
(Cloud) Test Platforms
28
TEST DEVICES – T IP 3
(Cloud) Test Platforms
• Can execute scenarios (Espresso tests, Robotium etc.)
• Can take screenshots, measure device metrics, track logs
• Example: AWS Device Farm , TestDroid, Cloud Test Lab
29
TEST DEVICES – T IP 3
(Cloud) Test Platforms
• Also you can create your own device farm
• Open-source tools available like Square Spoon
30
APP PERFORMANCE
31
APP PERFORMANCE – T IP 1
Follow Android Performance Patterns
• https://www.youtube.com/playlist?list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE
32
APP PERFORMANCE – T IP 2
Measure execution time
33
APP PERFORMANCE – T IP 2
Measure execution time
• Hugo by Jake Wharton
@DebugLog
public String getName(String first, String last) {/* ... */}
V/Example: --> getName(first="Jake", last="Wharton")
V/Example: <-- getName [16ms] = "Jake Wharton"
34
APP PERFORMANCE – T IP 3
Check the frame rate (FPS)
35
APP PERFORMANCE – T IP 3
Check the frame rate (FPS)
• TinyDancer library (API 16+)
• Takt library (API 16+)
36
APP PERFORMANCE – T IP 4
Which options has Developer?
37
APP PERFORMANCE – T IP 4
Know your
Developer Options!
38
DEV & ENVIRONMENT
39
DEV & ENVIRONMENT – T IP 1
Support Annotations are your friends
40
DEV & ENVIRONMENT – T IP 1
Support Annotations are your friends
• Metadata annotations you can decorate your code with, to help catch bugs
• Dependency 'com.android.support:support-annotations:23.3.0‘
• Integrated with Android Studio & Lint
41
DEV & ENVIRONMENT – T IP 2
How to read logcat output from your device?
42
DEV & ENVIRONMENT – T IP 2
How to read logcat output from your device?
• Jake Wharton’s pidcat
43
DEV & ENVIRONMENT – T IP 3
Click on device/emulator screen every time you are testing some functionality
• BUT what if you have 5 test devices?
• AND you have a regression plan for 30 scenarios?
44
DEV & ENVIRONMENT – T IP 3
Click on device/emulator screen every time you are testing some functionality
• Use ADB commands/scripts to replace manual interactions
adb shell input keyevent 4
45
DEV & ENVIRONMENT – T IP 3 .5
Click on device/emulator screen every time you are testing some functionality
• Use adb-ninja script to submit your command to several devices simultaneously
https://github.com/romannurik/env/blob/master/bin/ninja-adb
46
DEV & ENVIRONMENT – T IP 4
Think about application tracking
47
DEV & ENVIRONMENT – T IP 4
Think about application tracking
• A lot of projects with overlapping functionality:
• Google Analytics
• Adjust
• Answers Events by Fabric
• Integration requires huge architecture effort
• Testing is always hard
48
DEV & ENVIRONMENT – T IP 5
Network output logging/analyzing?
49
DEV & ENVIRONMENT – T IP 5
Network output logging/analyzing
Use Http Monitoring & Proxy tools like Charles
• HTTP/HTTPS traffic monitoring
• Rewrite values
• Set breakpoints
50
DEV & ENVIRONMENT – T IP 6
All-in-one inspection tool by Facebook?
51
DEV & ENVIRONMENT – T IP 6
All-in-one inspection tool by Facebook!
• Stetho
• SQLite database
• Network proxy
• Hierarchy Viewer
• App preferences
52
GRADLE HACKS
53
GRADLE HACKS – T IP 1
Check your config
54
GRADLE HACKS – T IP 1
Check your config
build.gradle:
• Get rid of mavenCentral, use jcenter
• Check Gradle plugin version
• DON’T specify version ranges for the dependencies
55
GRADLE HACKS – T IP 1
Check your config
gradle.properties:
• org.gradle.daemon=true
• # if multiple modules:
org.gradle.parallel=true
56
GRADLE HACKS – T IP 2
How much time spent on building the app?
57
GRADLE HACKS – T IP 2
How much time spent on building the app?
• Track your time!
https://github.com/passy/build-time-tracker-plugin
58
GRADLE HACKS – T IP 2
How much time spent on building the app?
• Track your time!
59
GRADLE HACKS – T IP 3
Build faster using target API 21 for debug
60
GRADLE HACKS – T IP 3
Build faster using target API 21 for dev needs
productFlavors {
// Define separate dev and prod product flavors
dev21 { minSdkVersion 21 }
dev14 { minSdkVersion 14 }
prod {
// The actual minSdkVersion for the application.
minSdkVersion 14
}
}
61
CONCLUSION
62
CONCLUSION
• Keep optimizing time spent on repeating things
• Keep looking for ways how to build app faster
• It’s never too late to improve tools knowledge
63
THANKS!
• tech.zalando.com/jobs
• @sergiizhuk
• medium.com/@sergii