Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Effective Android Development

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

Effective Android Development

Slides from my talk presented at UA Mobile and Droidcon Berlin 2016 conferences.

More Android stuff:
https://medium.com/@sergii
https://twitter.com/sergiizhuk

Avatar for Sergii Zhuk

Sergii Zhuk

June 16, 2016
Tweet

More Decks by Sergii Zhuk

Other Decks in Programming

Transcript

  1. EFFECTIVE 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. 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. 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. 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
  5. 8 ANDROID STUDIO – TIP 2 You need to use

    new Android APIs. Are there any examples?
  6. 9 ANDROID STUDIO – TIP 2 You need to use

    new Android APIs. Are there any examples? • Find Sample Code
  7. 11 ANDROID STUDIO – TIP 3 “I’m not gonna to

    commit right now…” Local history for rescue!
  8. 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
  9. 14 ANDROID STUDIO – TIP 5 How to make a

    code review? Switch between branches could be slow: •stash your changes •checkout branch •reload gradle config
  10. 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 
  11. 18 ANDROID STUDIO – TIP 6 Swap code fast •

    How changes are handled • Immediately (Hot swap) • Activity restart (Warm swap) • Application restart (Cold swap) • Rebuild
  12. 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 ..."
  13. 21 TEST DEVICES – TIP 1 A lot of UI

    issues could be discovered if compare app on Lollipop and pre-Lollipop devices
  14. 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
  15. 24 TEST DEVICES – TIP 2 Emulators question Genymotion •

    Free only for private use & limited functionality • Latest OS version with the delay
  16. 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
  17. 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
  18. 28 TEST DEVICES – TIP 3 (Cloud) Test Platforms •

    Also you can create your own device farm • Open-source tools available like Square Spoon
  19. 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: <-- getName [16ms] = "Jake Wharton"
  20. 32 DEV & ENVIRONMENT – TIP 2 How to read

    logcat output from your device?
  21. 33 DEV & ENVIRONMENT – TIP 2 How to read

    logcat output from your device? • Jake Wharton’s pidcat
  22. 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?
  23. 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
  24. 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
  25. 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
  26. 40 DEV & ENVIRONMENT – TIP 5 Network output logging/analyzing

    Use Http Monitoring & Proxy tools like Charles • HTTP/HTTPS traffic monitoring • Rewrite values • Set breakpoints
  27. 42 DEV & ENVIRONMENT – TIP 6 All-in-one inspection tool

    by Facebook! • Stetho • SQLite database • Network proxy • Hierarchy Viewer • App preferences
  28. 43 DEV & ENVIRONMENT – TIP 7 Explore your APK

    • Manifest • Method count per dependency • Resources set properly • and more
  29. 44 DEV & ENVIRONMENT – TIP 7 Explore your APK:

    ClassyShark • DEX Method count by package/class • Dependencies • Merged Manifest • Obfuscation check Android Studio APK Analyzer + Drawables preview
  30. 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
  31. 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
  32. 50 GRADLE HACKS – TIP 2 How much time spent

    on building the app? • Track your time! https://github.com/passy/build-time-tracker-plugin
  33. 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 } }
  34. 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