Welcome to Knowledge Base!

KB at your finger tips

This is one stop global knowledge base where you can learn about all the products, solutions and support features.

Categories
All
Mobile-Android
UI and content for billions  |  Android Developers




















Make sure that your app offers an interactive UI that responds quickly to user input and, if necessary, compensates for a slow launch.
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
other units are internationalized and displayed according to the phone’s
settings.



Fast and responsive user interface




The user's perception of app performance is formed in large part by the app's
responsiveness. For example, interaction with the user and a crisp display are two important
characteristics of a performant app. Here you can find tips on how to optimize these and
other aspects of an app's speed and responsiveness.


Touch feedback on all touchable items



  • Touch feedback adds a tactile feeling to the user interface. You should
    ensure your app provides touch feedback on all touchable elements to reduce
    the perceived app latency as much as possible.


  • Responsive interaction encourages deeper exploration of an app by
    creating timely, logical, and delightful screen reactions to user input.
    Responsive interaction elevates an app from an information-delivery service
    to an experience that communicates using multiple visual and tactile
    responses.

  • For more information, see the Android training on Customizing Touch
    Feedback.


UI should always be interactive



  • Apps that are unresponsive when performing background activity feel slow
    and reduce user satisfaction. Ensure your app always has a responsive UI
    regardless of any background activity. Achieve this by performing network
    operations or any heavy-duty operations in a background thread—keep the UI
    thread as idle as you can.

  • Material Design apps use minimal visual changes when loading
    content by representing each operation with a single activity indicator.
    Avoid blocking dialogs with
    loading indicators.

  • Empty
    states occur when a view has no content to show. It might
    be a list that has no items or a search that returns no results. Avoid
    empty states using starter, educational, or best match content.
    When these options aren’t applicable display a non-interactive image and a text tagline
    that tell the user what they’ll see when there is something to display.

  • For more information, see the Android training on Keeping Your App
    Responsive.


Target 60 frames per second on low-cost devices



  • Ensure that your app always runs fast and smoothly, even on low-cost
    devices.

  • Overdraw can significantly slow down your app—it occurs when the pixels
    are being drawn more than once per pass. An example of this is when you have
    an image with a button placed on top of it. While some overdraw is
    unavoidable, it should be minimized to ensure a smooth frame rate. Perform
    Debug
    GPU overdraw on your app to ensure it’s minimized.

  • Android devices refresh the screen at 60 frames per second (fps), meaning
    your app has to update the screen within roughly 16 milliseconds. Profile
    your app using on-device tools to see if and when your app is not
    meeting this 16 ms average.

  • Reduce or remove animations on low-cost devices to lessen the burden on
    the device’s CPU and GPU. For more information, see
    Improve
    layout performance.

  • An efficient view hierarchy can speed up your app without increasing the
    app's memory footprint. For more information, see
    Performance
    and View Hierarchies.


Use a launch screen on slow to start apps



  • The launch screen is a user’s first experience of your application.
    Displaying a blank canvas while launching your app increases the perception of its
    loading time, so consider using a placeholder UI or a branded launch screen
    to reduce the perceived loading time.

  • A
    placeholder UI is the most seamless launch transition, appropriate for
    both app launches and in-app activity transitions.


  • Branded launch screens provide momentary brand exposure, freeing the UI
    to focus on content.

  • The best way to deal with slow start speeds is not to have them. Launch-Time Performance provides
    information that may help you speed up your app's launch time.


User interface best practices




  • Material Design is a visual language that synthesizes the classic
    principles of good design with the innovation and possibility of technology
    and science. Material Design provides a single underlying system that
    allows for a unified experience across platforms and device sizes. Consider
    using key Material Design components so that users intuitively know how to
    use your app.

  • Ready-to-use Material Design components are available in the Material Design Support
    library. These components are supported in Android 2.1 (API level 7) and
    above.


Localization



  • Your users could be from any part of the world and their first language
    may not be yours. If you don’t present your app in a language that your
    users can read, it is a missed opportunity. You should therefore
    localize your app for key regional languages.

  • To learn more, visit the Android training on
    Supporting
    Different Languages and see the
    localization checklist.

  • Starting from Android 7.0 (API level 24), the Android framework
    makes available a subset of the ICU4J APIs, which can
    help you localize your app into multiple languages. For more
    information, see
    ICU4J Android Framework APIs.



Additional resources



To learn more about this topic, view the following additional resources:



Further topics




  • Keeping your app responsive

  • Improving layout performance

  • Introduction to animations



Blog posts




  • Writing for global audiences








Read article
UI and content for billions  |  Android Developers




















Make sure that your app offers an interactive UI that responds quickly to user input and, if necessary, compensates for a slow launch.
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
other units are internationalized and displayed according to the phone’s
settings.



Fast and responsive user interface




The user's perception of app performance is formed in large part by the app's
responsiveness. For example, interaction with the user and a crisp display are two important
characteristics of a performant app. Here you can find tips on how to optimize these and
other aspects of an app's speed and responsiveness.


Touch feedback on all touchable items



  • Touch feedback adds a tactile feeling to the user interface. You should
    ensure your app provides touch feedback on all touchable elements to reduce
    the perceived app latency as much as possible.


  • Responsive interaction encourages deeper exploration of an app by
    creating timely, logical, and delightful screen reactions to user input.
    Responsive interaction elevates an app from an information-delivery service
    to an experience that communicates using multiple visual and tactile
    responses.

  • For more information, see the Android training on Customizing Touch
    Feedback.


UI should always be interactive



  • Apps that are unresponsive when performing background activity feel slow
    and reduce user satisfaction. Ensure your app always has a responsive UI
    regardless of any background activity. Achieve this by performing network
    operations or any heavy-duty operations in a background thread—keep the UI
    thread as idle as you can.

  • Material Design apps use minimal visual changes when loading
    content by representing each operation with a single activity indicator.
    Avoid blocking dialogs with
    loading indicators.

  • Empty
    states occur when a view has no content to show. It might
    be a list that has no items or a search that returns no results. Avoid
    empty states using starter, educational, or best match content.
    When these options aren’t applicable display a non-interactive image and a text tagline
    that tell the user what they’ll see when there is something to display.

  • For more information, see the Android training on Keeping Your App
    Responsive.


Target 60 frames per second on low-cost devices



  • Ensure that your app always runs fast and smoothly, even on low-cost
    devices.

  • Overdraw can significantly slow down your app—it occurs when the pixels
    are being drawn more than once per pass. An example of this is when you have
    an image with a button placed on top of it. While some overdraw is
    unavoidable, it should be minimized to ensure a smooth frame rate. Perform
    Debug
    GPU overdraw on your app to ensure it’s minimized.

  • Android devices refresh the screen at 60 frames per second (fps), meaning
    your app has to update the screen within roughly 16 milliseconds. Profile
    your app using on-device tools to see if and when your app is not
    meeting this 16 ms average.

  • Reduce or remove animations on low-cost devices to lessen the burden on
    the device’s CPU and GPU. For more information, see
    Improve
    layout performance.

  • An efficient view hierarchy can speed up your app without increasing the
    app's memory footprint. For more information, see
    Performance
    and View Hierarchies.


Use a launch screen on slow to start apps



  • The launch screen is a user’s first experience of your application.
    Displaying a blank canvas while launching your app increases the perception of its
    loading time, so consider using a placeholder UI or a branded launch screen
    to reduce the perceived loading time.

  • A
    placeholder UI is the most seamless launch transition, appropriate for
    both app launches and in-app activity transitions.


  • Branded launch screens provide momentary brand exposure, freeing the UI
    to focus on content.

  • The best way to deal with slow start speeds is not to have them. Launch-Time Performance provides
    information that may help you speed up your app's launch time.


User interface best practices




  • Material Design is a visual language that synthesizes the classic
    principles of good design with the innovation and possibility of technology
    and science. Material Design provides a single underlying system that
    allows for a unified experience across platforms and device sizes. Consider
    using key Material Design components so that users intuitively know how to
    use your app.

  • Ready-to-use Material Design components are available in the Material Design Support
    library. These components are supported in Android 2.1 (API level 7) and
    above.


Localization



  • Your users could be from any part of the world and their first language
    may not be yours. If you don’t present your app in a language that your
    users can read, it is a missed opportunity. You should therefore
    localize your app for key regional languages.

  • To learn more, visit the Android training on
    Supporting
    Different Languages and see the
    localization checklist.

  • Starting from Android 7.0 (API level 24), the Android framework
    makes available a subset of the ICU4J APIs, which can
    help you localize your app into multiple languages. For more
    information, see
    ICU4J Android Framework APIs.



Additional resources



To learn more about this topic, view the following additional resources:



Further topics




  • Keeping your app responsive

  • Improving layout performance

  • Introduction to animations



Blog posts




  • Writing for global audiences








Read article
Android app quality for cars  |  Android Developers










Android apps for cars should avoid driver distraction above all else. You can
minimize distractions by following best practices, such as using voice
commands and a very simple visual design.



Great car experiences are predictive and predictable. Your app should show
timely information to the driver only when it's relevant, and use simple,
predictable patterns for common tasks. For more information, refer to the
following design guidelines:




  • Android Automotive OS

  • Android Auto


Important: Apps must meet the criteria listed in this page to qualify as an
Android Auto or Android Automotive OS app on Google Play. Apps don't work with
Android Auto unless they are installed from the Play Store or the ONE store.

Testing your app





You must test your app for the criteria listed on this page before submitting
your app to Google Play for review. As applicable, test each of the three ways
a driver can access your app:




Access on Android Automotive OS

Use the Android Emulator to validate each checklist
item. For more information, see Test your app for Android-powered vehicles.

Access on an Android Auto compatible car display

Use the Android Auto Desktop Head Unit (DHU) to validate each checklist item.
For more information, see Test your app for Android Auto compatible car displays.

Access on a phone screen

Use a phone to validate each checklist item. For more information, see
Test your app for phone screens.





Core app quality





In addition to the car-specific criteria listed below, apps should meet all relevant core app
quality criteria for the Android platform, as detailed in
core app quality. Test
your app against those criteria to ensure that it meets Android standards for navigation and
design. Then test your app against all car-specific criteria, remembering that, when running on a
device connected to Android Auto or an Android Automotive OS device, your app must meet the
requirements listed on this page.


Important: If your app requires user authentication in order to access the app's
full functionality, make sure to submit login details for a test account in
the Play Developer Console. See the
App Access section
for instructions.

Car app guidelines






December 2022 Update : The Internet of Things category has been added,
and the guidelines have been updated to reflect this
change.


App Categories




Select your app's categories to filter the guidelines below.











































Supported categories Android Auto Android Automotive OS





















Visual design and user interaction




