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

Reducing Mobile Data Usage in your Android Apps

Reducing Mobile Data Usage in your Android Apps

In this presentation, we take a look at the different areas in your app that you can improve mobile data usage in. Specifically Server Interactions, Images and APK Package Size.

Rebecca Franks

June 14, 2016

More Decks by Rebecca Franks

Other Decks in Technology


  1. @riggaroo Design your API based on the usage of your

    app { "name": "Rebecca Franks”, "profileUrl": "http://riggaroo.co.za/image.jpg", "followers": 50, "repositories": [ { "name": "Book Dash Android App", "id": "bookdash-android-app" }, { "name": "MVP Example", "id": "mvp-example" } ] }
  2. @riggaroo Strip unused information { login: "riggaroo", id: 9973046, avatar_url:

    "https://avatars.githubusercontent.com/u/9973046?v=3", gravatar_id: "", url: "https://api.github.com/users/riggaroo", html_url: "https://github.com/riggaroo", followers_url: "https://api.github.com/users/riggaroo/followers", following_url: "https://api.github.com/users/riggaroo/following{/other_user}", gists_url: "https://api.github.com/users/riggaroo/gists{/gist_id}", starred_url: "https://api.github.com/users/riggaroo/starred{/owner}{/repo}", subscriptions_url: "https://api.github.com/users/riggaroo/subscriptions", organizations_url: "https://api.github.com/users/riggaroo/orgs", repos_url: "https://api.github.com/users/riggaroo/repos", events_url: "https://api.github.com/users/riggaroo/events{/privacy}", received_events_url: "https://api.github.com/users/riggaroo/received_events", type: "User", site_admin: false, name: "Rebecca Franks", company: null, blog: "http://riggaroo.co.za", location: "Johannesburg, South Africa", email: null, hireable: null, bio: "Google Developer Expert for Android. Senior Android Developer based in South Africa. ", public_repos: 14, public_gists: 5, followers: 128, following: 13, created_at: "2014-11-27T06:32:40Z", updated_at: "2016-06-03T15:23:57Z" } { login: "riggaroo", id: 9973046, avatar_url: "https://avatars.githubusercontent.com/u/9973046?v=3", url: "https://api.github.com/users/riggaroo", html_url: "https://github.com/riggaroo", followers_url: "https://api.github.com/users/riggaroo/followers", following_url: "https://api.github.com/users/riggaroo/following{/other_user}", gists_url: "https://api.github.com/users/riggaroo/gists{/gist_id}", starred_url: "https://api.github.com/users/riggaroo/starred{/owner}{/repo}", repos_url: "https://api.github.com/users/riggaroo/repos", type: "User", site_admin: false, name: "Rebecca Franks", blog: "http://riggaroo.co.za", location: "Johannesburg, South Africa", bio: "Google Developer Expert for Android. Senior Android Developer based in South Africa. ", public_repos: 14, followers: 128, following: 13, }
  3. @riggaroo Enable HTTP Cache Cache-Control: max-stale=3600 private final OkHttpClient client;

    public CacheResponse(File cacheDirectory) throws Exception { int cacheSize = 10 * 1024 * 1024; // 10 MiB Cache cache = new Cache(cacheDirectory, cacheSize); client = new OkHttpClient.Builder() .cache(cache) .build(); }
  4. @riggaroo Keeping user’s data fresh Any new data now? And

    now? What about now? Have some data Have the same data Have the same data ☁
  5. @riggaroo Keeping user’s data fresh Give me the data Have

    some data Have the changed data ☁ Firebase Cloud Messaging Have the changed data
  6. @riggaroo Be courteous Wait for ideal conditions - WiFi +

    Battery Defer unimportant operations
  7. @riggaroo GcmNetworkManager •Schedule one-off vs. periodic tasks. •Automatic back-off and

    failure retry. •Awareness of network activity. •Awareness of device charging state. •Persistence of tasks across boot.
  8. @riggaroo Stetho by Facebook (Android) Allows you to use Chrome

    Developer Tools with Android Apps - Monitor requests - Edit Preferences & Databases
  9. @riggaroo Charles Proxy •HTTP Request Proxying •View Web Traffic •Throttle

    connections •Intercept Traffic •https://www.charlesproxy.com/
  10. @riggaroo • VectorDrawable / ShapeDrawable • WebP (4.1 above) •

    Transparent WebP - (4.4 above) • JPEG • PNG Image Types Supported in Android
  11. @riggaroo VectorDrawable WebP JPG PNG Can the image be a

    VD? Do you support WebP? Does it need transparency? Is it simple or complex? Yes Yes Yes Simple Complex No No No How to decide what type of image to use:
  12. @riggaroo What is packaged in our APK? • App Code

    • classes.dex • Native Code (libs/ <arch>/*.so) • Resources • res/ • resources.arsc (uncompressed!) • Misc • assets/ • META-INF/ • AndroidManifest .xml .apk
  13. @riggaroo Removing Unused Code buildTypes { release { minifyEnabled true

    shrinkResources true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-project.txt' } Enable ProGuard + Test
  14. @riggaroo Removing Unused Code android { defaultConfig { ... resConfigs

    "en", "zu" } } Remove unused configurations 0.35MB SAVED 4MB -> 3.65MB =
  15. @riggaroo Build Variants • Split APK up • Architecture •

    Screen Size • Downside - many APKs to test android { ... splits { abi { enable true reset() include 'x86', 'armeabi-v7a', 'mips' universalApk true } } }
  16. @riggaroo ArscBlamer • resources.arsc file gets big • ArscBlamer is

    a command-line tool that can parse an Android app's resources.arsc file and extract useful, actionable information about its contents. • https://github.com/google/android-arscblamer
  17. @riggaroo Links • Image Compression for Android Developers- https://www.youtube.com/ watch?v=r_LpCi6DQME

    • APK Analyser - http://android-developers.blogspot.co.za/2016/05/ android-studio-22-preview-new-ui.html • Network Monitor - https://developer.android.com/studio/profile/am- network.html • Put your APK on a diet - https://www.youtube.com/watch?v=xctGIB81D2w • http://www.slideshare.net/fbrunel/mobile-api-design-techniques-26952520 • https://code.facebook.com/posts/872547912839369/improving-facebook-s- performance-on-android-with-flatbuffers/ • https://medium.com/@duhroach/smaller-pngs-and-android-s-aapt- tool-4ce38a24019d#.vi5zl3tjr