Zygote
API 29 · Q

Android 10

System-wide dark theme

released
2019-09-03
runtime
ART
design
Material Theme
status
stable

The story

Android 10 introduced the modular update model that the platform had been building toward.

The problem

Even with Treble, many system components still shipped only inside the OS update.

Mainline made individual components updatable through Play as APEX and APK modules. Android 10 also added system-wide dark theme, full gesture navigation and scoped storage.

The one thing to remember

Parts of Android began updating without an OS update.

What shipped

  • System-wide dark theme
  • Gesture navigation (full)
  • Scoped storage
  • Smart Reply
  • Live Caption
  • Focus mode

Platform internals

What changed underneath the APIs. These are the changes this site's architecture modules explain in depth.

  • Project Mainline: APEX and updatable system modules
  • Scoped storage
  • Bubbles
  • Project Mainline starts shipping through Play

What developers had to deal with

  • Scoped storage with requestLegacyExternalStorage opt-out
  • Background activity starts restricted
  • Dark theme (force-dark)
  • Sharing improvements
  • Non-resettable identifiers restricted

Behaviour changes

The full archive has every recorded change with its migration advice.

targetingstorage

Scoped storage with an opt-out

Apps targeting Android 10 can opt out with requestLegacyExternalStorage, but the default is scoped storage.

What to doMigrate to app-specific directories and MediaStore now; the opt-out disappears in Android 11.

targetingbackground

Background activity starts are restricted

Apps cannot start activities from the background without an exemption.

What to doUse notifications with a full-screen intent or an exemption that fits the use case.

targetingprivacy

Device identifiers are restricted

Apps cannot read IMEI and serial numbers without a privileged permission.

What to doUse resettable identifiers or an app-scoped ID.

targetingui

Dark theme

The system can force dark mode, so apps should support a dark theme.

What to doAdd a dark theme and test with force-dark enabled.

targetingui

Full gesture navigation

Apps must handle gesture navigation insets rather than relying on a back button.

What to doUse WindowInsets and avoid conflicting edge gestures.

all appsprivacy

Background activity start restrictions apply to all apps

Even apps not targeting Android 10 are affected by some background launch restrictions.

What to doReview background launches and defer them until the user is in the app.

all appsprivacy

MAC address randomisation

Devices use randomised MAC addresses for Wi-Fi scanning.

What to doDo not use MAC addresses as device identifiers.

all appsnetwork

TLS 1.3 is enabled by default

Android 10 supports TLS 1.3 for connections.

What to doNo change needed unless you pin or fingerprint TLS versions.

Permissions introduced here

  • ACCESS_BACKGROUND_LOCATIONdangerous
  • ACCESS_MEDIA_LOCATIONdangerous
  • ACTIVITY_RECOGNITIONdangerous
  • BIND_CALL_REDIRECTION_SERVICEsignature|privileged
  • BIND_CARRIER_MESSAGING_CLIENT_SERVICEsignature
  • CALL_COMPANION_APPnormal
  • REQUEST_PASSWORD_COMPLEXITYnormal
  • SMS_FINANCIAL_TRANSACTIONSsignature|appop
  • START_VIEW_PERMISSION_USAGEsignature|installer
  • USE_FULL_SCREEN_INTENTnormal

Where this sits

Release 29 of 37 API levels, by date
Headline features
6
Architecture changes
4
Developer changes
5
Sources cited
5

Kernel

This release shipped on Linux kernel versions 4.9, 4.14. Kernel versions vary by device.