These criteria ensure that your app follows critical design and interaction patterns
to offer a consistent, intuitive, and enjoyable user experience in cars. Many elements,
such as the navigation drawer, card backgrounds, fonts and icon colors, are set and rendered by
the system. Your app-specific design elements must meet the following criteria when running
on a car's head unit screen.








































































































Criteria ID Description
Screen Animation SA-1


The app does not display animated elements on the screen such as
animated graphics or video.







Visual or Text Ads AD-1


The app does not display text-based advertising other than the
advertiser's name or the product name.







Image Usage IU-1


App elements do not display any images on the screen. Exceptions include:



  • Apps may display a single static image for content context in
    the background of the consumption screen, such as album art or
    the advertiser's corporate logo.

  • Apps may display icons in the content navigation drawer.

  • Apps may display images and photographs to aid in driving
    decision-making.

  • Navigation apps may display an image for lane guidance or
    junction guidance.







Permitted Categories PC-1


The app does not include features outside the app types intended
for cars.
(Learn More)








Visual Information on Phone VI-1


Android Auto only: If the user must go to the phone
screen (for example, to act on a permission
request), then the app must display a message instructing the user to only
look at their phone screen when it’s safe to do so.
(Learn How for media,
Learn How
for navigation, point of interest, and internet of things apps)






App Doesn't Crash AC-1


Users must be able to complete tasks in the app using five screens or fewer.
(Learn How)





Scrolling Text ST-1


The app does not display automatically scrolling text.







Voice Commands VC-1


The app must support Google Assistant voice commands.
(Learn How for media,
Learn How for navigation)




Delayed Response DR-1


App-specific buttons respond to user actions with no more than a two-second delay.







DR-2


The app launches in no more than 10 seconds.







DR-3


The app loads content in no more than 10 seconds.







Contrast VD-1


The app provides icons and colors that meet Android Auto’s contrast requirements.
(Learn How)







VD-2


The app provides white icon sets that the system colorizes to provide automatic
contrast compensation.



VD-3


The app provides colors that the system can optimize for easy in-vehicle readability.



Display Orientation DO-1


UIs drawn by the app support both landscape and portrait screens.









Functionality




These criteria ensure that your app is configured correctly and provides the expected
functional behavior when running on the car's head unit screen.












































































































































































Criteria ID Description
Expected Performance EP-1


App functionality works as expected or described in the app's Google Play Store listing.








EP-2


When the app is relaunched from the home screen, the app restores the app state as closely as
possible to the previous state.







Grey Buttons GB-1


Interactive elements that are intentionally greyed-out must be non-functional.



Driver Distraction DD-1


The navigation audio channel may only be used by navigation apps and for
navigation instructions.
(Learn How)



DD-2


While driving, the video app must not be launchable and the video
app's screen must not be visible. The video app's audio must stop
when the user starts driving.
(Learn How)



Payments PA-1


The app must have simple flows if purchases are enabled, using shortcuts
such as recent or favorite purchases. (Learn How)



The app must not allow any of the following:



  • Setup of payment methods

  • Multiple items to be selected for purchase

  • The user to commit to recurring payments (for example, subscriptions)





Notification Ads NA-1


The app does not present advertisements through notifications.







Irrelevant Notifications IN-1


The app displays notifications only when relevant to the driver's needs.



Examples:

Good: Notifying the user that a new message has arrived.

Bad: Notifying the user about a new album release.







Media Autoplay MA-1


Media apps do not autoplay on startup or without user initiated action to
select the app or app media.
(Learn How)




Messaging Functionality MF-1


The app receives incoming messages.
(Learn How)



MF-2


Messages are properly grouped and displayed in the correct order.
(Learn How)



MF-3


The user can reply to a message.
(Learn How)



MF-4


The app uses short-form messaging app design patterns. Traditional long-form messaging apps, such
as apps for email, are not permitted.



MF-5


The app implements a peer-to-peer messaging service and not notification services such as
those for weather, stocks, and sport scores.



NF-1


The app must provide turn-by-turn navigation directions.



NF-2


The app draws only map content on the surface of the navigation templates.
Text-based turn-by-turn directions, lane guidance, and estimated arrival
time must be displayed on the relevant components of the Navigation
template. Additional information relevant to the drive (e.g., speed limit,
road obstructions) can be drawn on the safe area of the map.



NF-3


When the app provides text-based turn-by-turn directions, then it must
also trigger navigation notifications.
(Learn How)



NF-4


When the navigation app provides text-based turn-by-turn directions, it
must send next-turn information to the vehicle’s cluster display.
(Learn How)



NF-5


The app must not provide turn-by-turn notifications, voice guidance, or
cluster information when another navigation app is providing turn-by-turn
instructions.
(Learn How)



NF-6


The app must handle navigation requests from other Android Auto apps.
(Learn How)



NF-7


The app must provide a “test drive” mode that simulates driving.
(Learn How)



NF-8


The app must draw a light-themed or dark-themed map when instructed to do so.
(Learn How)




Point of Interest Functionality
PF-1


The app must provide meaningful functionality relevant to driving.




Internet of Things Functionality
IT-1

The IOT app may allow the following while driving:


  • View the current state of devices . For example: to
    view if a garage door is open or closed, a light bulb is on
    or off, a security system is armed or disarmed, or a washer
    is running or completed.


  • Simple, one-touch features that control on and off
    functions
    . For example: the ability to turn various devices on and
    off or open and close them, including turning lights on and
    off, turning a thermostat on and off, or opening and closing
    a garage door or curtain. This also includes turning a
    pre-programmed scene or routine on and off.


  • Notify users about an event in the home or another
    location
    . For example: receiving notifications for a
    routine or scene, a security alert, or a change in a door's
    open or closed status.



The IOT app must not allow the following while driving:


  • Tasks related to app setup of any kind . For example:
    the ability to select devices, systems, or locations for use
    with the IOT app.


  • Tasks related to creation, modification, or reordering . For example: the ability to create, modify, or reorder a
    scene or routine, such as a sequence of events when
    departing or leaving a location, including opening and
    closing a garage door, or turning lights on and off.


  • Tasks related to fine-grained device control . For
    example: the ability to control certain functions, including
    adjusting thermostat temperatures or the level of lighting
    luminescence.




Settings Flow SF-1


App must proceed to the home page after (attempted) sign-in.



Automotive Functionality AF-1


App does not contain any distraction optimized activities.



CPU Architectures CP-1


App supports both x86_64 and ARM CPUs.



App Navigability AN-1


App allows users to navigate through the app without encountering
any dead ends.









Frequently asked questions





What happens after I submit my app?




Apps for cars are subject to an additional manual review beyond normal Play Store
review processes. Your app will be tested to ensure Driver Distraction Regulation
compliance against the criteria described above.




After submitting my app, how will I find out if my app does not meet all
the requirements for Android Auto or Android Automotive OS?




If your app does not meet the usability requirements described on this page, the Play Store team
will contact you through the email address specified in the Google Play Console account associated with
the app.




Note: For information about how to publish your app in Google Play, see Distribute Android apps for cars.




My app targets more than just Android Auto or Android Automotive OS. If my app does not meet the
car requirements, will my new or updated app still appear on Google Play for other devices?




No. When Google begins the approval process, your app will undergo a driver safety
review, and any subsequent updates will not be
available for distribution until the app is approved. If you need to make updates to
your app for other devices, we recommend creating a separate release from the updates
to your car app.




Important: Due to this restriction, you should not use your production APK
for Auto support prototyping.



Change notes



December 2022





  • Internet of Things Functionality

    • Categories affected: Internet of Things


    • New criteria:




      The IOT app may allow the following while driving:


      • View the current state of devices . For example: to view if
        a garage door is open or closed, a light bulb is on or off, a
        security system is armed or disarmed, or a washer is running or
        completed.


      • Simple, one-touch features that control on and off functions . For example: the ability to turn various devices on and off or
        open and close them, including turning lights on and off, turning
        a thermostat on and off, or opening and closing a garage door or
        curtain. This also includes turning a pre-programmed scene or
        routine on and off.


      • Notify users about an event in the home or another location . For example: receiving notifications for a routine or scene, a
        security alert, or a change in a door's open or closed status.


      The IOT app must not allow the following while driving:


      • Tasks related to app setup of any kind . For example: the
        ability to select devices, systems, or locations for use with the
        IOT app.


      • Tasks related to creation, modification, or reordering . For
        example: the ability to create, modify, or reorder a scene or
        routine, such as a sequence of events when departing or leaving a
        location, including opening and closing a garage door, or turning
        lights on and off.


      • Tasks related to fine-grained device control . For example:
        the ability to control certain functions, including adjusting
        thermostat temperatures or the level of lighting luminescence.







May 2022





  • App Categories: "Parking & Charging" has
    been replaced with "Point of Interest"


  • Screen Animation

    • Categories affected: Media, Messaging, Navigation, Point of Interest


    • Previous text:





      The app does not display animated elements on the screen such as
      animated graphics, video, or progress bars.






    • New text:





      The app does not display animated elements on the screen such as
      animated graphics or video.








  • Image Usage

    • Categories affected: Media, Messaging, Navigation, Point of Interest


    • Previous text:





      App elements do not display any images on the screen. Exceptions
      include:



      • Apps may display a single static image for content context in
        the background of the consumption screen, such as album art or
        the advertiser's corporate logo.

      • Apps may display icons in the content navigation drawer.

      • Navigation, parking, and charging apps may display images and
        photographs to aid in driving decision-making.

      • Navigation apps may display an image for lane guidance or
        junction guidance.






    • New text:





      App elements do not display any images on the screen. Exceptions
      include:



      • Apps may display a single static image for content context in
        the background of the consumption screen, such as album art or
        the advertiser's corporate logo.

      • Apps may display icons in the content navigation drawer.

      • Apps may display images and
        photographs to aid in driving decision-making.

      • Navigation apps may display an image for lane guidance or
        junction guidance.








  • Permitted Categories

    • Categories affected: Media, Messaging, Navigation, Point of Interest, Video


    • Previous text:




      The app does not include games or other features outside the app types
      intended for cars.
      (Learn More)




    • New text:




      The app does not include features outside the app types intended for cars.
      (Learn More)






  • Visual Information on Phone

    • Categories affected: Media, Navigation, Point of Interest


    • Previous text:




      Android Auto only: If the user must go to the phone
      screen (for example, to act on a permission request), then the app must
      display a message instructing the user to only look at their phone
      screen when it’s safe to do so.
      (Learn How for media,
      Learn How
      for navigation, parking, and charging)




    • New text:




      Android Auto only: If the user must go to the phone
      screen (for example, to act on a permission request), then the app must
      display a message instructing the user to only look at their phone
      screen when it’s safe to do so.
      (Learn How for media,
      Learn How
      for navigation and point of interest apps)






  • Navigation Functionality

    • Categories affected: Navigation


    • Previous text:




      The app draws only map content on the surface of the navigation templates.
      Text-based turn-by-turn directions, lane guidance, and estimated arrival
      time must be displayed on the relevant components of the Navigation
      template. Additional information relevant to the drive (e.g., speed limit,
      road obstructions) can be drawn on the right side of the map.




    • New text:




      The app draws only map content on the surface of the navigation templates.
      Text-based turn-by-turn directions, lane guidance, and estimated arrival
      time must be displayed on the relevant components of the Navigation
      template. Additional information relevant to the drive (e.g., speed limit,
      road obstructions) can be drawn on the safe area of the map.






  • Point of Interest Functionality

    • Categories affected: Point of Interest


    • Previous text:




      The app must provide meaningful functionality in its category relevant to
      driving.




    • New text:




      The app must provide meaningful functionality relevant to driving.





    • Removed criteria:





      If a parking app is displaying a list of locations next to a map (e.g.,
      the Place List Map template), then the locations in the list can only be
      parking spots.



      Similarly, for a charging app, the locations must be charging stations.









