Android 8.1 Oreo is the release that made Android fit phones with 1 GB of RAM or less. It shipped the Android Oreo (Go edition) configuration and the Neural Networks API, which runs machine-learning models on the device. For developers it was a small API level on top of Android 8.0, with no new permissions.
At a glance
| Version | Android 8.1 |
| API level | 27 |
| Name | Oreo, public (same name as 8.0) |
Build.VERSION_CODES | O_MR1 |
| Final APIs | 25 October 2017, with the first developer preview |
| Release | Rollout to Pixel and Nexus began 5 December 2017 |
| Launch devices | No new Pixel. Pixel 2, Pixel 2 XL, Pixel, Pixel XL, Pixel C, Nexus 5X and Nexus 6P got it. The first Go edition phones were announced in February 2018 |
| Google Play target-API deadline | None of its own. Play required API 26 in 2018 and jumped to API 28 in 2019 |
The first developer preview, on 25 October 2017, already carried the final API level 27, and Play opened to apps targeting it that day. Google announced the final release at Google for India on Monday 4 December and posted the details on 5 December, with the update “rolling out” to Pixel and Nexus “over the next week”. MobileSyrup reported the rollout the same day. Partner devices, including Go edition phones, were promised “in the months ahead”. The two previews have their own parts below: Developer Preview 1 and Developer Preview 2.

