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
7 ANDROID STUDIO – TIP 1 How does your manifest really look like? • Manifest Merger See also: “Hey, Where Did These Permissions Come From?” on The CommonsBlog
13 ANDROID STUDIO – TIP 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
15 ANDROID STUDIO – TIP 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
19 ANDROID STUDIO – TIP 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 ..."
22 TEST DEVICES – TIP 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
25 TEST DEVICES – TIP 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 – TIP 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
31 DEV & ENVIRONMENT – TIP 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:
34 DEV & ENVIRONMENT – TIP 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 – TIP 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 – TIP 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
38 DEV & ENVIRONMENT – TIP 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
40 DEV & ENVIRONMENT – TIP 5 Network output logging/analyzing Use Http Monitoring & Proxy tools like Charles • HTTP/HTTPS traffic monitoring • Rewrite values • Set breakpoints
47 GRADLE HACKS – TIP 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 – TIP 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
52 GRADLE HACKS – TIP 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 } }
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