April 2022





  • Display Orientation

    • Categories affected: Video


    • New criteria:





      UIs drawn by the app support both landscape and portrait screens.






  • Driver Distraction

    • Categories affected: Video


    • New criteria:





      While driving, the video app must not be launchable and the video
      app's screen must not be visible. The video app's audio must stop
      when the user starts driving.






  • Settings Flow

    • Categories affected: Video


    • New criteria:





      App must proceed to the home page after (attempted) sign-in.






  • Automotive Functionality

    • Categories affected: Video


    • New criteria:





      App does not contain driver optimized activities.






  • CPU Architectures

    • Categories affected: Video


    • New criteria:





      App supports both x86_64 and ARM CPUs.






  • App Navigablity

    • Categories affected: Video


    • New criteria:





      App allows users to navigate through the app without encountering
      any dead ends.







November 2021




  • Visual Information on Phone

    • Categories affected: Media, Navigation, Parking & Charging


    • Previous text:





      While the app is interacting with the car screen and the car is not parked,
      the app does not activate the phone screen to present any form of visual
      information such as notifications, toasts, video, images, advertising,
      or similar (Learn How
      for navigation, parking, and charging). Similarly, while the app is
      running Android Auto UI on the phone screen, the app does not present
      any visual information on the phone screen that is unrelated to
      Android Auto.



      If the user must go to the phone screen (e.g., to act on a permission
      request), then the app must display a message instructing the user to only
      look at their phone screen when it’s safe to do so.






    • New text:




      Android Auto only: If the user must go to the phone
      screen (for example, to act on a permission
      request), then the app must display a message instructing the user to only
      look at their phone screen when it’s safe to do so.
      (Learn How for media,
      Learn How
      for navigation, parking, and charging)







  • Payments

    • Categories affected: Navigation, Parking & Charging


    • Previous text:





      The app must have simple flows if purchases are enabled.






    • New text:




      The app must have simple flows if purchases are enabled, using shortcuts
      such as recent or favorite purchases. (Learn How)



      The app must not allow any of the following:



      • Setup of payment methods

      • Multiple items to be selected for purchase

      • The user to commit to recurring payments (for example, subscriptions)














Read article
Build for billions  |  Android Developers




















Build for billions


The markets with the fastest growing internet and smartphone penetration
can have some challenging issues, such as:



  • Slow, intermittent, or expensive connectivity.

  • Devices with screens, memory, and processors that may be less capable than devices in other markets.

  • Limited opportunities to recharge batteries during the day.



To help your app succeed and deliver the best possible experience in
developing markets, we've put together some advice on how to address
these issues.



The practices described in this section are relevant to all apps, not
only apps published in developing markets. Apps that use memory, power,
and network bandwidth efficiently will perform better in any market and
produce a better experience for all users.


































Build apps to delight billions



































We've divided our advice into five broad categories: connectivity, device capability, data cost, battery consumption, and content. The categories are presented in no particular order, and you should take them as guidelines, not absolutes. You should always research the particulars of any market or country you are targeting.




















































Learn how to provide a better experience for users connected to slower networks.
Focus on optimizing images, optimizing networking, and fine-tuning data transfer.





































Learn how to support devices with capabilities that may be different from those you
usually develop for. Take into account different screen sizes, backward compatibility,
and efficient memory use.






















































Learn how to help users minimize their network traffic costs by
reducing app size and offering configurable network settings.





































Learn how your app can help preserve battery life. Follow the best practices for
power management and benchmarking to ensure sure that your app isn't draining the
battery unnecessarily.






















































Learn how to present content for the best possible user experience. Areas to focus
on include UI responsiveness, UI best practices, and localization.




























Read article
Large screen app quality  |  Android Developers














Android devices come in a variety of form factors—phones, tablets, Chromebooks, foldable devices—which have a wide range of screen sizes. Android supports multiple display modes, including multi-window, multi-display, multi-instance, and picture-in-picture. Foldable devices can be in various folded states, or postures, such as tabletop posture or book posture.



To ensure your app provides a great user experience regardless of device form factor, screen size, display mode, or posture, complete the large screen compatibility checklists and tests below.



The checklists and tests define a comprehensive set of quality requirements for most types of Android apps. Your app probably won't need to meet all of the requirements. Implement the ones that make sense for your app's use cases.



As you enhance your app with large screen capabilities, help users better understand your app's large screen experience by updating your app listing on Google Play. Upload screenshots that show off the app on large screens. Call attention to large screen features in your app description. For more information and best practices, see Google Play Help.



For examples of optimized and differentiated large screen layouts, see the large screen gallery.



Large screen compatibility checklists



The compatibility checklists define criteria to help you assess the level of support your app provides for large screens.



Levels of support include the following:




  • Tier 3 (Basic) — Large screen ready : Users can complete critical flows but with a less than optimal user experience. Your app runs full screen (or full window in multi-window mode), but app layout might not be ideal. The app is not letterboxed; it does not run in compatibility mode. The app provides basic support for external input devices, including keyboard, mouse, and trackpad.


  • Tier 2 (Better) — Large screen optimized : Your app implements layout optimizations for all screen sizes and device configurations along with enhanced support for external input devices.


  • Tier 1 (Best) — Large screen differentiated : Your app provides a user experience designed for tablets, foldables, and Chrome OS. Where applicable, the app supports multitasking, foldable postures, drag and drop, and stylus input.




Complete the Tier 2 requirements to enable your app to provide an excellent user experience on all Android devices. To make your app outstanding on large screens, complete Tier 1.



Tier 3 — Large screen ready



Large screen ready apps must first fulfill the core app quality requirements—in particular, the UI and Graphics requirements.



Apps must also meet the following large screen requirements:



























































Category ID Test Description
Configuration and continuity LS-C1 T3-1, T3-2

App fills the available display area—the entire screen or, in multi-window mode, the app window. App is not letterboxed; it does not run in compatibility mode.


App handles configuration changes and retains or restores its state as the device goes through configuration changes such as device rotation, folding and unfolding, and window resizing; for example:



  • Scroll position of scrollable fields is maintained
  • Text typed into text fields is retained and the keyboard state is restored
  • Media playback resumes where it left off when the configuration change was initiated

LS-C2 T3-3 App handles combinations of configuration changes, such as window resizing followed by device rotation, or rotation followed by device folding or unfolding.
Multi-window and multi-resume LS-M1 T3-4

App is fully functional in multi-window mode. See Multi-window support.


Note: Unity apps should be on Unity Long Term Support (LTS) version 2019 or later. See Multi-window mode verification.

LS-M2 T3-5, T3-6 App fully supports multi-resume mode. App updates its UI (continues playing media, incorporates new messages, updates download progress, etc.) when the app is not the top focused app. In addition, the app handles the loss of exclusive resources such as cameras and microphones in multi-window scenarios. See Multi-window lifecycle in Multi-window support.
Camera preview and media projection LS-CM1 T3-7 App provides camera preview in landscape and portrait orientations, folded and unfolded device states, and multi-window mode. Preview is properly proportioned and in the correct orientation.
LS-CM2 T3-8 App supports media projection in landscape and portrait orientations, folded and unfolded device states, and multi-window mode. Projection is properly proportioned and in the correct orientation.
Keyboard, mouse, and trackpad LS-I1 T3-9 App supports text input using external keyboard and switches between physical and virtual keyboards when an external keyboard is connected or disconnected without relaunching the app.
LS-I2 T3-10 App supports basic mouse or trackpad interactions:

  • Click: Any clickable element, including buttons, dropdown menus, text entry fields, and navigation icons
  • Select: Any selectable element, including radio buttons, checkboxes, and text (by swiping or double clicking)
  • Scroll: Vertically and horizontally in scrollable elements such as lists and pickers

Stylus LS-S1 T3-11 App provides basic support for stylus-equipped Chromebooks, tablets, and foldables. The stylus can be used to select and manipulate UI elements, including scrolling through lists, pickers, and other scrollable content. See Stylus in Input compatibility on large screens.

Note: Basic stylus input is the same as touch input, which is fully supported by Android. All apps support basic stylus input with no special development required.



Tier 2 — Large screen optimized



Optimized apps fully support all screen types and device states, including state transitions.


































































Category ID Test Description
UX LS-U1 T2-1 App has responsive and adaptive layouts designed for large screens. All layouts are responsive (see Migrate your UI to responsive layouts). Implementation of adaptive layouts is determined by window size classes.

The app UI can include the following:


  • Leading edge navigation rails that expand on larger window sizes into full navigation panels
  • Grid layouts that scale the number of columns to accommodate window size changes
  • Columns of text on large screens
  • Trailing edge panels that are open by default on laptop and desktop screen sizes; closed, on smaller screens

Two-pane layouts, where appropriate, are recommended to take advantage of the large screen space. See SlidingPaneLayout for list detail UIs.

Activity embedding enables activity-based apps to easily create multi-pane layouts by displaying activities side by side.

LS-U2 T2-1 Modals, options menus, and other secondary elements are properly formatted on all screen types and device states, for example:

  • Bottom sheets are not full width on large screens. (Apply a maximum width to avoid stretching.) See Behavior in Sheets: bottom.
  • Buttons are not full width on large screens. See Behavior in Buttons.
  • Text fields and boxes do not stretch to full width on large screens. See Behavior in Text fields.
  • Small edit menus or modals do not cover the entire screen and maintain context for the user as much as possible. See Menus.
  • Options menus appear next to the item the user selected. See the "Contextual menu" topic in Menus.
  • Navigation rails replace navigation bars for better ergonomics. Rails can also complement other navigation components, such as navigation bars. See Navigation rail.
  • Navigation drawers are updated to the latest material component. See Navigation drawer.
  • Dialog boxes are updated to the latest material component. See Dialogs.
  • Images are displayed at a proper resolution and are not stretched or cropped.

