Upload
sergii-zhuk
View
151
Download
0
Embed Size (px)
Citation preview
EFFECTIV E
ANDROID
DEVELOPMENT
S E R G I I Z H U K @ D R O I D C O N B E R L I N
1 6 - 0 6 - 2 0 1 6
2
HELLO!
My name is Sergii Zhuk
• Android Developer @ Zalando SE
• Author of Android Digest for Ukrainian Developers Community
• 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
• Gradle Hacks
5
ANDROID STUDIO
6
ANDROID STUDIO – T IP 1
How does your manifest really look like?
7
ANDROID STUDIO – T IP 1
How does your manifest really look like?
• Manifest Merger
See also: “Hey, Where Did These Permissions Come From?” on The CommonsBlog
8
ANDROID STUDIO – T IP 2
You need to use new Android APIs. Are there any examples?
9
ANDROID STUDIO – T IP 2
You need to use new Android APIs. Are there any examples?
• Find Sample Code
10
ANDROID STUDIO – T IP 3
“I’m not gonna to commit right now…”
11
ANDROID STUDIO – T IP 3
“I’m not gonna to commit right now…”
Local history for rescue!
12
ANDROID STUDIO – T IP 4
Support Annotations are your friends
13
ANDROID STUDIO – T IP 4
Support Annotations are your friends
• Metadata annotations you can decorate your code with, to help catch bugs
• @VisibleForTesting, @Nullable, @AnyThread, @Keep, @StringRes etc.
• Integrated with Android Studio & Lint
14
ANDROID STUDIO – T IP 5
How to make a code review?
Switch between branches could be slow:
•stash your changes
•checkout branch
• reload gradle config
15
ANDROID STUDIO – T IP 5
How to make a code review?
• Launch two IDE instances: one for the review, another one for the main work
• Yes, you will need a powerful machine
16
ANDROID STUDIO – T IP 6
Apply changes fast
17
ANDROID STUDIO – T IP 6
Swap code fast
• Instant Run
• JRebel
18
ANDROID STUDIO – T IP 6
Swap code fast
• How changes are handled
• Immediately (Hot swap)
• Activity restart (Warm swap)
• Application restart (Cold swap)
• Rebuild
19
ANDROID STUDIO – T IP 6
Swap code fast
Change Instant Run JRebel
Change code of the existing method Could be immediately Activity restart
Change/remove resource Activity restart Activity restart
Method or class signature, statics, annotations App restart, API 21+ Activity restart
Add/Remove superclass, implemented interface App restart, API 21+ App restart
Change Manifest or notification resource Rebuild Rebuild
Sources: https://developer.android.com/studio/run/index.html#instant-run
Reto Meier "Instant Run: How Does it Work?!"
Oleg Selajev "Looking at JRebel for Android and Instant Run ..."
20
TEST DEVICES
21
TEST DEVICES – T IP 1
A lot of UI issues could be discovered if compare app on Lollipop and pre-Lollipop
devices
22
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
23
TEST DEVICES – T IP 2
Emulators question
24
TEST DEVICES – T IP 2
Emulators question
Genymotion
• Free only for private use & limited functionality
• Latest OS version with the delay
25
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
26
TEST DEVICES – T IP 3
(Cloud) Test Platforms
27
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, Firebase Test Lab
28
TEST DEVICES – T IP 3
(Cloud) Test Platforms
• Also you can create your own device farm
• Open-source tools available like Square Spoon
29
DEV & ENVIRONMENT
30
DEV & ENVIRONMENT – T IP 1
Measure execution time
31
DEV & ENVIRONMENT – T IP 1
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"
32
DEV & ENVIRONMENT – T IP 2
How to read logcat output from your device?
33
DEV & ENVIRONMENT – T IP 2
How to read logcat output from your device?
• Jake Wharton’s pidcat
34
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?
35
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
36
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
37
DEV & ENVIRONMENT – T IP 4
Think about application tracking & analytics
38
DEV & ENVIRONMENT – T IP 4
Think about application tracking & analytics
• A lot of projects with overlapping functionality:
• Google Analytics
• Firebase Analytics
• Adjust
• Answers Events by Fabric
• Integration requires huge architecture effort
• Testing is always hard
39
DEV & ENVIRONMENT – T IP 5
Network output logging/analyzing?
40
DEV & ENVIRONMENT – T IP 5
Network output logging/analyzing
Use Http Monitoring & Proxy tools like Charles
• HTTP/HTTPS traffic monitoring
• Rewrite values
• Set breakpoints
41
DEV & ENVIRONMENT – T IP 6
All-in-one inspection tool by Facebook?
42
DEV & ENVIRONMENT – T IP 6
All-in-one inspection tool by Facebook!
• Stetho
• SQLite database
• Network proxy
• Hierarchy Viewer
• App preferences
43
DEV & ENVIRONMENT – T IP 7
Explore your APK
• Manifest
• Method count per dependency
• Resources set properly
• and more
44
DEV & ENVIRONMENT – T IP 7
Explore your APK:
ClassyShark
• DEX Method count by package/class
• Dependencies
• Merged Manifest
• Obfuscation check
Android Studio APK Analyzer
+ Drawables preview
45
GRADLE HACKS
46
GRADLE HACKS – T IP 1
Check your config
47
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
48
GRADLE HACKS – T IP 1
Check your config
• gradle.properties:
org.gradle.daemon=true
# if multiple modules [incubating feature]
org.gradle.parallel=true
# Dex In Process. Also set in build.gradle dexOptions{ javaMaxHeapSize }
org.gradle.jvmargs=-Xmx4096m
49
GRADLE HACKS – T IP 2
How much time spent on building the app?
50
GRADLE HACKS – T IP 2
How much time spent on building the app?
• Track your time! https://github.com/passy/build-time-tracker-plugin
51
GRADLE HACKS – T IP 3
Build faster using target API 21 for dev needs
52
GRADLE HACKS – T IP 3
Build faster using target API 21 for dev needs
productFlavors {
// Define separate dev and prod flavors
dev21 { minSdkVersion 21 }
dev14 { minSdkVersion 14 }
prod {
// The actual minSdkVersion for the application
minSdkVersion 14
}
}
53
CONCLUSION
54
CONCLUSION
• Keep optimizing time spent on repeating things
• Keep looking for ways how to build the app faster
• It’s never too late to improve tools knowledge
55
THANKS!
• tech.zalando.com/jobs
• @sergiizhuk
• medium.com/@sergii