Share
Embed
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
Transcript
47 slides
-
@riggaroo Rebecca Franks Senior Android Developer & Google Developer Expert
DVT / DStv www.riggaroo.co.za @riggaroo -
@riggaroo Features of your API have a huge impact on
performance of your app -
@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" } ] } -
@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, } -
@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(); } -
@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 ☁ -
@riggaroo Keeping user’s data fresh Give me the data Have
some data Have the changed data ☁ Firebase Cloud Messaging Have the changed data -
@riggaroo Be courteous Wait for ideal conditions - WiFi +
Battery Defer unimportant operations -
@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. -
@riggaroo Stetho by Facebook (Android) Allows you to use Chrome
Developer Tools with Android Apps - Monitor requests - Edit Preferences & Databases -
@riggaroo Charles Proxy •HTTP Request Proxying •View Web Traffic •Throttle
connections •Intercept Traffic •https://www.charlesproxy.com/ -
@riggaroo 1.2MB 183KB 201KB aaptOptions { cruncherEnabled = false }
Custom Compression AAPT -
@riggaroo • VectorDrawable / ShapeDrawable • WebP (4.1 above) •
Transparent WebP - (4.4 above) • JPEG • PNG Image Types Supported in Android -
@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: -
@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 -
@riggaroo Removing Unused Code buildTypes { release { minifyEnabled true
shrinkResources true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-project.txt' } Enable ProGuard + Test -
@riggaroo Removing Unused Code android { defaultConfig { ... resConfigs
"en", "zu" } } Remove unused configurations 0.35MB SAVED 4MB -> 3.65MB = -
@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 } } } -
@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 -
@riggaroo REMEMBER Every Request Counts Reduce your size of your
app Optimise your image usage -
@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