LS-U3 T2-2 Touch targets are least 48dp. See the Material Design Layout and typography guidelines.
LS-U4 T2-3 A focused state is created for custom drawables that are interactive. A custom drawable is any visual UI element not provided by the Android framework. If users can interact with a custom drawable, the drawable must be focusable when the device is not in Touch Mode, and a visual indication of the focused state must be apparent.
Keyboard, mouse, and trackpad LS-I3 T2-4 The main task flows in the app support keyboard navigation, including Tab and arrow key navigation. See Build more accessible apps.
LS-I4 T2-5 App supports keyboard shortcuts for commonly used actions such as select, cut, copy, paste, undo, and redo. See Input compatibility.
LS-I5 T2-6 Keyboard can be used to control media playback; for example, the space bar plays and pauses media.
LS-I6 T2-7 Keyboard Enter key performs a send function in communication apps.
LS-I7 T2-8 App supports mouse and trackpad for zoom and right-click (secondary mouse button or secondary tap) capabilities. Options menus are accessible by typical mouse and trackpad right-click behavior.
LS-I8 T2-9 App content can be zoomed using the mouse scroll wheel (in conjunction with a keyboard key press) and trackpad pinch gestures.
LS-I9 T2-10 Actionable UI elements have hover states (where appropriate) to indicate to mouse and trackpad users that the elements are interactive.


Tier 1 — Large screen differentiated



Large screen differentiated apps use the large screen form factor to its full potential. Differentiated apps offer a premium user experience that's productive and enjoyable.


Note: Because Tier 1 apps are highly differentiated, some of the listed capabilities are applicable only to specific types of apps. Choose the functionality that's appropriate for your application.





























































































Category ID Test Description
Multitasking and multi-instance LS-M3
T1-1, T1-2, T1-3
App supports various multitasking scenarios; for example:

  • Picture-in-picture mode: App is able to enter and exit picture-in-picture mode in portrait and landscape orientations, with the device folded and unfolded, and in multi-window mode. See Picture-in-picture (PiP) support.
  • Multi-window mode: App can open another application in a separate window from a deep link; for example, a contact management app opens a link to an email message which is displayed in an email app in a new window. See FLAG_ACTIVITY_LAUNCH_ADJACENT.
  • Attachments: Messaging apps can open attachments (such as videos) in a separate window.

LS-M4 T1-4 App is able to launch multiple instances of itself in separate windows. Use cases include document editing, web browsing, file management apps, and product comparisons in shopping apps. See Multi-instance in Multi-window support.
Foldable postures and states LS-F1 T1-5 App supports all foldable postures and related use cases:

  • Tabletop mode — Video calling and video or audio playback.
  • Book mode — Reading lengthy text content.
  • Dual display — Front and back screen preview for camera apps. Support for dual-screen devices.

See Learn about foldables.
LS-F2 T1-6 Camera apps adjust their preview for folded and unfolded states and support front and back screen preview.
Drag and drop LS-D1 T1-7 App supports drag and drop between views within the app and, in multi-window mode, to and from other apps. See Drag and drop. See also LS-S3.
Keyboard, mouse, and trackpad LS-I10 T1-8 App provides a comprehensive set of keyboard shortcuts while supporting conventional shortcuts such as Ctrl-C for copy and Ctrl-Z for undo. App maintains keyboard shortcut parity with equivalent web or desktop versions of the app whenever possible.
LS-I11 T1-9 Keyboard and mouse or trackpad combinations, such as Ctrl+click or Ctrl+tap and Shift+click or Shift+tap, provide enhanced capabilities, including the selection of ranges of adjacent items or multiple separated items.
LS-I12 T1-10 App displays a scrollbar while content is being scrolled using a mouse or trackpad.
LS-I13 T1-11 Where applicable, UI elements display additional content such as fly‑out menus or tooltips on mouse or trackpad hover. App maintains hover state parity with equivalent web or desktop versions of the app whenever possible.
LS-I14 T1-12 Desktop-style menus and context menus are used where appropriate.
LS-I15 T1-13 UI panels in multi-panel layouts are reconfigurable using a mouse or trackpad. Reconfigurable panels enable users to adjust the app layout for increased productivity, for example, by changing the size of the detail panel of a list-detail layout or by rearranging panels on screen. Note: This does not apply to navigation bars, rails, or drawers.
LS-I16 T1-14 Triple clicking or tapping using a mouse or trackpad selects entire lines or paragraphs of text.
Stylus LS-S2 T1-15 App supports drawing and writing with a stylus. Drawings and writing can be erased with the stylus.
LS-S3 T1-16 App provides stylus support for dragging and dropping content between views within the app and, in multi-window mode, to and from other apps. See Drag and drop.
LS-S4 T1-17 App provides enhanced stylus support, including:

  • Pressure sensitivity for drawing strokes of varying width
  • Tilt detection for creating shading strokes
  • Palm and finger rejection to prevent stray marks

Custom cursors LS-P1 T1-18

App displays customized cursors to indicate how and when users can interact with UI elements and content, for example:



  • System cursors provided by the Android framework

    • I-beam for text

    • Resize handles at resizable layer edges

    • Processing spinners



  • Specialty cursors that you provide

    • Crosshairs when hovering over targets in games

    • A magnifying glass when hovering over zoomable content

    • Tools in drawing or illustration apps




See PointerIcon and Mouse pointer icons.


Large screen compatibility tests



The following tests help you discover quality issues in your app. You can combine the tests or integrate groups of tests together in your own test plans.



For layout and UX purposes, test on at least the following device types:




  • Foldable (841x701 dp)

  • 8-inch tablet (1024x640 dp)

  • 10.5-inch tablet (1280x800 dp)

  • 13-inch Chromebook (1600x900 dp)





Use the following Android emulators to test large screen device compatibility:




  • Foldable phone — 7.6” Fold-in with outer display

  • Tablet — Pixel C 9.94"

  • Dual-display foldable — Microsoft Surface Duo



Tier 3 — Large screen ready






































































Category ID Feature Description
Configuration and continuity T3-1 LS-C1 Verify that the app is not letterboxed and is not running in compatibility mode in portrait and landscape orientations, in multi-window mode, or when a large screen foldable device is unfolded in portrait and landscape orientations.

Note: Test on a large screen device (sw >= 600dp) running Android 12 (API level 31) or higher to ensure the device supports the following:


  • All device orientations regardless of orientation restrictions set with the android:screenOrientation app manifest element

  • Multi-window mode, even for apps that have specified android:resizeableActivity="false" in the app manifest



T3-2 LS-C1 From each app screen that has scrollable content, continuous playback content, or text entry fields, do the following:

  • Scrollable content: Scroll the content
  • Playback content: Begin playback
  • Text entry fields: Enter text in multiple fields

Rotate the device between landscape and portrait orientations, fold and unfold the device (if applicable), span and unspan your app across two screens (if you have a dual-screen device) and resize the app window in multi-window mode. Verify the following:

  • Scrollable content: The scroll position remains the same
  • Playback content: Playback resumes where it left off when the configuration change was initiated
  • Text entry fields: Previously entered text is retained in input fields
T3-3 LS-C2 From each app screen, perform combinations of rotating the device between landscape and portrait orientations, folding and unfolding the device (if applicable), and resizing the app window in multi-window mode.
Multi-window and multi-resume T3-4 LS-M1

Open the app in multi-window mode. Check whether the app is fully functional in all window sizes, device orientations, and foldable device states. Resize the app window in each orientation. For foldable devices, fold and unfold the device in each orientation.


Unity apps


Open an app other than your Unity app. Go to the Recents screen. Select the app icon and put the app in split-screen mode. Open your Unity app, which should launch in split-screen mode beside or below the first app. Go to the Home screen to hide the pair of apps. Go to the Recents screen. Select the split-screen app pair that includes your Unity app. Verify that the Unity app resumes its activity and the app's layout in the split-screen window is correct with all UI elements accessible.

T3-5 LS-M2 Open the app and initiate a process, such as playing a video, that continuously updates the app. Open another app and make the new app the top focused app. Verify that the non-focused app continues to update its content (for example, a video continues to play).
T3-6 LS-M2 In the app, open the camera or use the microphone. Open another app, and make the new app the top focused app. Verify that the non-focused app has relinquished the camera or mic. Make the original app the top focused app. Verify that the app has regained access to the camera or mic.
Camera preview and media projection T3-7 LS-CM1 Open the app full screen and in multi-window mode. Start the camera from within the app. Rotate the device between landscape and portrait orientations. For foldable devices, fold and unfold the device in each orientation. In multi-window mode, resize the app window. Verify that the camera preview is in the proper orientation and proportions in all device states and window sizes.
T3-8 LS-CM2 Open the app full screen and in multi-window mode. Start a media projection. Rotate the device between landscape and portrait orientations. For foldable devices, fold and unfold the device in each orientation. In multi-window mode, resize the app window. Verify that the media projection is in the proper orientation and proportions in all device states and window sizes.
Keyboard, mouse, and trackpad T3-9 LS-I1 For each app screen that has text entry fields, connect an external keyboard to the device and enter text with the external keyboard and the virtual keyboard. Disconnect the external keyboard and enter text with the virtual keyboard.
T3-10 LS-I2 For each app screen, connect a mouse and trackpad to the device. Perform basic mouse and trackpad interactions:

  • Click all clickable elements such as buttons, dropdown menus, and text entry fields.
  • Select radio buttons and checkboxes. Select text by swiping and double clicking.
  • Scroll vertically and horizontally (if applicable) through lists, pickers, etc.

Stylus T3-11 LS-S1 Using a stylus, navigate through the app, select UI elements, scroll through lists and pickers, and generally interact with the app.


Tier 2 — Large screen optimized






























































Category ID Feature Description
UX T2-1
LS-U1, LS-U2

Run the app on devices that have a wide variety of screen sizes, including phones, foldable phones, small and large tablets, and Chrome OS devices. Run the app in multi-window mode on the devices.

Verify that the app layout responds and adapts to different screen and window sizes. Check whether the app expands and contracts navigation rails, scales the number of columns in grid layouts, flows text into columns, and so forth. Observe whether UI elements are formatted for both aesthetics and function.

For apps using activity embedding, test whether activities are displayed side by side on large screens, stacked on small screens.

