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.

2a37bf1e025cc1523124774c760df91a?s=128

Rebecca Franks

June 14, 2016
Tweet

Transcript

  1. 11.

    @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. 12.

    @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. 14.

    @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. 15.

    @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. 16.

    @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. 17.

    @riggaroo Be courteous Wait for ideal conditions - WiFi +

    Battery Defer unimportant operations
  7. 18.

    @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. 22.

    @riggaroo Stetho by Facebook (Android) Allows you to use Chrome

    Developer Tools with Android Apps - Monitor requests - Edit Preferences & Databases
  9. 23.

    @riggaroo Charles Proxy •HTTP Request Proxying •View Web Traffic •Throttle

    connections •Intercept Traffic •https://www.charlesproxy.com/
  10. 24.
  11. 36.

    @riggaroo • VectorDrawable / ShapeDrawable • WebP (4.1 above) •

    Transparent WebP - (4.4 above) • JPEG • PNG Image Types Supported in Android
  12. 37.

    @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:
  13. 39.

    @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
  14. 41.

    @riggaroo Removing Unused Code buildTypes { release { minifyEnabled true

    shrinkResources true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-project.txt' } Enable ProGuard + Test
  15. 42.

    @riggaroo Removing Unused Code android { defaultConfig { ... resConfigs

    "en", "zu" } } Remove unused configurations 0.35MB SAVED 4MB -> 3.65MB =
  16. 43.

    @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 } } }
  17. 44.

    @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
  18. 47.

    @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