What it brought
- Android Oreo (Go edition). A configuration for entry-level phones with
1 GB of RAM or less: platform memory savings, rebuilt Google apps that use
less memory, storage and data, and new hardware feature constants so Play
can target low-RAM or normal devices. The 8.1 CDD makes a handheld with 1 GB
or less declare
android.hardware.ram.low. The first Go edition phones, among them the Alcatel 1X, Nokia 1 and ZTE Tempo Go, were announced at Mobile World Congress on 27 February 2018. Google said the configuration leaves twice as much storage free out of the box. - Neural Networks API. A C API in the NDK for hardware-accelerated inference. Google built it as the base layer for TensorFlow Lite, Caffe2 and other frameworks, starting with vision models such as MobileNets and Inception v3.
- Autofill updates.
BaseAdapter.setAutofillOptions()gives a spinner’s values as strings, for example the years of a card expiry.AutofillManager.notifyViewVisibilityChanged()reports visibility changes in virtual views. Autofill services can add aCustomDescriptionand aValidator(LuhnChecksumValidator,RegexValidator) to the save UI. - SharedMemory.
android.os.SharedMemorycreates and maps anonymous shared memory, sets read or write protection, and isParcelable, so it passes to another process through AIDL. It works withASharedMemoryin the NDK. - WallpaperColors. A live wallpaper can tell the system UI its primary,
secondary and tertiary colours, and call
notifyColorsChanged()when they change. - Video thumbnails.
MediaMetadataRetriever.getScaledFrameAtTime()returns a frame scaled to a given size. Google’s example: a frame from a 4K video throughgetFrameAtTime()is a 16 MB bitmap. - Lock screen activities.
Activity.setShowWhenLocked()andsetTurnScreenOn()replace the window flags of the same purpose. - Pixel Visual Core. On Pixel 2, 8.1 enabled Google’s image co-processor through a new developer option, so apps using the Camera API could take HDR+ shots through it.
- User-visible. Wi-Fi settings label open networks by speed, from “Slow” to “Very Fast”; Android Police reported the labels reaching users in January 2018. Bluetooth settings show a connected device’s battery, as in “Connected, battery 80%”. Both strings first appear in AOSP at 8.1.
- Dimmed navigation buttons. After 2.25 seconds without a touch, SystemUI fades the back, home and recents buttons to 60% opacity, except when the wallpaper is visible behind the bar. In 8.0 the buttons dimmed only when an app asked for low-profile mode. Android Police spotted it in the first preview and read it as a guard against burn-in; Google gave no reason.
Security and privacy
- Conscrypt first. New algorithms (GCM parameters, AES, DESede and HMAC key
generators,
NONEWITHECDSA) were implemented in Conscrypt, which is now preferred over Bouncy Castle. - Fewer trusted roots. The system CA store dropped many obsolete roots, including those of WoSign and StartCom, which Chrome had already distrusted in 2017.
- Safe Browsing in WebView.
WebView.startSafeBrowsing()andWebViewClient.onSafeBrowsingHit()let an app decide what happens when a page is a known threat, instead of always showing the warning page.
- Fingerprint errors.
FINGERPRINT_ERROR_LOCKOUT_PERMANENT(too many lockouts, until the user unlocks with PIN, pattern or password) andFINGERPRINT_ERROR_VENDORbecame public. In 8.0 they were@hide. - Patch level. The first 8.1 build,
OPM1.171019.011, shipped with the 2017-12-05 security patch level.
Permissions
Android 8.1 added no new Manifest.permission constants and changed no
grants. The permission model is the one from
Android 8.0.
One limit is tied to Go devices: on a phone where
ActivityManager.isLowRamDevice() returns true, NotificationListenerService
and ConditionProviderService are not supported, so there is no notification
access for the user to grant.
What changed for your app
All apps on Android 8.1
| Change | What to do |
|---|---|
| An app can play a notification sound at most once per second | Do not rely on rapid alert sounds; extra ones are dropped, not queued |
| Notification listeners do not run on low-RAM devices | Check isLowRamDevice() and offer another path |
GCM: getParameterSpec(IvParameterSpec.class) no longer works | Use getParameterSpec(GCMParameterSpec.class) |
RSA KeyFactory rejects a KeySpec that does not fill its buffer | Pass exactly the encoded key; expect InvalidKeySpecException otherwise |
SSLSession methods throw NullPointerException on null | Catch it where you caught IllegalArgumentException |
A socket read interrupted by close throws SocketException | Stop treating -1 as the only end of a closed socket |
TLS sockets are ConscryptFileDescriptorSocket or ConscryptEngineSocket | Do not depend on internal Conscrypt class names through reflection |
| WoSign and StartCom roots are gone | Replace any server certificate that chains to them |
Apps targeting API 27
| Change | What to do |
|---|---|
An activity that is not fullscreen and opaque cannot fix its orientation with screenOrientation | Remove the fixed orientation from translucent and dialog activities |
| Apps exporting or linking to APK shared libraries must list all signing certificates in a consistent order | Declare every certificate of the library, in the same order everywhere |
EditText.getText() returns Editable instead of CharSequence | Nothing for most code; Editable is a CharSequence |
FLAG_SHOW_WHEN_LOCKED and FLAG_TURN_SCREEN_ON are deprecated | Use setShowWhenLocked() and setTurnScreenOn() or the manifest attributes |
The two targeting rules in the first rows come from the AOSP documentation of
O_MR1 in Build.java. developer.android.com has no separate
behaviour-changes page for 8.1.
What lasted
- Android Go continued as a configuration for low-RAM phones, and
FEATURE_RAM_LOWis still how Play targets them. - The Neural Networks API shipped on every device from 8.1 on, and was deprecated in Android 15. Google now points to alternatives such as the TensorFlow Lite GPU runtime.
- Fingerprint: Android 9 moved apps from
FingerprintManagertoBiometricPrompt. - Play’s target-API rule skipped 27: new apps needed API 26 from August 2018, and API 28 from August 2019 (updates from November of each year).
- SharedMemory and WallpaperColors are still in the SDK.
Worth knowing
- The
O_MR1constant shipped with a two-word comment:O MR1.Today’s AOSP adds “Released publicly as Android 8.1 in December 2017.” - On Android 8.0 itself,
Activity.onCreate()threw anIllegalStateExceptionfor apps targeting above 26 (that is, 27) when a translucent or floating activity fixed its orientation. Its message: “Only fullscreen opaque activities can request orientation”. The 8.1Activity.javano longer has that throw. - 8.1 redrew the Easter egg logo: a dark cookie with a white cream layer replaced 8.0’s amber circles. The octopus behind it is unchanged, and Android Police noted it still has eight legs for 8.1.
Android 8.1 Developer Preview 1: final APIs
25 October 2017. The first Android 8.1 build already carried the final API level 27, so Google Play opened to apps targeting it the same day.
Read on its own: Android 8.1 Developer Preview 1: final APIsDeveloper Preview 1 was the first Android 8.1 build, released on 25 October 2017. It already had final APIs: Google called API level 27 “already finalized” and opened Google Play to apps compiled against or targeting it that day.
| Release date | 25 October 2017 |
| Build | OPP5.170921.005 |
| Devices | Pixel 2, Pixel 2 XL, Pixel, Pixel XL, Pixel C, Nexus 5X and Nexus 6P, through the Android Beta Program; the Android Emulator |
| Google Play services | 11.5.76 |
| Platform stability | Yes, from this build: API level 27 was final |
Google’s post listed four API areas: the Android Go memory optimizations and
the low-RAM hardware feature constants, the Neural Networks API in the NDK,
Autofill changes such as setAutofillOptions() for spinners, and the
SharedMemory API. The release notes add a Wear change shipped alongside it:
the AmbientMode headless fragment, so a Wear app no longer has to extend
WearableActivity to stay visible in ambient mode. Google recommended
Android Studio 3.0 and Support Library 27.0.0 to build against API 27.
Known issues in Developer Preview 1
- Pixel 2 factory images. A bootloader configuration issue stopped this build from being flashed onto a Pixel 2; Google told owners to enrol in the Android Beta Program instead.
- Neural Networks API.
ANeuralNetworksModel_identifyInputsAndOutputs()could not be resolved in this build. Developer Preview 2 fixed it. - Pixel Visual Core. Pixel 2 owners could not try it yet. Android Police reported on 1 November that the “Camera HAL HDR+” developer option only appeared on debug builds, and that Google had updated its notes to say testing would start with Developer Preview 2.
Android 8.1 Developer Preview 2: Visual Core
27 November 2017. The last preview before release brought near-final images, the November 2017 security patch and Pixel Visual Core for Pixel 2 developers.
Read on its own: Android 8.1 Developer Preview 2: Visual CoreDeveloper Preview 2 came out on 27 November 2017, the last preview before the December release. Google described it as “near-final” system images with the official API level 27, the latest bug fixes and the November 2017 security patch. Devices already in the Android Beta Program got it over the air “over the next few days”.
| Release date | 27 November 2017 |
| Build | OPP6.171019.012 |
| Security patch | November 2017 |
| Devices | Pixel 2, Pixel 2 XL, Pixel, Pixel XL, Pixel C, Nexus 6P, Nexus 5X; the Android Emulator |
| Google Play services | 11.5.80 |
What Developer Preview 2 changed
- Pixel Visual Core. On Pixel 2, a new developer option turned on Google’s image co-processor, and apps using the Camera API could capture HDR+ shots through it. It is the change the final release kept; see “What it brought” above.
- TensorFlow Lite. Google’s post announced TensorFlow Lite as available the same day, running models such as MobileNets, Inception v3 and Smart Reply on top of the Neural Networks API.
- One named fix.
ANeuralNetworksModel_identifyInputsAndOutputs(), missing in Developer Preview 1, became resolvable. The release notes list no other fixed issue and no API change; API level 27 was already final.