T2-2 LS-U3 Verify that touch targets maintain a consistent, accessible size and position for all display sizes and configurations. For information on accessibility, see the Accessibility Scanner.
T2-3 LS-U4 On each app screen that contains an interactive custom drawable, verify that the drawable can be focused using an external keyboard, D‑pad, or other device that enables views to be focused. Verify that a visual indication of the focused state is apparent. For related information, see Touch Mode.
Keyboard, mouse, and trackpad T2-4 LS-I3 Navigate through the app's focusable components using the Tab and arrow keys of an external keyboard.
T2-5 LS-I4 Use keyboard shortcuts on an external keyboard to perform select, cut, copy, paste, undo, and redo actions.
T2-6 LS-I5 Use an external keyboard to start, stop, pause, rewind, and fast forward media playback.
T2-7 LS-I6 Use the Enter key of an external keyboard to send or submit data.
T2-8 LS-I7 Use the secondary mouse button or trackpad secondary tap capability to access the options menu of interactive elements.
T2-9 LS-I8 Use the mouse scroll wheel (in conjunction with the Control, or Ctrl, key) and trackpad pinch gestures to zoom content in and out.
T2-10 LS-I9 Hover the mouse or trackpad cursor over actionable UI elements to activate the element's hover state.


Tier 1 — Large screen differentiated










































































































Category ID Feature Description
Multitasking and multi-instance T1-1 LS-M3 Enter and exit picture-in-picture mode in portrait and landscape orientations, with the device folded and unfolded, and in multi-window mode. In multi-window mode, change the window size while picture-in-picture mode is active.
T1-2 LS-M3 In multi-window mode, open another app from within the app and display both apps side by side.
T1-3 LS-M3 Open and close attachments and notifications in portrait and landscape orientations, with the device folded and unfolded, and in multi-window mode.
T1-4 LS-M4 Launch multiple instances of the app in separate windows in portrait and landscape orientations, with the device folded and unfolded, and in multi-window mode.
Foldable postures and states T1-5 LS-F1 View the app in all foldable postures, including tabletop mode, book mode, and dual display (for example, Microsoft Surface Duo). Verify that UI elements transition to the optimal location (for example, media controllers move to the horizontal screen area in tabletop mode).
T1-6 LS-F2 Activate the camera from within the app. Verify that the camera preview is correct when the device is folded and unfolded and rotated to portrait and landscape orientations. With the device unfolded, verify that the preview is correct on front and back screens.
Drag and drop T1-7 LS-D1 Drag and drop images and text to drop targets within the app. In multi-window mode, drag and drop images and text between the app and another app (to and from both apps). Verify the functionality in portrait and landscape orientations and when the device is in a folded or unfolded state.
Keyboard, mouse, and trackpad T1-8 LS-I10 Change the app's keyboard shortcuts. Test the revised shortcuts using an external keyboard.
T1-9 LS-I11 Using an external keyboard, mouse, and trackpad, select items in the app's UI. Select multiple separated items and ranges of adjacent items using keyboard/mouse/trackpad actions such as Ctrl+click, Ctrl+tap, Shift+click, and Shift+tap.
T1-10 LS-I12 Scroll app content using a mouse and trackpad. Verify that a scrollbar appears while the content is scrolling.
T1-11 LS-I13 Using a mouse and trackpad, hover the pointer over UI elements that contain cascading or pop-up content. Verify that the additional content is revealed.
T1-12 LS-I14 On laptop and desktop displays, verify that desktop-style menus and context menus are used.
T1-13 LS-I15 On each app screen, resize and rearrange UI panels using a mouse and trackpad.
T1-14 LS-I16 Using a mouse and trackpad, triple click or tap to select items in the app; for example, to select full lines of text.
Stylus T1-15 LS-S2 Draw and write within the app using a stylus. Erase drawings and writing using the stylus.
T1-16 LS-S3 Using a stylus, drag and drop content to drop targets within the app. In multi-window mode, drag and drop content between the app and another app (to and from both apps).
T1-17 LS-S4 Interact with the app using a stylus as follows:

  • Draw with varying amounts of stylus pressure. Check whether the width of the strokes changes as the pressure changes. More pressure should produce thicker strokes.
  • Tilt the stylus as you draw; shading strokes should be produced. The more the stylus is tilted, the wider and lighter the shading strokes should be.
  • As you're drawing, let your fingers and palm touch the screen. The finger and palm touches should not produce marks.

Custom cursors T1-18 LS-P1 Interact with the app using a mouse and trackpad. Verify that custom cursors appear where appropriate, for example:

  • I-beam for text entry fields
  • Resize handles at resizable layer edges
  • Spinners when app is performing long-running tasks







Read article
Documentation  |  Android Developers


































Whether you're building for Android handsets, Wear OS by Google, Android TV, or Android for Cars, this section provides the guides and API reference you need.
























































Build your first app


Sample code


API reference


Design guidelines


Codelab tutorials


Training courses












































Wear OS


Android TV


Android for Cars


Chrome OS Devices






































Dependency Injection


Testing


Performance


Accessibility


Security


Enterprise


Emerging markets


























































App architecture


Android app bundles


Activities


Intents and intent filters


UI


Navigation


Animations & transitions


Graphics


Audio & video


Background tasks


App data & files


User data & identity


User location


Touch & input


Camera2


CameraX


Sensors


Connectivity


Renderscript


Web-based content













See all developer guides
































Material design


Core app quality


Tablet app quality


Wear app quality


TV app quality


Car app quality












See more

















































Android NDK


Kotlin


Android Studio


Google Play Services


Google Play Console


Android Releases


















































Libraries



















































Libraries










This set of libraries provides APIs for essential app architecture tasks like lifecycle management and data persistence, so you can write modular apps with less boilerplate code.











Learn more












































Libraries










The Android Support Library offers backward-compatible versions of a number of features, including others not built into the framework.











Learn more












































Libraries










The Data Binding Library enables you to write declarative layouts.































Libraries










Android Test helps you build and run test code for your app.































Libraries










The Google Play Billing Library provides a simple interface for sending billing requests and managing billing transactions with Google Play.





































Developer Tools


































Guide










You can install and run your app on the Android Emulator faster than with a physical device. It simulates various device configurations and hardware sensors, and it uses a snapshot to quickly resume exactly where you left off.































Guide










Android Studio uses Gradle, an advanced build toolkit, to automate the build process, while allowing you to define flexible, custom build configurations.































Guide










Android Studio includes a layout editor that allows you to build and preview your app UI by dragging elements into a visual design editor instead of writing layout XML by hand.

































































Guide










Poor app performance can ruin the user experience and destroy your app's reputation. If it ever responds slowly, shows choppy animations, freezes, crashes, or consumes a lot of power, your users will notice. To avoid these performance problems, use the Android Profiler to measure your app's memory, CPU, and network usage.











Profile your app

































More education







Check out these other resources for beginner and experienced Android developers.

































Codelabs are short, self-paced tutorials that step you through the process of building a particular type of app or adding a new feature to an existing app.


































Google partnered with Udacity to teach Android development with online videos. Several free courses are available, or you can enroll in the Nanodegree program.


































These online trainings provide a guided path through the process of learning how to build Android apps. Courses are available for new and advanced developers.





































Latest videos














More videos































Read article
Wear OS app quality  |  Android Developers











Wear OS is a wearable platform, helping people live more present, healthy, and productive lives.
Wear OS makes smartwatches into glanceable standalone devices so users can stay connected online
and complete tasks quickly, while leaving their phones in their pockets. Designing experiences for
wearables is different from designing for phones or tablets. For more information, see
Principles of Wear OS development.




These checklists define minimum quality criteria and associated tests to help you assess
the quality of your app. The minimum quality criteria are assessed using the latest version of
Wear OS. Some of these criteria are easy to miss, and the tests help you remember
to include them in your test plans.




Each test has a unique ID which you might find helpful to use when you communicate with your team.




Caution: Test your app and make sure it works on a watch running Wear OS 2.0 and on a watch
running Wear OS 3.0 or greater.


Basic compatibility




Your mobile app should fulfill
the core app quality requirements.
In particular, you should pay special attention to the following two notification related
requirement for your mobile apps:


















Area ID Description
Notification
VX-S1

Notifications follow Material Design guidelines. In particular:



  1. Notifications are not used for cross-promotion or advertising another product, as this is
    strictly prohibited by the Play Store.

  2. Notification channels are defined
    according to best practices, rather than serving all notifications from one channel.

  3. Selecting

    the correct notification priority.

  4. Multiple notifications are stacked into a single
    notification group, where possible.

  5. Set
    timeouts
    for notifications where appropriate.

  6. Notifications are persistent only if related to ongoing events, such as music playback or a
    phone call. For more information, see the
    Functionality section.


VX-S2

For messaging apps, social apps and conversations:



  1. Use the
    MessagingStyle
    notifications for conversations.

  2. Support the
    direct reply action.

  3. Support
    conversation shortcuts, and implement best
    practices for getting the
    best direct share ranking.

  4. Support bubbles.


Only 1 and 2 are supported on Wear OS without a native Wear OS app.






When setting up a test environment, we recommend that at minimum, you pair your phone / emulator
with the Wear OS Round 1.84” emulator.



Better: Full support for Wear OS




Beyond supporting notifications on connected mobile devices, Wear OS also supports native
applications. As a first step, we recommend that developers read the
Principles of Wear OS development guide. This
contains the best practices for creating a Wear OS app.



you should test their Wear OS app against the following emulators:



  • Wear OS Square 1.65”

  • Wear OS Round 1.84”




Important: To ensure a great user experience, apps for wearables must meet specific
requirements for usability. Only apps that meet the following quality criteria qualify as
Wear OS apps on Google Play. Qualifying as a Wear OS app makes it easier for those using
wearables to discover your app on Google Play.






































Area ID Description
Layout
WO-L1

The app's user interface is formatted appropriately for all Wear OS display types:



  • Square

  • Round



The app's content fits within the physical display area, and no text or controls are cut off by
the screen edges.



For more information see Handle different watch face shapes.




WO-L2
The app's text is large and glanceable with a suggested minimum font size of 12sp.
Functionality
WO-F1
App includes a watch APK that runs directly on the Wear OS device and is discoverable in the
Wear OS on-watch Play Store. For more information, see
Package and distribute Wear OS apps.
WO-F2
The app must mention Wear OS in its Google Play Store listing and contain at least one
screenshot that depicts the Wear OS app experience. Provide screenshots showing only your app
interface. Don’t place your screenshots within device frames, or include additional text,
graphics, or backgrounds that are not part of the interface of your app. Upload screenshots
with a 1:1 aspect ratio. For more information, see
Add preview assets to showcase your app.
WO-F3
Wear OS functionality works as expected or as described in the app's Google Play Store
listing.
WO-F4

If your app is a single Wear OS watch face, the App Icon must be an accurate representation of
the watch face. Apps that include more than one watch face are exempt from this
requirement. However, apps are more discoverable on the Store if they only have a single watch
face. Do not include text or graphics that are not part of the watch face experience.
For more information on creating app icons, see
Google Play icon design specifications.


Best: A differentiated experience




At this level, the Wear OS app should have been tested and paired with both Android and iOS
mobile devices.














Area ID Description
Functionality
WO-F5
If the app is identified as
standalone,
it must be functional without requiring a phone for authentication or operation.
In addition to supporting independent login via app on the watch, standalone apps may support
additional authentication methods, such as automatic login sharing when a mobile phone is
nearby. For more information, see
Authentication on wearables.


