Android Developers
Platform Android Studio Google Play Jetpack Kotlin Docs Games
  • English
  • Bahasa Indonesia
  • Español – América Latina
  • Français
  • Português – Brasil
  • Tiếng Việt
  • 中文 – 简体
  • 中文 – 繁體
  • 日本語
  • 한국어
Sign in
  • Documentation
Overview Guides UI Guide NDK Reference Samples Design & Quality
Android Developers
  • Platform
  • Android Studio
  • Google Play
  • Jetpack
  • Kotlin
  • Docs
    • Overview
    • Guides
    • UI Guide
    • NDK
    • Reference
    • Samples
    • Design & Quality
  • Games
  • App Basics
  • Introduction
  • Build your first app
  • App fundamentals
  • App resources
    • Overview
    • Handle configuration changes
    • Localization
      • Localize your app
      • Test your app with pseudolocales
      • Unicode and internationalization support
      • Language and locale resolution
      • Per-app language preferences
    • Complex XML resources
    • Resource types
      • Overview
      • Animation
      • Color state list
      • Drawable
      • Layout
      • Menu
      • String
      • Style
      • Font
      • More types
  • App manifest file
    • Overview
    • <action>
    • <activity>
    • <activity-alias>
    • <application>
    • <category>
    • <compatible-screens>
    • <data>
    • <grant-uri-permission>
    • <instrumentation>
    • <intent-filter>
    • <layout>
    • <manifest>
    • <meta-data>
    • <path-permission>
    • <permission>
    • <permission-group>
    • <permission-tree>
    • <profileable>
    • <property>
    • <provider>
    • <queries>
    • <receiver>
    • <service>
    • <supports-gl-texture>
    • <supports-screens>
    • <uses-configuration>
    • <uses-feature>
    • <uses-library>
    • <uses-native-library>
    • <uses-permission>
    • <uses-permission-sdk-23>
    • <uses-sdk>
  • Devices
  • Device compatibility
    • Overview
    • Screen compatibility overview
    • Enhanced letterboxing
    • Support different pixel densities
    • Declare restricted screen support
    • Multiple APK support
      • Overview
      • Create multiple APKs for different API levels
      • Create multiple APKs for different screen sizes
      • Create multiple APKs for different GL textures
      • Create multiple APKs with several dimensions
    • Support different languages and cultures
    • Support different platform versions
    • Filters on Google Play
    • 64-bit Support
  • Large screens — tablets, foldables, ChromeOS
    • Get started with large screens
    • Large screen canonical layouts
    • Large screen ready
      • Multi-window support
      • Media projection
      • Input compatibility on large screens
    • Large screen optimized
      • Support different screen sizes
      • Migrate your UI to responsive layouts
      • Navigation for responsive UIs
      • Activity embedding
    • Large screen differentiated
      • Learn about foldables
      • Make your app fold aware
      • Test your app on foldables
    • Large screen cookbook
  • Wear
    • Get started
    • Principles of Wear OS development
    • Upgrade to the latest version of Wear OS
    • Wear OS versus mobile development
    • Wear OS user interfaces
    • Getting started
      • Wear OS developer pathway
      • Create and run a wearable app
      • Debug a Wear OS app
      • Capture Wear UI screenshots
    • Apps
      • Overview
      • Standalone apps
      • Authentication
      • Request permissions
      • Detect location
      • Playing audio on wearables
      • Appear in Recents and App Resume
    • Building UI with Compose
      • Use Jetpack Compose on Wear OS
      • Compose performance
      • Navigation
      • Buttons
      • Cards
      • Chips
      • Dialogs
      • Lists
      • Page indicators
      • Pickers
      • Position indicator
      • Progress indicator
      • Sliders
      • Steppers
      • Swipe to dismiss
      • Toggle chips
      • Time text
    • Building UI with Views
      • Build View-based UIs on Wear OS
      • Handle different watch shapes
      • Create lists
      • Navigation
      • Exit full screen activities on Wear
      • Show confirmations
      • Keep your app visible on Wear
    • Tiles and complications
      • Tiles overview
      • Get started with tiles
      • Update tiles
      • Interact with tiles
      • Watch face complications
      • Expose data to complications
    • Notifications
      • Notifications on Wear OS
      • Bridging options for notifications
      • Ongoing Activities
    • Handling data
      • Send and sync data on Wear OS
      • Network access and sync on Wear OS
      • Access the Wearable Data Layer
      • Transfer assets
      • Send and receive messages
      • Handle data layer events
      • Sync data items with the Data Layer API
    • User input
      • Physical buttons
      • Rotary input
      • Create input method editors in Wear
      • Voice
    • Health services
      • Overview
      • Active data and exercise
      • Passive data updates
      • Use synthetic data providers
      • Enhance app compatibility
    • Design
      • Design principles
      • Getting started
      • Interaction types
      • Screen shapes
      • Notifications
      • Complications
      • Tiles
      • Tiles design system
      • Apps
      • Ongoing activities
      • Confirmation overlay
      • Disconnection indicators
      • Permission messages
      • Selection controls
      • Launch and latency
      • Navigation
      • Permissions
      • Sign in
      • Hardware buttons
      • Color
      • Typography
      • Icons
      • Downloads
      • Wear Material Theming
    • Creating watch faces
      • Overview
      • Design watch faces
      • Build a watch face service
      • Draw watch faces
      • Adding complications to a watch face
      • Creating interactive watch faces
      • Provide configuration activities
      • Address common issues
      • Improve performace with hardware acceleration
      • Optimize performance and battery life
    • Watch Face Studio
      • Watch Face Studio
      • Keyboard shortcuts
      • Manage a Watch Face Studio project
      • Create a watch face with Watch Face Studio
      • Build complications in Watch Face Studio
      • Tag expressions
      • Language settings
      • Always-on in Watch Face Studio
      • Gyro effects
      • Build and upload from Watch Face Studio
      • Test your watch face
      • FAQ
      • Performance tips
    • Wear app quality
    • Package Wear OS apps
    • Distribute to Wear OS
    • Create Wear OS apps for China
    • Wear OS release notes
  • Android TV
    • Overview
    • Build TV Apps
      • Overview
      • Get started with TV apps
      • AndroidX TV libraries
      • Handle TV hardware
      • Manage TV controllers
      • Build TV layouts
      • On-screen keyboard
      • Create TV navigation
      • Best practices for driving engagement on Google TV
    • Build TV playback apps
      • Overview
      • UI guidance & Leanback API
        • Create a catalog browser
        • Provide a card view
        • Build a details view
        • Use transport controls
        • Playback controls on TV
        • Ambient mode
        • Add a guided step
        • Introduce first-time users to your app
      • Implement a media session
      • Background playback in a Now Playing card
      • Audio capabilities
      • Match content frame rate
    • Help users find content on TV
      • Overview
      • Recommend TV content
        • Overview
        • Channels on the home screen
        • Video program attributes
        • Audio program attributes
        • Game program attributes
        • Watch Next
          • Add programs
          • Attributes
          • Guidelines for app developers
          • Guidelines for TV providers
        • Preview videos
        • Recommendations in Android N and earlier
      • Make TV apps searchable
      • Search within TV Apps
    • Build TV games
      • Overview
      • Use Stream Protect for latency-sensitive streaming apps
    • Build TV input services
      • Overview
      • Develop a TV input service
      • Work with channel data
      • Manage TV user interaction
      • Support time-shifting
      • Support content recording
    • TV Apps checklist
    • TV Accessibility
      • Accessibility best practices
      • TalkBack evaluation examples
      • Adopt system caption settings
      • Custom view accessibility support
      • Custom view accessibility sample
    • Releases
      • Android 12 for TV
      • Android 13 for TV
  • Android for Cars
    • Overview
    • Build media apps for cars
      • Build media apps for cars
      • Add support for Android Auto
      • Add support for Android Automotive OS
    • Build messaging apps for Android Auto
    • Build point of interest, internet of things, and navigation apps for cars
      • Using the Android for Cars App Library
      • Build point of interest apps for cars
      • Build internet of things apps for cars
      • Build navigation apps for cars
      • Add support for Android Auto
      • Add support for Android Automotive OS
    • Build video apps for Android Automotive OS
    • Test Android apps for cars
    • Distribute Android apps for cars
    • Google Play services for cars
    • Notifications on Android Automotive OS
  • Chrome OS devices
    • Overview
    • Building apps for Chrome OS
    • Optimizing Apps for Chrome OS
    • Preparing your development environment
    • App Manifest Compatibility for Chromebooks
    • Chrome OS Device Support for Apps
    • App Rendering Differences on Chromebooks
    • Window management
    • Adapting Games on Chrome OS
    • Smooth animation on Chrome OS
    • Test Cases for Android Apps on Chrome OS
  • Android (Go edition)
    • Overview
    • Develop for Android (Go edition)
    • Test Android Go apps
    • Optimize for Android (Go edition)
      • Approach
      • Optimize app memory
      • Improve startup latency
      • Reduce app size
    • Best practices
  • App architecture
  • Introduction
  • Guide to app architecture
    • Overview
    • UI layer
      • Overview
      • UI events
      • State holders and UI state
      • State production
    • Domain layer
    • Data layer
      • Overview
      • Offline first
    • Architecture recommendations
    • Learning pathway
  • Modularization
    • Overview
    • Common patterns
    • Recipes
      • Navigation
  • Architecture Components
    • UI layer libraries
      • View binding
        • Overview
        • Migrate from Kotlin synthetics to view binding
      • Data binding library
        • Overview
        • Get started
        • Layouts and binding expressions
        • Work with observable data objects
        • Generated binding classes
        • Binding adapters
        • Bind layout views to Architecture Components
        • Two-way data binding
      • Lifecycle-aware components
        • Handle lifecycles
        • ViewModel
          • ViewModel overview
          • Create ViewModels with dependencies
          • ViewModel Scoping APIs
          • Saved State module for ViewModel
        • LiveData
        • Save UI states
        • Use Kotlin coroutines with lifecycle-aware components
      • Paging Library
        • Overview
        • Load and display paged data
        • Page from network and database
        • Transform data streams
        • Manage and present loading states
        • Test your Paging implementation
        • Migrate to Paging 3
        • Paging 2
          • Overview
          • Display paged lists
          • Load paged data
    • Data layer libraries
      • DataStore
      • WorkManager
        • Overview
        • Getting Started
        • How-To Guides
          • Defining your WorkRequests
          • Work states
          • Managing work
          • Observing intermediate Worker progress
          • Chaining work together
          • Testing Worker implementation
          • Integration tests with WorkManager
          • Debugging WorkManager
        • Advanced Concepts
          • Configuration and Initialization
          • Threading in WorkManager
            • Overview
            • Threading in Worker
            • Threading in CoroutineWorker
            • Threading in RxWorker
            • Threading in ListenableWorker
          • Support for long-running workers
        • Migrating from Firebase JobDispatcher
        • Migrating from GCMNetworkManager
  • App entry points
    • Activities
      • Introduction to activities
      • The activity lifecycle
      • Activity state changes
      • Test your app's activities
      • Tasks and the back stack
      • Processes and app lifecycle
      • Parcelables and bundles
      • Loaders
      • Recents screen
      • Restrictions on starting activities from the background
    • App shortcuts
      • Overview
      • Create shortcuts
      • Add capabilities
      • Manage shortcuts
      • Best practices for shortcuts
  • App navigation
    • Principles of navigation
    • Design for different form factors
    • Handle configuration changes
    • Navigation component
      • Overview
      • Getting started
      • Create destinations
      • Design navigation graphs
      • Nested graphs
      • Global actions
      • Navigate to a destination
      • Support multiple back stacks
      • Conditional navigation
      • Pass data between destinations
      • Create a deep link for a destination
      • Animate transitions between destinations
      • Update UI components with NavigationUI
      • Kotlin DSL
      • Type safe navigation with Compose
      • Interact programmatically
      • Navigate with feature modules
      • Best practices for multi-module projects
      • Test navigation
      • Add new destination types
      • Migrate to the Navigation component
    • Fragments
      • Overview
      • Create a fragment
      • Fragment manager
      • Fragment transactions
      • Animate transitions between fragments
      • Fragment lifecycle
      • Saving state with fragments
      • Communicate with fragments
      • Working with the app bar
      • Displaying dialogs with DialogFragment
      • Debug your fragments
      • Test your fragments
    • App links
      • Overview
      • Enabling links to app content
      • Verify app links
      • Create app links for instant apps
    • Create swipe views with tabs using ViewPager
    • Create swipe views with tabs using ViewPager2
    • Add support for back navigation
      • Custom back navigation
      • Predictive back gesture
  • Dependency injection
    • Overview
    • Manual dependency injection
    • Dependency injection with Hilt
    • Hilt in multi-module apps
    • Use Hilt with other Jetpack libraries
    • Hilt testing guide
    • Hilt and Dagger annotations cheat sheet
    • Dagger
      • Dagger basics
      • Using Dagger in Android apps
      • Using Dagger in multi-module apps
  • App Startup
  • User interfaces
  • Build Android user interfaces
  • Create backward-compatible UIs
    • Overview
    • Abstracting the new APIs
    • Proxying to the new APIs
    • Creating an implementation with older APIs
    • Using the version-aware component
  • Core topics
  • App compatibility
    • Overview
    • Compatibility framework tools
    • Restrictions on non-SDK interfaces
  • Interact with other apps
    • Overview
    • Sending the user to another app
    • Getting a result from an activity
    • Allowing other apps to start your activity
    • Package visibility
      • Overview
      • Know which packages are visible automatically
      • Declare package visibility needs
      • Fulfill common use cases
      • Test package visibility
  • Intents and intent filters
    • Overview
    • Common intents
  • Audio & video
    • Audio & video overview
    • HDR video playback
    • Media3
      • Overview
      • Getting started
        • Use a media session to manage playback
        • Play media in the background
      • ExoPlayer
        • ExoPlayer and Media3
        • ExoPlayer to Media3 mappings
      • Migration guide
    • Media controls
    • Supported media formats
    • Media codecs
    • Media app architecture
      • Media app architecture overview
      • Using a media session
      • Building an audio app
        • Audio app overview
        • Building a media browser service
        • Building a media browser client
        • Media session callbacks
        • Using the media controller test app
      • Building a video app
        • Video app overview
        • Building a video player activity
        • Media session callbacks
        • Compatible media transcoding
      • Responding to media buttons
      • Handling changes in audio output
      • Manage audio focus
    • The Google Assistant
      • The Google Assistant and media apps
      • Media apps on Google Assistant driving mode
    • Routing between devices
      • Routing overview
      • MediaRouter overview
      • MediaRouteProvider overview
    • Spatial Audio
    • Control amplitude with VolumeShaper
    • MediaPlayer overview
    • MediaRecorder overview
    • ExoPlayer
    • Sharing audio input
    • Capture video and audio playback
    • Frame rate
    • Best practices for sharing video
    • Additional Resources for Media
  • Services
    • Overview
    • Foreground services
    • Bound services
    • AIDL overview
  • Background tasks
    • Overview
      • Overview
      • Background optimizations
      • Manage awake state
    • Asynchronous work
      • Overview
      • Java threads
      • Coroutines
      • Listenable future
    • Persistent work
      • Overview
      • Getting started
        • Getting started
        • Define your work requests
      • How to
        • Work states
        • Manage work
        • Chain work together
        • Support for long-running workers
        • Observe immediate worker progress
        • Update work
      • Threading
        • Overview
        • Threading in Worker
        • Threading in CoRoutineWorker
        • Threading in RxWorker
        • Threading in ListenableWorker
      • Configuration
        • Custom WorkManager configurations
      • Migrate from legacy solutions
        • Migrate from Firebase JobDispatcher
        • Migrate from GCMNetworkManager
    • Testing
      • Asynchronous work
        • Coroutines testing
      • Persistent work
        • Debug WorkManager
        • Integration testing
        • Test worker implementation
    • Broadcasts
      • Overview
      • Implicit Broadcast Exceptions
  • Alarms
    • Overview
    • Schedule alarms
  • Permissions
    • Overview
    • Evaluate whether your app needs permissions
    • Declare app permissions
    • Request app permissions
      • Request runtime permissions
      • Request special permissions
    • Explain access to more sensitive information
    • App permissions best practices
    • Permissions used only in default handlers
    • Restrict interactions with other apps
    • Define custom permissions
  • App data & files
    • Overview
    • Storage overview
    • Save to app-specific storage
    • Save to shared storage
      • Overview
      • Media
      • Photo picker
      • Documents and other files
      • Datasets
    • Manage all files on a storage device
    • Save key-value data
    • Save data in a local database
      • Overview
      • Define data using entities
      • Access data using DAOs
      • Define relationships between objects
      • Write asynchronous DAO queries
      • Create views into a database
      • Prepopulate your database
      • Migrate your database
      • Test and debug your database
      • Reference complex data
      • Migrate from SQLite to Room
      • Save data using SQLite
    • Storage use cases and best practices
    • Sharing simple data
      • Overview
      • Sending simple data to other apps
      • Receiving simple data from other apps
    • Sharing files
      • Overview
      • Setting up file sharing
      • Sharing a file
      • Requesting a shared file
      • Retrieving file information
    • Sharing files with NFC
      • Overview
      • Sending files to another device
      • Receiving files from another device
    • Printing files
      • Overview
      • Printing photos
      • Printing HTML documents
      • Printing custom documents
    • Content providers
      • Overview
      • Content provider basics
      • Creating a content provider
      • Open files using storage access framework
      • Create a custom document provider
    • App install location
  • User data & identity
    • Overview
    • Add sign-in workflow
    • Show a biometric authentication dialog
    • Autofill framework
      • Overview
      • Optimize your app for autofill
      • Build autofill services
      • Integrate autofill with keyboards
    • Identify developer-owned apps
    • Review how your app collects and shares user data
    • Audit data access
    • Get a user-resettable advertising ID
    • Calendar provider overview
    • Contacts provider
      • Overview
      • Retrieving a list of contacts
      • Retrieving details for a contact
      • Modifying contacts using intents
      • Displaying the quick contact badge
    • Account transfer
    • Data backup
      • Overview
      • Back up user data
      • Back up key-value pairs
      • Test backup and restore
    • Best practices for unique identifiers
    • Remember and authenticate users
      • Overview
      • Remember your user
      • Authenticate to OAuth2 services
      • Create a custom account type
  • User location
    • Overview
    • Request location permissions
    • Get the last known location
    • Change location settings
    • Request location updates
    • Access location in the background
    • Create and monitor geofences
    • Detect when users start an activity
    • Optimize location for battery
    • Test location workflows
    • Migrate to location and context APIs
    • Add maps
  • Camera
    • Choose a camera library
    • Camera intents
    • Camera extensions
      • Overview
      • Supported devices
    • CameraX
      • Overview
      • Architecture
      • Configuration
      • Use cases
        • Preview
        • Image capture
        • Image analysis
        • Video capture
      • Advanced topics
        • Extensions API
        • ML Kit Analyzer
        • Rotations
        • Transform output
      • Devices
      • Camera1 to CameraX migration guide
    • Camera2
      • Overview
      • Camera capture sessions and requests
      • Camera lenses and capabilities
      • Use multiple camera streams simultaneously
      • Camera preview
      • HDR video capture
      • Multi-Camera API
      • Extensions API
    • Camera (deprecated)
      • Overview
      • Take photos
      • Record videos
      • Control the camera
      • Camera API
  • Sensors
    • Overview
    • Sensors overview
    • Motion sensors
    • Position sensors
    • Environment sensors
    • Raw GNSS measurements
  • Connectivity
    • Overview
    • Cross device SDK
      • Overview
      • Get started
      • Device discovery API
      • Secure connection API
      • Sessions API
      • Test and debug
      • API Reference
    • Performing network operations
      • Overview
      • Connect to the network
      • Manage network usage
      • Reading network state
      • Optimize network access
      • Optimize network data usage
      • Monitor connectivity status and connection metering
      • Parse XML data
    • Perform network operations using Cronet
      • Overview
      • Send a simple request
      • Cronet request lifecycle
      • Use Cronet with other libraries
      • Reference
        • org.chromium.net
          • Overview
          • CallbackException
          • CronetEngine
            • Overview
            • CronetEngine.Builder
              • Overview
              • LibraryLoader
          • CronetException
          • InlineExecutionProhibitedException
          • NetworkException
          • QuicException
          • UploadDataProvider
          • UploadDataProviders
          • UploadDataSink
          • UrlRequest
            • Overview
            • Builder
            • Callback
            • Status
            • StatusListener
          • UrlResponseInfo
        • org.chromium.net.apihelpers
          • Overview
          • ByteArrayCronetCallback
          • CronetRequestCompletionListener
          • CronetResponse
          • ImplicitFlowControlCallback
          • InMemoryTransformCronetCallback
          • JsonCronetCallback
          • RedirectHandler
          • RedirectHandlers
          • StringCronetCallback
          • UploadDataProviders
          • UrlRequestCallbacks
            • Overview
            • CallbackAndResponseFuturePair
    • Enhance your apps with 5G
    • Build client-server applications with gRPC
    • Transferring data without draining the battery
      • Overview
      • Optimize downloads for efficient network access
      • Minimize the effect of regular updates
      • Avoid unoptimized downloads
    • Reduce network battery drain
      • Overview
      • Collecting network traffic data
      • Analyzing data traffic
      • Optimize network access
      • Optimize user-initiated network use
      • Optimize app-initiated network use
      • Optimize server-initiated network use
      • Optimizing general network use
    • Transfer data using Sync Adapters
      • Overview
      • Create a Stub Authenticator
      • Create a Stub Content Provider
      • Create a Sync Adapter
      • Run a Sync Adapter
    • Bluetooth
      • Overview
      • Set up Bluetooth
      • Find Bluetooth devices
      • Connect Bluetooth devices
      • Transfer Bluetooth data
      • Bluetooth permissions
      • Bluetooth profiles
      • Companion device pairing
    • Bluetooth Low Energy
      • Overview
      • Find BLE devices
      • Connect to a GATT server
      • Transfer BLE data
    • BLE Audio
      • Overview
      • Audio Manager self-managed calls
      • Telecom API managed calls
      • Audio recording
    • NFC
      • Overview
      • NFC basics
      • Advanced NFC
      • Host-based card emulation overview
    • Telecom
      • Overview
      • Build a calling app
      • Prevent caller ID spoofing
      • Telephony IDs
    • Wi-Fi
      • Request permission to access nearby Wi-Fi devices
      • Wi-Fi scanning overview
      • Wi-Fi peer-to-peer
      • Wi-Fi Aware overview
      • Wi-Fi location with RTT
      • Local-only hotspot
      • Discover and connect
        • Overview
        • Use network service discovery
        • Create P2P connections with Wi-Fi Direct
        • Use Wi-Fi Direct for service discovery
        • Wi-Fi Easy Connect
      • Wi-Fi infrastructure
        • Wi-Fi infrastructure overview
        • Wi-Fi suggestion API for internet connectivity
        • Wi-Fi Network Request API for peer-to-peer connectivity
        • Passpoint
        • Save networks and Passpoint configurations
    • USB
      • Overview
      • Accessory overview
      • Host overview
    • UWB
    • VPN
    • Session initiation protocol overview
    • Open Mobile API reader support
  • Renderscript
    • Overview
    • Advanced RenderScript
    • Migrate from RenderScript
    • Runtime API reference
      • Overview
      • Numerical types
      • Object types
      • Conversion functions
      • Mathematical constants and functions
      • Vector math functions
      • Matrix functions
      • Quaternion functions
      • Atomic update functions
      • Time functions and types
      • Allocation data access functions
      • Object characteristics functions
      • Kernel invocation functions and types
      • Input/output functions
      • Debugging functions
      • Graphics functions and types
      • Index
  • Web-based content
    • Overview
    • Building web apps in WebView
    • Managing WebView objects
    • Load local content
    • Darken web content
    • User privacy in WebView reporting
    • Supporting different screens in web apps
    • Debugging web apps
    • Best practices for web apps
    • Testing against future versions of WebView
  • Android App Bundles
    • Overview
    • Configure the base module
    • Build and test your app bundle
    • Add code transparency
    • The app bundle format
    • Frequently asked questions
  • Google Play
    • Google Play Billing
    • Google Play Core libraries
    • Play Points
      • Overview
      • Create products and promotions
      • Detect and deliver products
      • Test products
    • Play Asset Delivery
      • Overview
      • Integrate asset delivery (Kotlin & Java)
      • Integrate asset delivery (native)
      • Integrate asset delivery (Unity)
      • Target texture compression formats
      • Test asset delivery
    • Play Feature Delivery
      • Overview
      • Configure install-time delivery
      • Configure conditional delivery
      • Configure on-demand delivery
      • On-demand delivery best practices
      • Configure instant delivery
      • Additional resources
    • In-app reviews
      • Overview
      • Integrate using Kotlin or Java
      • Integrate using native code
      • Integrate using Unity
      • Test in-app reviews
    • In-app updates
      • Overview
      • Support in-app updates (Kotlin or Java)
      • Support in-app updates (Native)
      • Support in-app updates (Unity)
      • Test in-app updates
    • Google Play Instant
      • Overview of Google Play Instant
      • Get started with instant apps
        • Create an instant-enabled app bundle
        • UX best practices for apps
      • Get started with instant games
        • Overview
        • Unity plugin
        • UX best practices for games
        • Migrate to Android App Bundles
        • Implement cloud delivery of assets
        • Support Google Play Games Services
        • Instant Play games
        • Instant Play games checklist
      • Reduce the size of your instant app or game
      • Add ads to your instant app or game
      • Provide multiple entry points
      • Integrate with Firebase
        • Add Google Analytics for Firebase to your instant app
        • Use Firebase Dynamic Links with instant apps
      • Technical requirements checklist
      • Google Play Instant policy
      • Resources
        • Reference
        • Code samples
        • SDK release notes
        • Instant App Intents
      • Support
        • Known issues
        • StackOverflow
    • Play Developer APIs
    • Play Install Referrer
      • Overview
      • Play Install Referrer Library
        • Overview
        • Reference
        • Release notes
      • Play Install Referrer API
    • Play Integrity API
    • Play Requirements
      • Play Policies
      • Target API Level
      • Support 64-bit architectures
    • Application Licensing
      • Overview
      • Licensing Overview
      • Setting Up for Licensing
      • Adding Server-Side Verification
      • Adding Client-Side Verification
      • Licensing Reference
    • APK Expansion Files
    • App updates
  • Google Assistant
    • Overview
    • Build
      • App Actions overview
      • Implement built-in intents
      • Create shortcuts.xml
      • Push dynamic shortcuts to Assistant
      • Release notes
    • Test
      • Google Assistant plugin
    • Grow
      • Overview
      • In-App Shortcut Promo SDK
    • Add more features
      • Custom intents
      • Android widgets
      • Foreground app invocation
      • Inline inventory
      • Web inventory
      • Assistant sharing
      • Read It
    • Actions.xml
      • Actions.xml migration guide
      • Actions.xml overview
      • Build App Actions
      • Create actions.xml
      • Web inventory
      • App Actions test tool
      • Android Slices
      • Troubleshooting
    • Support
  • On-device search
  • SDK Extensions
  • Games
  • Design
    • Overview
    • Support gaming devices
      • 64-bit architectures
      • Screen types
      • Vulkan pre-rotation
    • Design 3D assets
    • Manage vertex data
  • Implement
    • Overview
    • Use a game engine
      • Overview
      • Develop with Defold
        • Install and configure projects for Android
        • Support multiple form factors and screen sizes
        • Export to Android
      • Develop with Godot
        • Install and configure projects for Android
        • Godot renderer options
        • Support multiple form factors and screen sizes
        • Export to Android
      • Develop with Unity
        • Overview
        • Create an Android App Bundle with Unity
        • Integrate Play Asset Delivery
        • Unity Lighting in Mobile Games
        • Use Android Performance Tuner
          • Overview
          • Enable the API
          • Integrate the plugin
          • Initialize the library and verify operation
          • Define annotations, fidelity parameters, and quality levels
          • Add loading time recording functions
          • Include Addressables scenes
          • Run the monitor app
          • Review and publish
          • Troubleshoot common errors
          • Reference
        • Symbolicate Android crashes and ANR for Unity games
        • Get started with the Memory Advice API for Unity games
      • Develop with Unreal
      • Requesting user permissions
      • Secure your game
    • Create or extend a game engine
      • Overview
      • Getting started
        • Integrate GameActivity
          • Overview
          • Get started
          • Use game text input
          • Migrate from NativeActiviy
        • Configure graphics
        • Understand Android game loops
      • Process input events
        • Add touch support
        • Support text input
        • Support game controllers
          • Overview
          • Use the game controller library
          • Use custom controller device mappings
        • Add mouse support
        • Support sensor input
      • Achieve proper frame pacing
        • Overview
        • Frame pacing in OpenGL ES
          • Integrate
          • Update your build settings
          • Add frame pacing functions
          • Verify frame pacing improvement
        • Frame pacing in Vulkan
          • Integrate
          • Update your build settings
          • Add frame pacing functions
          • Verify frame pacing improvement
        • Reference
      • Integrate Android Performance Tuner
        • Overview
        • Run the demo app
        • Enable the API
        • Update your build settings
        • Define annotations, fidelity parameters, and settings
        • Add frame timing functions
        • Add loading time recording functions
        • Validate, package, and publish the APK
        • Troubleshoot common errors
        • Advanced usage
        • Reference
      • Output audio
        • Overview
        • Update build settings
        • Use Oboe
        • Code samples
        • Full Oboe guide
      • Manage memory
        • Overview
        • Debug native memory use
      • Deliver assets
      • Detect and diagnose crashes
    • Android Game Development Kit (AGDK)
      • Overview
      • Download
      • Release notes
    • Android Game Development Extension (AGDE) for Visual Studio
      • Overview
      • Quickstart
      • Configure a project
      • Debugger
      • Measure app performance
      • Modify build.gradle files for Android Studio
      • Samples
      • Release notes
    • Android Studio tasks
  • Optimize
    • Overview
    • Best practices
    • Reduce game size
    • Android GPU Inspector
      • Overview
      • Quickstart
      • Supported devices
      • System profiling
        • Overview
        • View a system profile
        • GPU performance counters
        • Analyze a system profile
          • Frame processing times
          • Memory efficiency
          • Texture memory bandwidth usage
          • Vertex memory bandwidth usage
          • Thread scheduling
      • Frame profiling
        • Overview
        • Analyze a frame profile
          • Most expensive render passes
          • Vertex formats
          • Shader performance
        • Frame Profiler UI
          • Performance pane
          • Commands pane
          • Framebuffer pane
          • Geometry pane
          • Report pane
          • Shader pane
          • Memory pane
          • State pane
          • Textures pane
          • Texture pane
          • Pipeline view pane
      • Supported Vulkan extensions
      • Troubleshoot
    • Android Performance Tuner
    • Manage thermal and CPU performance
    • Memory Advice API
      • Overview
      • Get started
    • Game Mode
      • Overview
      • Optimize with Game Mode API
      • Game Mode interventions
    • Game Dashboard
      • Overview
      • Components
  • Deliver
    • Overview
    • Google Play Games Services
      • Overview
      • Get started
      • Downloads
      • Setup Play Console
        • Set up Play Games Services
        • Enable features
        • Cloud project management
        • Publish
      • Manage features
        • Sign-in
        • Achievements
        • Leaderboards
        • Events
        • Saved games
        • Friends
      • Use the APIs
        • C and C++
        • Unity
          • Overview
          • Get started
          • Add features
            • Achievements
            • Leaderboards
            • Saved games
            • Events
            • Friends
            • Player stats
        • Java
          • Get started
          • Sign-in
          • Enable server-side access
          • Anti-piracy
          • Add features
            • Achievements
            • Leaderboards
            • Friends
            • Saved games
            • Events
            • Player stats
          • Troubleshooting
        • Publishing API
          • Overview
          • Get started
          • Upload images
        • Management API
      • Requirements and guidelines
        • Quality checklist
        • Branding guidelines
        • Quota and rate limits
        • Data disclosure requirements
        • Terms of service
      • Support
    • Google Play Games for PC
      • Overview
      • Get started
      • Release checklist
      • Set up
        • PC compatibility
        • Graphics configuration
        • Device input
          • Set up input
          • Mouse input
          • Input SDK
            • Overview
            • Quickstart
        • Cross-device play
          • Overview
          • Requirements
          • Verifying requirements
          • Existing identity solutions
      • Test
        • Test your game
        • Use the emulator
        • Use Chrome OS devices
        • Verify compatibility
      • Publish and deploy
        • Package
        • Submit
        • Update
        • Integrity Protection
      • FAQ
    • Play as you Download
      • Overview
      • Best practices
  • Health & fitness apps
  • Health Connect
    • Introduction
    • Platform overview
      • Architecture
      • Developer functionality
    • Get started
    • Data and data types
      • Introduction
      • Data types
      • Differential changes API
    • Common workflows
      • Write data
      • Read data
      • Delete data
      • Aggregate data
      • Synchronize data
      • Work with sessions
      • Exceptions
    • Best practices
    • Frequently asked questions
  • Health Connect guidelines
    • UX developer guidance
    • Migrate
      • Health Connect API comparison guide
      • Fit Android API to Health Connect migration guide
  • Best practices
  • Testing
    • Test apps on Android
    • Fundamentals
      • Fundamentals of testing Android apps
      • What to test in Android
      • Using test doubles in Android
    • Local tests
      • Build local tests
    • Instrumented tests
      • Build instrumented tests
      • Automate UI tests
      • AndroidX test libraries
        • Set up project for AndroidX Test
        • JUnit4 rules with AndroidX Test
        • AndroidJUnitRunner
    • Espresso
      • Espresso
      • Espresso basics
      • Espresso setup instructions
      • Espresso cheat sheet
      • Espresso idling resources
      • Espresso-Intents
      • Espresso lists
      • Multiprocess Espresso
      • Espresso recipes
      • Espresso Web
      • Accessibility checking
      • Additional Resources for Espresso
    • Testing other components
      • Test content providers
      • Test your service
      • Write automated tests with UI Automator
  • Performance
    • Overview
    • Inspecting performance
      • Overview
      • Android Studio Profilers
      • Profiling and tracing
        • System tracing
          • Overview
          • Capture trace
            • Capture a trace in Android Studio
            • Capture a trace on a device
            • Capture a trace from the command line
          • Navigate a report
          • Custom events
            • Define custom events
            • Custom trace events in native code
        • Inspect GPU rendering
      • Benchmarking
        • Overview
        • Macrobenchmark
          • Writing a benchmark
          • Capture the metrics
          • Control your app
          • Adding instrumentation arguments
        • Microbenchmark
          • Overview
          • Writing a benchmark
          • Profiling a benchmark
          • Adding instrumentation arguments
          • Building without Gradle
        • Benchmarking in CI
      • Measure performance
        • Overview
        • Examples
    • Improving performance
      • Overview
      • Baseline Profiles
        • Overview
        • Create a Baseline Profile
        • Measure with Macrobenchmark library
        • Manually create and measure Baseline Profiles
      • App startup
        • Understand app startup performance
        • Analyze and optimize app startup
        • App startup library
      • Guides
        • Set up environment for testing
        • Working in the background
        • Performance class
        • App Standby Buckets
        • App Hibernation
        • Verifying App Behavior on the Android Runtime (ART)
      • Solving common problems
        • App Startup
        • Rendering
          • Overview
          • Reducing overdraw
          • Performance and view hierarchies
          • Analyzing with profile GPU rendering
          • Slow rendering
            • Keeping your app responsive
            • Improve layout performance
        • Memory
          • Overview of memory management
          • Memory allocation among properties
          • Manage your app's memory
          • Processes and threads
        • Battery and power
          • Optimize for doze and app standby
          • Monitor the battery level and charging state
          • Monitor connectivity status and connection metering
          • Determing and monitor docking state and type
          • Profile battery usage with Batterystats and Battery Historian
          • Analyze power use with Battery Historian
          • Test power-related issues
          • Background optimizations
        • Reduce app size
        • Hardware acceleration
      • Performance best practices
    • Monitoring performance
      • Overview
      • Android Vitals
        • Overview
        • ANRs
        • Crashes
        • Slow Rendering
        • Frozen Frames
        • Stuck Partial Wake Locks
        • Excessive Wakeups
        • Excessive Background Wi-Fi Scans
        • Excessive Background Network Usage
        • Permission Denials
        • App Startup Time
        • Tracking jank
        • JankStats library
  • Accessibility
    • Overview
    • Build and test apps for accessibility
      • Make apps more accessible
      • Principles for improving app accessibility
      • Test your app's accessibility
    • Advanced topics
      • Make custom views more accessible
      • Create your own accessibility service
    • Additional resources
  • Privacy
    • Privacy best practices
  • Security
    • App security best practices
    • Security tips
    • Mitigate security risks in your app
      • Overview
      • Content resolvers
      • Intent Redirection
      • Hardcoded Cryptographic Secrets
      • Log info disclosure
      • Path traversal
      • Pending intents
      • Sticky Broadcast
      • SQL injection
      • Tapjacking
      • Weak PRNG
      • Zip Path Traversal
    • Security with data
    • Security with HTTPS and SSL
    • Network security configuration
    • Updating your security provider to protect against SSL exploits
    • Protecting against security threats with SafetyNet
      • Overview
      • SafetyNet Attestation API
      • Discontinuing SafetyNet Attestation
      • Play Integrity API
      • SafetyNet Safe Browsing API
      • SafetyNet reCAPTCHA API
      • SafetyNet Verify Apps API
    • Cryptography
    • Android Keystore System
    • Verifying hardware-backed key pairs with key attestation
    • Android Protected Confirmation
    • Supporting Direct Boot
    • Running embedded DEX code
    • App security improvement program
  • SDKs
    • SDK best practices
  • Build for Billions
    • Overview
    • Connectivity
    • Device capability
    • Data cost
    • Battery consumption
    • UI and content
  • Build for Enterprise
    • Overview
    • Developer guide
    • Work profiles
    • Set up managed configurations
    • App feedback
      • Send app feedback to EMMs
      • Test app feedback
    • Work contacts
    • Device management policies
    • Device management
      • Overview
      • Build a device policy controller
      • Dedicated devices
        • Overview
        • Lock task mode
        • Multiple users
        • Cookbook
      • Device control
      • Networking and telephony
      • Security
      • System updates
      • Network activity logging
    • Android versions
      • Overview
      • Android 13
      • Android 12
      • Android 11
      • Android 10
      • Android 9
      • Android 8.0
      • Android 7.0
    • Device administration
  • Android Developers
  • Docs
  • Guides
