page.title=Building for Billions page.metaDescription=Best practices on how to optimize Android apps for low- and no-bandwidth and low-cost devices. page.image=/distribute/images/billions-guidelines.png @jd:body

Connectivity

  1. Optimize images
  2. Optimize networking
  3. Fine-tune data transfer

Device Capability

  1. Support varying screen sizes
  2. Backward compatibility
  3. Efficient memory usage

Data Cost

  1. Reduce app size
  2. Offer configurable network usage

Battery Consumption

  1. Reduce battery consumption
  2. Benchmark battery usage

Content

  1. Fast and responsive UI
  2. UI Best practices
  3. Localization

Internet use—and smartphone penetration—is growing fastest in markets with low, intermittent, or expensive connectivity. Successful apps in these markets need to perform across a variety of speeds and devices, as well as conserve and share information about battery and data consumption.

To help you address these important considerations, we’ve compiled the following checklist. These do not follow a particular order, and as always it's a good idea to research particularities of any market or country you're targeting.

Connectivity

Over half of the users in the world still experience your app over 2G connections. To improve their experience, optimize for no- and low-connection speeds. For offline and slow connections: store data, queue requests, and handle images for optimal performance.

Optimize images

Serve WebP images

Dynamic image sizing

Use image loading libraries

Optimize networking

Make your app usable offline

Use GcmNetworkManager and/or Content Providers

Deduplicate network requests

Fine-tune data transfer

Prioritize bandwidth

Use less bandwidth on slower connections

Detect network changes, then change app behavior

Related resources

Device Capability

Reaching new users means supporting an increasing variety of Android platform versions and device specifications. Optimize for common RAM and screen sizes and resolutions to improve the user experience.

Support varying screen sizes

Use density-independent pixels (dp)

Test graphics on ldpi/mdpi screen densities

Test layouts on small/medium screen sizes

Backward compatibility

Set your targetSdkVersion and minSdkVersion appropriately

Use the Android Support libraries

Use Google Play services

Efficient memory usage

Reduce memory footprint on low-cost devices

Avoid long-running processes

Benchmark memory usage

Related resources

Data Cost

Data plans in some countries can cost upwards of 10% of monthly income. Conserve data and give control to optimize user experience. Reduce data consumption and give users control over your app’s use of data.

Reduce app size

Reduce APK graphical asset size

Reduce code size

Allow app to be moved to external (SD) storage

Reduce post-install app disk usage

Offer configurable network usage

Provide onboarding experiences for subjective user choices

Provide a network preferences screen

Related resources

Battery Consumption

Access to reliable power supplies varies, and outages can disrupt planned charges. Defend your users' batteries against unnecessary drain by benchmarking your battery use, avoiding wakelocks, scheduling tasks, and monitoring sensor requests.

Reduce battery consumption

Benchmark battery usage

Related resources

Content

Make sure that your app works well on a variety of screens: offering good, crisp graphics and appropriate layouts on low resolution and physically small screens. Ensure that your app is designed to be easily localized by accommodating the variations between languages: allow for spacing, density, order, emphasis, and wording variations. Also make sure that date, time, and the like are internationalized and displayed according to the phone’s settings.

Fast and responsive UI

Touch feedback on all touchable items

UI should always be interactive

Target 60 frames per second on low-cost devices

If anticipated start speed is low, use launch screen on first load

UI best practices

Localization

Related resources