Frequently asked questions




After I submit my app for Wear OS review, how do I find out if my app doesn't meet all
of the requirements for Wear OS?



If your app does not meet the usability requirements described on this page, the Play Store team
contacts you using the email address specified in the
Google Play Console account associated with the
app.



Caution: Make sure your app meets the
functionality requirements,
otherwise your app isn't considered a Wear OS app and won't be reviewed for Wear OS.




If my app does not meet the Wear OS requirements, will my new or updated app still appear on
Google Play for other devices and still be installable on wearables?



No, your app will not show up in the Wear OS version of the Google Play Store. However, your app
may still appear in the Play Store for other devices (phones or tablets) and still may be
installed on a wearable.



For information about how to publish your Wear OS apps in Google Play, see
Distributing to Wear OS.




















Large screen app quality










TV app quality


























Read article
Device capability for billions  |  Android Developers









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



Support multiple screen sizes




Your app can provide a better user experience for billions of users if it supports screens
of various sizes and resolutions. This section describes a few ways you can do this.


Use density-independent pixels (dp)




  • Defining layout dimensions with pixels doesn't work well because different screens have different pixel densities,
    so the same number of pixels may correspond to different physical sizes on different devices.


  • To overcome this Android supports the density-independent pixel (dp),
    which corresponds to the physical size of a pixel at 160 dots per inch (mdpi density).


  • Defining layouts with dp ensures that the physical size of your user interface is consistent regardless of device.
    Visit the Android guide on
    Supporting Multiple Screens
    for best practices on using density-independent pixels.


Test text and graphics on ldpi and mdpi screen densities




  • Test to ensure that your text and graphics work well on low- and medium-density (ldpi and mdpi) screens
    because these are common densities,
    especially in lower-cost devices.
    Look out for text that may be unclear on lower-density screens, where fine details aren't visible.


  • Devices with lower-density screens tend to have lower hardware specifications.
    To ensure that your app performs well on these devices,
    consider reducing or eliminating heavy graphics processing loads,
    such as animations and transitions.


  • For more information about supporting different densities,
    see the Android training on
    Supporting Different Densities.


Test layouts on small and medium screen sizes



  • Validate that your layouts scale down by testing on smaller screens. As
    screen sizes shrink, be very selective about visible UI elements, because
    there is limited space for them.


  • The Material Design guidelines describe
    metrics and keylines
    to ensure that your layouts can scale across screen densities.


  • For more information about supporting different screen sizes,
    see the Android training on
    Supporting Different Screen Sizes.



Provide backward compatibility



Not all of your users may be using devices powered by the latest, greatest version
of the Android platform. Here are some ways you can improve backward compatibility,
helping make your app available to as many people as possible.



Set your targetSdkVersion and minSdkVersion
appropriately




  • Apps should build and target the most recent version of Android to ensure
    they offer the most current behavior across a broad range of devices;
    this still provides backward compatibility to older versions.
    Here are the best practices for targeting API levels appropriately:


    • targetSdkVersion should be the latest version of Android.
      Targeting the most recent version ensures that your app inherits newer
      runtime behaviors when running newer versions of Android. Be sure to
      test your app on newer Android versions when updating the
      targetSdkVersion as it can affect app behavior.


    • minSdkVersion Sets the minimum supported Android version.
      Setting minSdkVersion also results in the Android build
      tools reporting incorrect use of new APIs that might not be available in
      older versions of the platform. By doing so, you are protected
      from inadvertently breaking backward compatibility.



  • Consult the
    Android dashboards, the Google Play Developer
    Console for your app, and industry research in your target markets to
    gauge which versions of Android to target, based on your target users.


Use the Android Support libraries




  • Ensure your app provides a consistent experience across OS versions by using the
    Android Support Library.
    This library provides backward-compatible versions of Android framework APIs
    as well as features that are only available through the library APIs
    such as AppCompatActivity and the Material Design Support Library.

  • Some of the highlights include:

    • v4 and v7 support library: Many framework APIs for older versions of
      Android such as ViewPager ,
      ActionBar ,
      RecyclerView , and
      Palette .

    • Material Design
      support library: APIs to support adding Material Design components
      and patterns to your apps.


    • Multidex support library: provides support for large apps that have
      more than 65K methods. This can happen if your app is using many
      libraries.



  • For more information about the available support libraries, see the
    Support Libraries Features section of the Android Developer site.


Use Google Play services



  • Google Play services brings the best of Google APIs independent of
    Android platform version. Consider using features from Google Play services
    to offer the most streamlined Google experience on Android devices.

  • Google Play services also include useful APIs such as
    GcmNetworkManager , which provides much of Android 5.0's
    JobScheduler API for older versions of Android.

  • Updates to Google Play services are distributed automatically by the
    Google Play Store, and new versions of the client library are delivered
    through the Android SDK Manager.


Use memory efficiently



Memory is an unsung hero of the user experience. Good memory management can make your
app more stable and more performant; in some cases, its effective use may be the only thing making
your app usable at all. Here are some ways you can help your app use memory wisely.



Reduce memory footprint on low-cost devices



  • Adjust your memory footprint dynamically to ensure compatibility
    across devices with different RAM configurations.

  • Methods such as isLowRamDevice() and
    getMemoryClass() help determine memory
    constraints at runtime. Based on this information, you can scale down your
    memory use. As an example, you can use lower resolution images on low memory
    devices.

  • For more information about managing your app's memory, see the Android
    training on Managing
    Your App's Memory.


Avoid long-running processes



  • Long-running processes stay resident in memory and can slow
    down the device. In most situations, your app should wake up for a given
    event, process data, and shut down. You should use Firebase Cloud Messaging
    (FCM) and
    GcmNetworkManager to avoid long running background
    services and reduce memory pressure on the user's device.


Benchmark memory use



Android Studio provides memory benchmarking and profiling tools, enabling
you to measure memory use at run time. Benchmarking your app's memory
footprint enables you to monitor memory use over multiple versions of
the app. This can help catch unintentional memory footprint growth. Use the
Memory Profiler tool to do the following:




  • Find out whether undesirable garbage collection (GC)
    event patterns might be causing performance problems.

  • Identify object types that get or stay allocated unexpectedly or
    unnecessarily.

  • Identify where in your code the problem might be.



For more information about benchmarking memory use, see

View the Heap and Allocations with Memory Profiler.



Optimize for devices running Android (Go edition)



Android (Go edition) is an optimized experience
for entry-level devices with ≤1GB RAM,
starting with Android Oreo (Go edition).
To ensure your app runs great on Android (Go edition) devices,
you should should take into account the following guidelines:




  • targetSdkVersion
    should be the latest version of Android.
    Android (Go edition) devices only run Android Oreo (API 27 or higher).


  • The app should run smoothly on devices with ≤1GB RAM.
    Keep in mind the memory optimizations listed in
    Use memory efficiently above
    and use Android vitals
    to identify and fix bad behaviors like slow rendering and frozen frames.

  • Picture in picture (PIP) might be disabled
    on devices. Before your app uses PIP, check to be sure it is available by
    calling hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE) .

  • The on-device app size should be smaller than 40MB.

  • The Proportional Set Size (PSS) of the app's RAM usage
    should not exceed 90MB. For games, the PSS of the game's RAM usage should not exceed 150MB. For
    more information about PSS, see the Investigating
    Your RAM Usage guide.

  • The startup time of the app should be minimal and under 5 seconds.



  • SYSTEM_ALERT_WINDOW
    (which allows apps to draw a window on top of other apps) might be disabled on
    Android Go devices that have low RAM. Before drawing over other apps, check whether your app
    has this authorization by calling

    Settings.canDrawOverlays().
    If your app cannot get the permission, gracefully degrade your app so that the user can
    continue using your app, possibly by disabling the feature that requires the SYSTEM_ALERT_WINDOW
    permission.



We recommend that most developers optimize their existing app,
which will be available on all Android (Go edition) devices,
because making your app run faster and lighter will benefit your whole audience.
You can use the
Multiple APK feature
on the Play Console to distribute a specific APK
for Android (Go edition) devices
but you should only do so without compromising the experience
(e.g. you should avoid removing features).
The APK targeting Android (Go edition) devices needs to declare
<uses-feature android:name="android.hardware.ram.low" android:required="true"> ,
target at least API Level 26,
and have a higher version code than the non-Go edition APK.




Note: If you are designing a completely different app,
with a new experience and a different set of features,
you might decide to launch an Android (Go edition) specific app,
with a unique application package.
This would also have a unique Play Store listing,
with its own ratings and install count,
and this may be confusing for users on the Play Store.
For the majority of developers,
we recommend using Multiple APK to target Android (Go edition) devices,
instead of creating two distinct and separate apps.






Additional resources


To learn more about supporting a variety of devices, view the following
resource:


Blog posts











Read article
Core app quality  |  Android Developers







Last updated: May 17, 2021

A useful way to evaluate app excellence is to walk
through the workflows in your app and evaluate the smoothness and safety of the
app experience.



This checklist defines a set of core quality criteria and associated tests to help you assess the
quality of your app. Some of these criteria might be easy to miss, and the tests help you remember
to include them in your test plans.



The checklist highlights the minimum quality that all apps should meet. Your testing will likely
go well beyond what's described here.



Each item in the quality checklist has a unique ID which you might find helpful to use when you
communicate with your team. You can also view the previous
version of these guidelines.



Visual experience




Your app should provide standard Android visual design
and interaction patterns where appropriate, for a consistent and intuitive
user experience.



We recommend using Material Design Components
for creating a user interface in place of Android
platform components where possible. This enables the modern Android look and feel, and it helps
provide UI consistency across Android versions.





























































































Area ID Tests Description
Navigation VX-N1 CR-3 The app supports standard Back button navigation and does not make use of any custom, on-screen "Back button" prompts.
VX-N2 CR-3 The app supports gesture navigation for going back / going to the home screen.
VX-N3 CR-1
CR-3
CR-5

The app correctly preserves and restores user or app state.


The app preserves user or app state when leaving the foreground and prevents accidental data loss due to back-navigation and other state changes.


When returning to the foreground, the app should restore the preserved state and any significant stateful transaction that was pending. Examples include: changes to editable fields, game progress, menus, videos, and other sections of the app or game.



  1. When the app is resumed from the Recents app switcher, the app returns the user to the exact state in which it was last used.
  2. When the app is resumed after the device wakes from the sleep (locked) state, the app returns the user to the exact state in which it was last used.
  3. When the app is relaunched from Home or All Apps, it should do one of the following, depending on how much time has passed since it was last used:

    • If the app was last used a short time ago (minutes), restore the app state as close as possible to its previous state.
    • If more time has passed since the app was last used, try to restore the app as close as possible to its previous state;
      or start it from its home screen or some other default state.




