![](https://developer.android.com/images/about/versions/10/android10-card.png)

Android 10 is built around three important themes. First, Android 10 is shaping the leading edge of mobile innovation with advanced machine-learning and support for emerging devices like foldables and 5G enabled phones. Next, Android 10 has a central focus on privacy and security, with almost 50 features that give users greater protection, transparency, and control. Finally, Android 10 expands users' digital wellbeing controls so individuals and families can find a better balance with technology.

Here's a look at what's in Android 10 for developers and how you can use it today.

## Innovation and new experiences

With Android 10 you can take advantage of the latest hardware and software innovations to build amazing app experiences for users.  
![](https://developer.android.com/static/images/about/versions/10/overview/image2.png)

*With Android 10 you can optimize your apps for foldables and other large-screen devices.*

### Foldables

Building on robust multi-window support, Android 10 extends multitasking across app windows and provides screen continuity to maintain your app state as the device folds or unfolds. Android 10 adds a number of improvements in[onResume](https://developer.android.com/reference/android/app/Activity.html#onResume())and[onPause](https://developer.android.com/reference/android/app/Activity.html#onPause())to support multi-resume and notify your app when it has focus. It also changes how the[resizeableActivity](https://developer.android.com/guide/topics/ui/multi-window#resizeableActivity)manifest attribute works, to help you manage how your app is displayed on foldable and large screens. To help you build for foldable devices, you can configure a foldable emulator as a virtual device (AVD) in Android Studio. For details on how to optimize your apps for foldables, see the[developer guide](https://developer.android.com/guide/topics/ui/foldables).

### 5G networks

5G promises to deliver consistently faster speeds and lower latency, Android 10 adds platform support for 5G and extends[existing APIs](https://developer.android.com/reference/android/net/ConnectivityManager)to help you take advantage of these enhancements. You can use connectivity APIs to detect if the device has a high bandwidth connection and check whether the connection is metered. With these, your apps and games can tailor rich, immersive experiences to users over 5G.

### Smart Reply in notifications

Android 10 uses on-device ML to suggest contextual actions in notifications, such as smart replies for messages or opening a map for an address in the notification. Your apps can take advantage of this feature right away, without you needing to do anything. System-provided smart replies and actions are inserted directly into notifications by default. You can still supply your own replies and actions if you want. Just opt out of Smart Reply on a per-notification basis using[setAllowGeneratedReplies()](https://developer.android.com/reference/android/app/Notification.Action.Builder#setAllowGeneratedReplies(boolean))and[setAllowSystemGeneratedContextualActions()](https://developer.android.com/reference/android/app/Notification.Builder#setAllowSystemGeneatedContextualActions(boolean)).  
![](https://developer.android.com/static/images/about/versions/10/overview/image10.png)

*Smart Reply can suggest actions based on notification content.*

### Dark Theme

Android 10 adds a system-wide dark theme that's ideal for low light and helps save battery. Users can activate a new system-wide dark theme by going to Settings or turning on Battery Saver. This changes the system UI to dark, and enables the dark theme of apps that support it. You can build a custom dark theme for your app or opt-in to a new Force Dark feature that lets the system dynamically create a dark version from your existing theme. You may also want to take advantage of[AppCompat's DayNight feature](https://developer.android.com/preview/features/darktheme)to offer a dark theme for users on earlier versions of Android. See the[developer guide](https://developer.android.com/guide/topics/ui/look-and-feel/darktheme)for more information.  
![](https://developer.android.com/static/images/about/versions/10/overview/image12.png)

*Android 10 can create a dark theme for your app dynamically with Force Dark.*

### Gesture navigation

![](https://developer.android.com/static/images/about/versions/10/overview/gesture.gif)

*Gesture navigation gives apps the full screen for content.*

Android 10 introduces a fully gestural navigation mode that eliminates the navigation bar area and allows apps to use the full screen to deliver richer, more immersive experiences. It retains the familiar Back, Home, and Recents navigation through edge swipes rather than visible buttons. To blend seamlessly with gesture navigation, your should go edge-to-edge, drawing behind the navigation bar to create an immersive experience. To implement this, apps should use the[setSystemUiVisibility()](https://developer.android.com/reference/android/view/View.html#setSystemUiVisibility(int))API to be laid out fullscreen, and then handle[WindowInsets](https://developer.android.com/reference/android/view/WindowInsets)as appropriate to ensure that important pieces of UI are not obscured.[Get started optimizing your app](https://developer.android.com/guide/navigation/gesturenav)today, and see our[blog post series](https://medium.com/androiddevelopers/gesture-navigation-going-edge-to-edge-812f62e4e83e)for more information.

### Settings Panels

You can now show key system settings directly in the context of your app, through a new[Settings Panel API](https://developer.android.com/reference/android/provider/Settings.Panel). A settings panel is a floating UI that you invoke to show settings that users might need, such as internet connectivity, NFC, and audio volume. For example, a browser could display a panel with connectivity settings like Airplane Mode, Wi-Fi (including nearby networks), and Mobile Data. To display a settings panel, just fire an intent with one of the new[Settings.Panel actions](https://developer.android.com/reference/android/provider/Settings.Panel.html#ACTION_INTERNET_CONNECTIVITY).

### Sharing shortcuts

Sharing Shortcuts makes sharing quicker and easier, letting users jump directly to another app to share content. Developers can publish share targets that launch a specific activity in their apps with content attached, and these are shown to users in the share UI. Because they're published in advance, the share UI loads instantly when launched. Sharing Shortcuts is similar to App Shortcuts and uses the same[ShortcutInfo API](https://developer.android.com/reference/android/content/pm/ShortcutInfo). The API is also supported in the ShareTarget AndroidX library. See the[sample app](https://github.com/android/storage-samples/tree/main/SharingShortcuts)for details.  
![](https://developer.android.com/static/images/about/versions/10/overview/image11.png)

*Sharing shortcuts let users jump directly to a specific activity in your apps with content attached.*

## Privacy for users

Privacy is a central focus in Android 10, from stronger protections in the platform to new features designed with privacy in mind. Building on previous releases, Android 10 includes extensive changes to protect privacy and give users more control, with improved system UI, stricter permissions, and restrictions on what data apps can use. See the[privacy changes](https://developer.android.com/about/versions/10/privacy/changes)for details on how to support these in your apps.  
![](https://developer.android.com/static/images/about/versions/10/overview/location.png)

*Users can now choose to grant access to location when the app is in the foreground.*

**Giving users more control over location data** - Users have more control over their location data through a new permission option -- they can now allow an app to access location only while the app is actually in use (running in the foreground). For most apps, this provides a sufficient level of access, while for users it's a big improvement in transparency and control. To learn more about location changes, see the[developer guide](https://developer.android.com/training/location/receive-location-updates)or our[blog post](https://android-developers.googleblog.com/2019/03/giving-users-more-control-over-their.html).

**Protecting location data in network scans** - Most of the APIs for scanning networks already required the coarse location permission. Android 10 increases the protection around those APIs by[requiring the fine location permission instead](https://developer.android.com/about/versions/10/privacy/changes#location-telephony-wifi-bluetooth).

**Preventing device tracking** - Apps can no longer access non-resettable device identifiers that could be used for tracking, including device IMEI, serial number, and similar identifiers. The device's MAC address is also randomized when connected to Wi-Fi networks by default. Read the[best practices](https://developer.android.com/training/articles/user-data-ids)to help you choose the right identifiers for your use case, and see the details[here](https://developer.android.com/preview/privacy/data-identifiers).

**Securing user data in external storage** - Android 10 introduces a number of changes to give users more control over files in external storage and the app data within them. Apps can store their own files in their private sandboxes, but must use MediaStore to access shared media files and use the system file picker to access shared files in the new Downloads collection. Learn more[here](https://developer.android.com/about/versions/10/privacy/changes#scoped-storage).

**Blocking unwanted interruptions** - Android 10 prevents app launches from the background that unexpectedly jump into the foreground and take over focus from another app. Learn more[here](https://developer.android.com/about/versions/10/privacy/changes#background-activity-starts).

## Security

Android 10 introduces a[number of features](https://security.googleblog.com/2019/05/whats-new-in-android-q-security.html)that keep users more secure through advances in encryption, platform hardening, and authentication. Read more about[Android 10 security updates here](https://android-developers.googleblog.com/2019/05/whats-new-in-android-q-security.html).

**Storage encryption** - All compatible devices launching with Android 10 are required to encrypt user data, and to make this more efficient, Android 10 includes[Adiantum](https://source.android.com/security/encryption/adiantum), our new encryption mode.

**TLS 1.3 by default** - Android 10 also enables[TLS 1.3](https://www.ietf.org/blog/tls13/)by default, a major revision to the TLS standard with performance benefits and[enhanced security](https://developer.android.com/about/versions/10/behavior-changes-all#tls-1.3).

**Platform hardening** - Android 10 also includes[hardening for several security-critical areas](https://security.googleblog.com/2019/05/queue-hardening-enhancements.html)of the platform.

**Improved Biometrics** - Android 10 extends the[BiometricPrompt](https://developer.android.com/reference/android/hardware/biometrics/package-summary)framework to support passive authentication methods such as face, and adding implicit and explicit authentication flows. In the explicit flow, the user must explicitly confirm the transaction in the TEE during the authentication. The implicit flow is designed for a lighter-weight alternative for transactions with passive authentication. Android 10 also improves the fallback for device credentials when needed. Learn more[here](https://developer.android.com/training/sign-in/biometric-auth).

## Camera and media

### Dynamic depth for photos

Apps can now request a Dynamic Depth image, which consists of a JPEG, XMP metadata related to depth related elements, and a depth and confidence map embedded in the same file. These let you offer specialized blurs and bokeh options in your app. Dynamic Depth is an[open format](https://developer.android.com/training/camerax/Dynamic-depth-v1.0.pdf)for the ecosystem and we're working with our partners to bring it to devices running Android 10 and later.  
![](https://developer.android.com/static/images/about/versions/10/overview/depthtrue.jpg)  
![](https://developer.android.com/static/images/about/versions/10/overview/depthblur.jpg)  
![](https://developer.android.com/static/images/about/versions/10/overview/depthmap.jpg)  
*With Dynamic Depth image you can offer specialized blurs and bokeh options in your app.*

### Audio playback capture

Now any app that plays audio can let other apps capture its audio stream using[a new audio playback capture API](https://developer.android.com/guide/topics/media/playback-capture). In addition to enabling captioning and subtitles, the API lets you support popular use-cases like live-streaming games. We've built this new capability with privacy and copyright protection in mind, so the ability for an app to capture another app's audio is constrained, giving apps full control over whether their audio streams can be captured. Read more in this[blog post](https://android-developers.googleblog.com/2019/07/capturing-audio-in-android-q.html).

### New audio and video codecs

Android 10 adds support for the open source video codec[AV1](https://en.wikipedia.org/wiki/AV1), which allows media providers to stream high quality video content to Android devices[using less bandwidth](https://en.wikipedia.org/wiki/AV1#Quality_and_efficiency). In addition, Android 10 supports audio encoding using[Opus](http://opus-codec.org/)- an open, royalty-free codec optimized for speech and music streaming - and[HDR10+](https://en.wikipedia.org/wiki/High-dynamic-range_video#HDR10+)for high dynamic range video on devices that support it. The[MediaCodecInfo API](https://developer.android.com/reference/android/media/MediaCodecInfo)introduces an easier way to determine the video rendering capabilities of an Android device. For any given codec, you can obtain a list of supported sizes and frame rates.

### Native MIDI API

For apps that perform their audio processing in C++, Android 10 introduces a[native MIDI API](https://developer.android.com/ndk/guides/audio/midi)to communicate with MIDI devices through the NDK. This API allows MIDI data to be retrieved inside an audio callback using a non-blocking read, enabling low latency processing of MIDI messages. Give it a try with the sample app and[source code here](https://github.com/android/ndk-samples/tree/main/native-midi).

### Directional, zoomable microphones

Android 10 gives you more control over audio capture through a new[MicrophoneDirection](https://developer.android.com/reference/android/media/MicrophoneDirection)API. You can use the API to specify a preferred direction of the microphone when taking an audio recording. For example, when the user is taking a "selfie" video, you can[request the front-facing microphone](https://developer.android.com/reference/android/media/MicrophoneDire%0Action#setMicrophoneDirection(int))for audio recording (if it exists). Additionally, this API introduces a standardized way of controlling zoomable microphones, allowing your app to have control over the[recording field dimension](https://developer.android.com/reference/android/media/MicrophoneDirection#setMicrophoneFieldDimension(float)).

### Vulkan everywhere

Android 10 expands the impact of[Vulkan](https://www.khronos.org/vulkan/)with[our implementation](https://developer.android.com/ndk/guides/graphics/)of the low-overhead, cross-platform API for high-performance 3D graphics. Vulkan 1.1 is now a requirement on all 64-bit devices running Android 10 and higher, and a recommendation for all 32-bit devices. We already see significant momentum on Vulkan support in the ecosystem - among devices running Android N or above, 53% support Vulkan 1.0.3 or higher. With the new requirement in Android 10, we expect to see adoption improve further in the coming year.

## Connectivity

### Improved peer-to-peer and internet connectivity

We've refactored the Wi-Fi stack to improve privacy and performance, and also to improve common use-cases like managing IoT devices and suggesting internet connections -- without requiring the location permission. The[network connection APIs](https://developer.android.com/guide/topics/connectivity/wifi-bootstrap)make it easier to manage IoT devices over local Wi-Fi, for peer-to-peer functions like configuring, downloading, or printing. The[network suggestion APIs](https://developer.android.com/guide/topics/connectivity/wifi-suggest)let apps surface preferred Wi-Fi networks to the user for internet connectivity.

### Wi-Fi performance modes

Apps can now request adaptive Wi-Fi by enabling[high performance and low latency modes](https://developer.android.com/reference/android/net/wifi/WifiManager.html#createWifiLock(int,%20java.lang.String)). These can be a great benefit where low latency is important to the user experience, such as real-time gaming, active voice calls, and similar use-cases. The platform works with the device firmware to meet the requirement with the lowest power consumption. To use the new performance modes, call[WifiManager.WifiLock.createWifiLock()](https://developer.android.com/reference/android/net/wifi/WifiManager.html#createWifiLock(int,%20java.lang.String))with`WIFI_MODE_FULL_LOW_LATENCY`or`WIFI_MODE_FULL_HIGH_PERF`. In these modes, the platform works with the device firmware to meet the requirement with lowest power consumption.

## Android foundations

### ART optimizations

Improvements in the ART runtime help your apps start faster, consume less memory, and run smoother -- without requiring any work from you.[ART profiles](https://android-developers.googleblog.com/2019/04/improving-app-performance-with-art.html)delivered by Google Play let ART pre-compile parts of your app even before it's run. At runtime, Android 10 adds Generational Garbage Collection to ART's Concurrent Copying (CC) Garbage Collector to make garbage collection more efficient in terms of time and CPU, reduces jank, and helps apps run better on lower-end devices.  
![](https://developer.android.com/static/images/about/versions/10/overview/art-profiles.png)

*This chart shows the percentage improvement in startup time for specific apps when tested using Play profiles.*

### Neural Networks API 1.2

We've added 60 new ops including ARGMAX, ARGMIN, quantized LSTM, alongside a range of performance optimizations. This lays the foundation for accelerating a much greater range of models -- such as those for object detection and image segmentation. We're working with hardware vendors and popular machine learning frameworks such as[TensorFlow](https://www.tensorflow.org/)to optimize and roll out support for NNAPI 1.2.

### Thermal API

When devices get too warm, they may throttle the CPU and/or GPU, and this can affect apps and games in unexpected ways. Now in Android 10, apps and games can use a[thermal API](https://developer.android.com/reference/android/os/PowerManager#addThermalStatusListener(android.os.PowerManager.OnThermalStatusChangedListener))to monitor changes on the device and take action to help restore normal temperature. For example, streaming apps can reduce resolution/bit rate or network traffic, a camera app could disable flash or intensive image enhancement, or a game could reduce frame rate or polygon tessellation. Read more[here](https://developer.android.com/about/versions/10/features#thermal).

### Compatibility through public APIs

Android 10 continues to expand restrictions on non-SDK interfaces, so that apps gradually move toward[only using public APIs](https://developer.android.com/guide/app-compatibility/restrictions-non-sdk-interfaces). If an interface that you currently use is restricted, you can request a[new public API for that interface](https://developer.android.com/guide/app-compatibility/restrictions-non-sdk-interfaces#feature-request)instead. To help you make the transition and prevent your apps from breaking, we're enabling the restrictions only when your app is targeting Android 10 (API 29). For more details on the restrictions, see the[developer guide](https://developer.android.com/about/versions/10/non-sdk-q).

## Faster updates, fresher code

Android 10 is built for faster updates through[Project Treble](https://source.android.com/devices/architecture), which provides a consistent, testable interface between Android and the underlying device code from device makers and silicon manufacturers. Through Treble, device makers can bring Android 10 to Treble-compliant devices more quickly and at lower cost.

Android 10 is also the first release to support[Project Mainline](https://android-developers.googleblog.com/2019/05/fresher-os-with-projects-treble-and-mainline.html)(officially called*Google Play system updates*), our new technology for securing Android users and keeping their devices fresh with important code changes - direct from Google Play. With Google Play system updates, we're able to update specific internal components across all devices running Android 10 and higher, without requiring a full system update from the device manufacturer.

For developers, we expect these updates in Android 10 to help drive consistency of platform implementation broadly across devices, and over time bring greater uniformity that will reduce your development and testing costs.

## Get started

For complete developer resources for Android 10, visit[developer.android.com/10](https://developer.android.com/about/versions/10/).