Zygote
API 26 · O

Android 8.0 Oreo

Picture-in-picture

released
2017-08-21
runtime
ART
design
Material
status
stable

The story

Android 8.0 was the release where Google finally restructured the platform to make updates possible.

The problem

Vendor code and platform code were intertwined, so updating the platform meant rebuilding the device.

Project Treble split the vendor implementation behind HIDL and a versioned interface. Android 8.0 also added notification channels, background execution limits, picture-in-picture and adaptive icons.

The one thing to remember

The release that made Android updatable in principle.

What shipped

  • Picture-in-picture
  • Notification channels
  • Adaptive icons
  • Autofill
  • Project Treble

Platform internals

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

  • Project Treble: the vendor interface separates vendor and system code
  • Background execution limits
  • Broadcast and service restrictions
  • HIDL for HALs

What developers had to deal with

  • Notification channels are mandatory when targeting 26
  • Background service limits
  • Adaptive icons
  • Autofill framework
  • Implicit broadcast restrictions

Behaviour changes

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

targetingnotifications

Notification channels are required

Every notification must belong to a channel, and channel importance controls user-visible behaviour.

What to doCreate channels at startup and assign each notification to one.

targetingbackground

Background execution limits

Background services are stopped shortly after the app leaves the foreground, and most implicit broadcasts are banned.

What to doUse foreground services or JobScheduler for work that must continue.

targetingbackground

Background location limits

Apps receive location updates less frequently in the background.

What to doUse a foreground service with the location type for continuous tracking.

targetingui

Adaptive icons

Launchers can mask app icons into different shapes.

What to doProvide adaptive icons with a foreground and background layer.

targetingsecurity

Unknown sources are per-app

The system-wide unknown-sources setting is replaced by per-app install permission.

What to doUse the package installer intent and handle the permission flow.

targetingsecurity

StrictMode cleartext detection

File URI exposure is detected and throws FileUriExposedException.

What to doUse FileProvider to share files.

all appsnotifications

Notification importance

Notifications have importance levels that control sound and visibility.

What to doSet importance correctly per channel.

all appsruntime

Runtime restrictions on background services

Even apps not targeting 8.0 see some service restrictions.

What to doMove background work to scheduled jobs.

Permissions introduced here

  • ANSWER_PHONE_CALLSdangerous
  • BIND_AUTOFILL_SERVICEsignature
  • BIND_VISUAL_VOICEMAIL_SERVICEsignature|privileged
  • INSTANT_APP_FOREGROUND_SERVICEsignature|development|instant|appop
  • MANAGE_OWN_CALLSnormal
  • READ_PHONE_NUMBERSdangerous
  • REQUEST_COMPANION_RUN_IN_BACKGROUNDnormal
  • REQUEST_COMPANION_USE_DATA_IN_BACKGROUNDnormal
  • REQUEST_DELETE_PACKAGESnormal

Where this sits

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

Kernel

This release shipped on Linux kernel versions 4.4. Kernel versions vary by device.