Notifications VX-S1 CR-9

Notifications follow Material Design guidelines. In particular:



  1. Notifications are not used for cross-promotion or advertising another product, as this is strictly prohibited by the Play Store.

  2. Notification channels are defined according to best practices, rather than serving all notifications from one channel.

  3. Selecting the correct notification priority.

  4. Multiple notifications are stacked into a single notification group, where possible.

  5. Set timeouts for notifications where appropriate.

  6. Notifications are persistent only if related to ongoing events, such as music playback or a phone call. For more information, see the
    Functionality section.


VX-S2 CR-9

For messaging apps, social apps and conversations:



  1. Use the MessagingStyle notifications for conversations.

  2. Support the direct reply action.

  3. Support conversation shortcuts, and implement best practices for getting the best direct share ranking.

  4. Support bubbles.


UI and Graphics VX-U1 CR-5 The app supports both landscape and portrait orientations (if possible) and folding /
unfolding.

Orientations expose largely the same features and actions and preserve functional parity.
Minor changes in content or views are acceptable.


VX-U2 CR-5 The app uses the whole screen in both orientations and does not letterbox to account for
orientation changes, including folding and unfolding.

Minor letterboxing to compensate for small variations in screen geometry is acceptable.


VX-U3 CR-5 The app correctly handles rapid transitions between display orientations and device folding
/ unfolding without rendering problems or losing state.
Visual quality VX-V1 CR-all

The app displays graphics, text, images, and other UI elements without noticeable distortion, blurring, or pixelation.



  1. The app should use vector drawables where possible.
  2. The app provides high-quality graphics for all targeted screen sizes and form factors.
  3. No aliasing at the edges of menus, buttons, and other UI elements is visible.


VX-V2 CR-all

The app displays text and text blocks in an acceptable manner for each of the app’s supported languages.



  1. Composition is acceptable in all supported form factors.
  2. No cut-off letters or words are visible.
  3. No improper word wraps within buttons or icons are visible.
  4. There is sufficient spacing between text and surrounding elements.


VX-V3 CR-all The app’s content, and all web contents referred to by the app, support dark theme.
Accessibility VX-A1 CR-all

Touch targets should be at least 48dp in size.
Learn more.


VX-A2 CR-all

The app’s text and foreground content should maintain a high enough color contrast ratio
with its background:



  • 3.0:1 for large text / graphics

  • 4.5:1 for small text (text smaller than 18pt, or if the text is bold and smaller than 14pt)


Learn more about color and contrast.


VX-A3 CR-all Describe each UI element,
except for TextView , using contentDescription .






Functionality





Your app should implement the expected functional behavior.








































































Area ID Tests Description
Audio FN-A1 CR-1
CR-8
Audio resumes when the app returns to the foreground, or indicates to the user that playback is in a paused state.
FN-A2 CR-1
CR-2
CR-8
If audio playback is a core feature, the app should support background playback.
FN-A3 CR-0

When the user initiates audio playback, the app should do one of the following within one second:



  1. Start playing the audio.
  2. Provide a visual indicator that the audio data is being prepared.


FN-A4 CR-0 The app should request audio focus when audio starts playing and abandon audio focus when playback stops.
FN-A5 CR-0 The app should handle other apps’ requests for audio focus. For example, an app might reduce playback volume when another app plays speech.
Media FN-M1 CR-0
CR-6
CR-8
If the app plays audio in the background, it must create a Notification styled with MediaStyle.
FN-M2 CR-0 If the app plays video, it should support picture-in-picture playback.
FN-M3 CR-0 If the app encodes video, it should do so using the HEVC video compression standard.
Sharing FN-S1 CR-0 The app should use the Android Sharesheet when sharing content.
It can suggest targets that are unavailable to custom solutions.
Background Service FN-B1 CR-6 The app avoids running unnecessarily long services in the background. To ensure the smooth running of the user’s device, the system applies various restrictions on background services. These are not considered good uses of background services:


  • Maintaining a network connection for notifications
  • Maintaining a Bluetooth connection
  • Keeping the GPS powered-on


Learn how to choose the right solution for your work.










Performance and stability





Your app should provide the performance, stability, compatibility, and
responsiveness expected by users.













































































Area ID Tests Description
Stability
PS-S1 CR-all
SD-1
The app does not crash or
block the UI thread causing ANR (Android Not
Responding”) errors. Utilize
Google
Play’s pre-launch report to identify potential stability issues. After deployment, pay
attention to the Android Vitals page in the Google
Play developer console.
Performance PS-P1 CR-all
SD-1
The app loads quickly or provides onscreen feedback to the user (a progress indicator or similar cue) if the app takes longer than two seconds to load.
PS-P2 CR-all
SD-1
Apps should render frames every 16ms to achieve 60 frames per second. Developers can use the Profile HWUI rendering option in testing. If there are issues, tools are available to help diagnose slow rendering.
PS-P3 PM-1 With StrictMode enabled (see StrictMode Testing, below), no red flashes (performance warnings from StrictMode) are visible when testing the app. Any red flashes indicate bad behaviors regarding storage, network access, or memory leaks.
SDK PS-T1 CR-0 The app runs on the latest public version of the Android platform without crashing or severely impacting core functionality.
PS-T2 SP-1 The app targets the latest Android SDK needed to align with Google Play requirements by setting the targetSdk value.
PS-T3 SP-1 The app is built with the latest Android SDK by setting the compileSdk value.
PS-T4 SP-2
SP-3
Any Google or third-party SDKs used are up-to-date. Any improvements to these SDKs, such as stability, compatibility, or security, should be available to users in a timely manner.

For Google SDKs, consider using SDKs powered by Google Play services, when available. These SDKs are backward compatible, receive automatic updates, reduce your app package size, and make efficient use of on-device resources.


The developer is accountable for the entire app’s codebase, inclusive of any third-party SDKs used.


PS-T5 SP-3 The app does not use non-SDK interfaces.
PS-T6 SP-2 No debug libraries are included in the production app. This can cause performance as well as security issues.
Battery PS-B1 BA-1 The app properly supports the power management features that were introduced in Android 6.0 (Doze and App Standby). In the case where core functionality is disrupted by power management, only qualified apps may request an exemption. See Support for other use cases in Doze and App Standby.

During development, developers can test app standby and doze behavior using these ADB commands.


In terms of battery usage, developers can use the Android Studio energy profiler or the Battery Historian tool, combined with planned background work, to diagnose unexpected battery use.








Privacy & security





Your app should handle user data and personal information safely,
with the appropriate level of permission.




In addition to this checklist, applications published on the Google Play
Store must also follow the User Data
policies to protect users' privacy.































































































































Area ID Tests Description
Permissions
SC-P1 SC-4 The app requests only the absolute minimum number of permissions that it needs to support its use case at hand. For some permissions such as location, use coarse location in place of fine location if possible.
SC-P2


The app requests permission to access sensitive data (such as
SMS, Call Log, or
Location)
or services that cost money (such as Dialer or SMS) only when directly related to the core
use cases of the apps. Implications related to these permissions should be prominently disclosed to the user.



Depending on how you are using the permissions, there might be an
alternative way
to fulfill your app's use case without relying on access to sensitive information. For example, instead of
requesting permissions related to a user’s contacts, it may be more appropriate to request access
by using an implicit intent.


SC-P3 CR-0 The app requests runtime permissions in context, when the functionality is requested, rather than upfront during app startup.
SC-P4 CR-0

The app clearly conveys why certain permissions are needed or follow the recommended flow to
explain why it needs a permission.


SC-P5 CR-0 The app should gracefully degrade when
users deny or revoke a permission. The app should not prevent the user from accessing the app altogether.
Data & Files SC-DF1 SC-1 All sensitive data is stored in the app's internal storage.
SC-DF2 SC-10 No personal or sensitive user data is logged to the system log or an app-specific log.
SC-DF3 The app does not use any non-resettable hardware IDs, such as the IMEI, for identification purposes.
Identity SC-ID1 CR-0 The app provides hints to autofill account credentials and other sensitive information, such as credit card info, physical address, and phone number.
SC-ID2 CR-0 Integrate One Tap for Android for a seamless sign in experience.
SC-ID3 CR-0 The app supports biometric authentication to protect financial transactions or sensitive information, such as important user documents.
App Components SC-AC1 SC-5

The app sets the android:exported attribute explicitly for all activities, services, broadcast receivers, and especially content providers.


Only application components that share data with other apps , or components that should be invoked by other apps , are exported.


SC-AC2 CR-0
SC-4

All intents and broadcasts follow best practices:



  1. Use explicit intents if the destination application is well defined.
  2. Use Intents to defer permissions to a different app that already has the permission.
  3. Share data securely across apps.
  4. Intents that contain a payload are verified before use.
  5. If you need to pass an Intent to another app, so that the receiving app can invoke and expect a callback in the calling app, do not include a nested intent in the extras. Use a PendingIntent.
  6. When setting up your PendingIntents, explicitly set the immutable flag, where applicable.


SC-AC3 SC-3 All components that share content between your apps use android:protectionLevel="signature" for custom permissions. This includes activities, services, broadcast receivers, and especially content providers.

Apps should not rely on accessing a list of installed packages. The access has been restricted beginning in Android 11.


Networking
SC-N1 SC-9 All network traffic is sent over SSL.
SC-N2 SC-6 The application declares a network security configuration.
SC-N3 If the application uses Google Play services, the security provider is initialized at application startup.
WebViews
SC-W1 SC-6 Do not use setAllowUniversalAccessFromFileURLs() for accessing local content. Instead, use WebViewAssetLoader.
SC-W2 SC-7 WebViews should not use addJavaScriptInterface() with untrusted content.


On Android 6.0 and above, use HTML message channels instead.


Execution SC-E1 The app does not dynamically load code from outside the app's APK. Developers should use Android App Bundles, which includes Play Feature Delivery and Play Asset Delivery.


As of August 2021, the use of Android App Bundles is mandatory for all new apps in the Google
Play Store.


Cryptography SC-C1 The app uses strong, platform-provided cryptographic algorithms and a random number generator. Also, the app does not implement custom algorithms.




Google Play





Be sure that your apps can be published on Google Play.























































Area ID Tests Description
Policies GP-P1 GP-all The app strictly adheres to the terms of the Google Play Developer Content Policy and does not offer inappropriate content, does not use the intellectual property or brand of others, and so on.
GP-P2 GP-1 The app maturity level is set appropriately, based on the Content Rating Guidelines.
App Details Page GP-D1 GP-1
GP-2

The app’s feature graphic follows the guidelines outlined in this
support article. Make sure that:



  1. The app listing includes a high-quality feature graphic.
  2. The feature graphic does not contain device images, screenshots, or small text that will be illegible when scaled down and displayed on the smallest screen size that your app is targeting.
  3. The feature graphic does not resemble an advertisement.