Stay organized with collections Save and categorize content based on your preferences.

Additional Resources for Accessibility

Codelabs

  • Basic Android Accessibility
  • Developing an Accessibility Service for Android
  • Blog posts

  • Accessibility: Are You Serving All Your Users?
  • Content and code samples on this page are subject to the licenses described in the Content License. Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.

    Last updated 2021-07-17 UTC.

    • Twitter Twitter
      Follow @AndroidDev on Twitter
    • YouTube YouTube
      Check out Android Developers on YouTube
    • LinkedIn LinkedIn
      Connect with the Android Developers community on LinkedIn
    • More Android

      • Android
      • Android for Enterprise
      • Security
      • Source
      • News
      • Blog
      • Podcasts
    • Discover

      • Gaming
      • Machine Learning
      • Privacy
      • 5G
    • Android Devices

      • Large screens
      • Wear OS
      • Android TV
      • Android for cars
      • Android Things
      • Chrome OS devices
    • Releases

      • Android 13
      • Android 12
      • Android 11
      • Android 10
      • Pie
      • Oreo
      • Nougat
    • Documentation and Downloads

      • Android Studio guide
      • Developers guides
      • API reference
      • Download Studio
      • Android NDK
    • Support

      • Report platform bug
      • Report documentation bug
      • Google Play support
      • Join research studies
    Google Developers
    • Android
    • Chrome
    • Firebase
    • Google Cloud Platform
    • All products
    • Privacy
    • License
    • Brand guidelines
    • Get news and tips by email Subscribe
    • English
    • Bahasa Indonesia
    • Español – América Latina
    • Français
    • Português – Brasil
    • Tiếng Việt
    • 中文 – 简体
    • 中文 – 繁體
    • 日本語
    • 한국어