friends • Metadata annotations you can decorate your code with, to help catch bugs • @VisibleForTesting, @Nullable, @AnyThread, @Keep, @StringRes etc. • Integrated with Android Studio & Lint
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 ..."
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
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
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
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
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
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 } }