GP-D2 GP-1 The app’s screenshots and videos do not show or reference non-Android devices.
GP-D3 GP-1 The app’s screenshots or videos do not represent the content and experience of your app in a misleading way.
User Support GP-X1 GP-1 Common user-reported bugs in the Reviews tab of the Google Play page are addressed if they are reproducible and occur on many different devices. If a bug occurs on only a few devices, you should still address it if those devices are particularly popular or new.





Setting up a test environment





For the purpose of setting up a test environment for this checklist, we recommend the following:



  • Focused on emulator testing - Android Emulator is a great way to test your app under different Android versions and screen resolutions. You should set up emulated devices (AVDs) to represent the most common form factors and hardware/software combinations for your target user base. In addition to testing for phones, we also recommend you test other form factors using the following emulators at a minimum :

    • Foldables - 7.6” Fold-in with outer display (this is listed under phones in the AVD Manager).

    • Tablet - Pixel C 9.94” (2,560px x 1,800px).

    • For mobile app notification testing, pair a mobile device / emulator with Wear OS emulator - Wear OS Round 1.84”.


  • Hardware devices - Your test environment should include a small number of actual hardware devices that represent the key form factors and hardware/software combinations that are currently available to consumers. It's not necessary to test on every device that's on the market — rather, you should focus on a small number of representative devices, even using one or two devices per form factor.

  • Device test labs - You can also use third party services, such as Firebase Test Lab, to test your app on a wider variety of devices.

  • Test with the latest Android version - In addition to testing representative Android versions for your target user base, you should always test against the latest version of Android (currently Android 11). This ensures that the latest behavior changes do not negatively impact your user’s experience.



For more comprehensive guidance on testing including unit testing, integration testing and UI testing, check out the Android testing fundamentals.





Test procedures





These test procedures help you discover various types of quality issues in
your app. You can combine the tests or integrate groups of tests together in
your own test plans. See the sections above for references that associate
criteria with these test procedures.









































































































































Type Test Description
Core Suite CR-0

Navigate to all parts of the app — all screens, dialogs, settings, and all user flows.



  1. If the application allows for editing or content creation, game play, or media playback, make sure to test those flows.

  2. While testing the app, introduce interruptions from other apps, such as receiving a notification or a phone call; and apply transient changes to device attributes, such as network connectivity, battery function, GPS availability, and system load.

  3. Enter and test all in-app purchase flows


CR-1 From each app screen, press the device's Home key or swipe up in gesture navigation, then re-launch the app from the All Apps screen.
CR-2 From each app screen, switch to another running app, and then return to the app under test using the Recents app switcher.
CR-3 From each app screen (and dialogs), press the Back button or use the back swipe gesture.
CR-5 From each app screen, rotate the device between landscape and portrait orientation and folding / unfolding at least three times.
CR-6 Switch to another app to send the test app into the background. Go to Settings and check whether the test app has any services running while in the background. In Android 4.0 and higher, go to the Apps screen and find the app in the "Running" tab.
CR-7 Press the power button to put the device to sleep, then press the power button again to wake the screen.
CR-8 Set up a screen lock on the device. Press the power button to put the device to sleep (which locks the device). Then, press the power button again to wake the screen and unlock the device.
CR-9 Trigger and observe in the notifications drawer all types of notifications that the app can display. Expand notifications where applicable (Android 4.1 and higher), and tap on all available actions.
CR-10 Review Support for other use cases in Doze and App Standby.
Install on SD Card SD-1 Repeat Core Suite with the app installed to a device’s SD card (if the app supports this installation method).


To move the app to SD card, you can use Settings > App Info > Move to SD Card.


Performance and Stability SP-1 Review the Android manifest file and build configuration to ensure that the application is built against the latest available SDK ( targetSdk and compileSdk ).
SP-2 Review the build.gradle file for any outdated dependencies.
SP-3 Use the Android Studio lint tool to detect non-SDK interface usage. Other alternative testing methods also exist.
Performance Monitoring PM-1 Repeat Core Suite with StrictMode profiling enabled.


Pay close attention to garbage collection and its impact on the user experience.


Battery
BA-1 Repeat Core Suite across Doze and App Standby cycles.


Pay close attention to alarms, timers, notifications, syncs, and so on. See Testing with Doze and App Standby for requirements and guidelines.


Security SC-1 Review all data stored in external storage.
SC-2 Review how the data that’s loaded from external storage is handled and processed.
SC-3 Review all content providers defined in the Android manifest file. Make sure each provider has an appropriate protectionLevel .
SC-4 Review all permissions that your app requires, in the manifest file, at runtime, and in the app settings screen (Settings > App Info) on the device.
SC-5 Review all application components defined in the Android manifest file for the appropriate export state. The exported property must be set explicitly for all components.
SC-6 Review the app's Network Security configuration, ensuring that no lint checks on the configuration fail.
SC-7 For each WebView, navigate to a page that requires JavaScript.
SC-8 In each WebView, attempt to navigate to sites and content that aren’t loaded directly by your app.
SC-9 Declare a Network Security Configuration that disables cleartext traffic, then test the app.
SC-10 Run the application and exercise all core functionality, while observing the device log. No private user information should be logged.
Google Play GP-1 Sign into the Google Play Developer Console to review your developer profile, app description, screenshots, feature graphic, content rating and user feedback.
GP-2 Download your feature graphic and screenshots, and scale them down to match the display sizes on the devices and form factors that you are targeting.
GP-3 Review all graphical assets, media, text, code libraries, and other content that’s packaged in the app or expansion file download.




Testing with StrictMode



For performance testing, we recommend enabling StrictMode in your
app and using it to catch operations that could affect performance, network accesses, file
reads/writes, and so on. Look for potentially problematic operations both on the main thread and on
other threads.

You can set up a per-thread monitoring policy using
StrictMode.ThreadPolicy.Builder
and enable all supported monitoring in the
ThreadPolicy using
detectAll() .

Make sure to enable visual notification of policy violations for the
ThreadPolicy using
penaltyFlashScreen() .







Read article
Reduced data cost for billions  |  Android Developers





















Data plans in some countries can cost upwards of 10% of a typical user's monthly income. This
means that minimizing your app's download size and letting the user control how your app uses
data can have a large, tangible benefit to many users. Minimizing download size also helps
conserve space in internal storage, which is a scarce resource in some devices.




Here you can find some strategies to help optimize the amount of data your app uses, both over
the network and in internal storage.



Reduce app size




Reducing app size is one of the fundamental ways you can help your user consume less data, in
terms of both network data and internal storage. This section describes several approaches to
reducing app size.



Reduce APK graphical asset size




  • Graphical assets are often the largest contributor to the size of the
    APK. Optimizing these can result in smaller downloads and thus faster
    installation times for users.

  • For graphical assets such as icons, use the Scalable Vector Graphics (SVG)
    format. SVG images are tiny in size compared to bitmap graphics and can be rendered at
    runtime to any resolution. The Android Support Library
    provides a backward-compatible implementation for vector resources to Android 2.1 (API level 7).
    Get started with vectors with
    this Medium post.

  • For non-vector images, such as photos, use WebP to reduce
    image load times and save network bandwidth. WebP is proven to result in
    smaller file sizes than its PNG and JPG counterparts, with at least the
    same image quality. Even at lossy settings, WebP can produce a nearly
    identical image to the original. Android has included lossy WebP support since Android 4.0 (API
    level 14: Ice Cream Sandwich) and support for lossless, transparent WebP
    since Android 4.2 (API level 17: Jelly Bean).

  • If you have many large images across multiple densities, consider
    using Multiple
    APK support to split your APK by density. This results in builds
    targeted for specific densities, meaning users with low-density devices
    won’t have to incur the penalty of downloading unused high-density assets.

  • For more information about reducing APK size, see
    Reduce APK Size and
    Shrink Your Code and Resources. In addition, you can
    find a detailed guide on reducing APK size in this
    series of Medium posts.


Reduce code size



  • Every library in your Android project is adding potentially unused code to the APK. Be
    particularly careful about using external libraries because not all libraries are
    designed for use in mobile apps. Ensure that the libraries your app is
    using are optimized for mobile use.

  • Consider optimizing your compiled code using a tool such as ProGuard. ProGuard identifies
    code that isn’t being used and removes it from your APK. Also
    enable resource shrinking at build time by setting
    minifyEnabled=true , shrinkResources=true in
    build.gradle —this automatically removes unused resources from
    your APK.

  • When using Google Play services, you should
    selectively include only the necessary APIs into your APK.

  • For more information on reducing code size in your APK, see the Android
    training on how to Avoid
    dependency injection frameworks.


Allow app to be moved to external (SD) storage



  • Low-cost devices often come with little on-device storage. Users can
    extend this with SD cards; however, apps need to explicitly declare that
    they support being installed to external storage before users can move them.

  • Allow your app to be installed to external storage using the
    android:installLocation
    flag in your AndroidManifest.xml. For more
    information on enabling your app to be moved to external storage, see the
    Android guide on App Install
    Location.



Reduce post-install app disk use




  • Keeping your app’s disk use low means that users are less likely to
    uninstall your app when the device is low on free space. It’s important
    to apply bounds around your caches—this prevents your app’s
    disk use from growing indefinitely. Be sure you put your cached data in
    getCacheDir() —the system can delete files
    placed here as needed, so they won’t show up as storage committed to the
    app.



Offer configurable network use




The Android platform includes a number of ways you can give the user control
over your app's network use, optimizing it for their own needs. For example,
on first use, your app can walk the user through a variety of network-related settings.
You can also provide a network preferences screen from outside the app.



Provide onboarding experiences for users' network
choices




  • Apps that allow users to reduce data use are well received, even if
    they have heavy data requirements. If your app uses a considerable amount
    of bandwidth (for example, video streaming apps), you can provide an
    onboarding experience for users to configure network use. For example,
    you could allow the user to force lower-bitrate video streams on cellular
    networks.

  • Additional settings for users to control data syncing, prefetching, and
    network use behavior (for example, prefetch all starred news categories on
    Wi-Fi only), also help users tailor your app’s behavior to their needs.

  • For more information on managing network use, see the Android training
    on Managing
    Network Usage.


Provide a network preferences
screen



  • You can navigate to the app’s network settings from outside the app by
    means of a network preferences screen. You can invoke this screen from
    either the system settings screen or the system data usage screen.

  • To provide a network preferences screen that users can access from within
    your app as well as from the system settings, in your app include an
    activity that supports the
    ACTION_MANAGE_NETWORK_USAGE action.

  • For further information on adding a network preferences screen, see the
    Android training on
    Implementing a Preferences Activity.



Additional resources



To learn more about this topic, view the following additional resources:



Blog posts




  • Nurture trust through cost transparency








Read article