<CarlosDev/>

Current

Android 8.1 Oreo: Go edition and on-device ML

API 27, December 2017. It added Android Oreo (Go edition) for phones with 1 GB of RAM or less, the Neural Networks API for on-device ML, and a SharedMemory API.

Published
Reading
10 min
Write-up
Stable
Series
Part 9 of 19 · Android, version by version
Android 8.1 Oreo banner, with the version logo.
In this record9 sections

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

VersionAndroid 8.1
API level27
NameOreo, public (same name as 8.0)
Build.VERSION_CODESO_MR1
Final APIs25 October 2017, with the first developer preview
ReleaseRollout to Pixel and Nexus began 5 December 2017
Launch devicesNo 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 deadlineNone 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.

The Android 8.1 home screen on a Nexus 5X: a date and weather line at the top, a pink and purple wallpaper, round folders named Google, Erstellen and Play, the Play Store icon, a dock with Phone, Messages, Chrome, Gmail and Camera, and a Google search bar above the back, home and recents buttons
Android 8.1 on a Nexus 5X, captured on 3 November 2017 during the developer preview. Wikimedia Commons · Apache License 2.0

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 a CustomDescription and a Validator (LuhnChecksumValidator, RegexValidator) to the save UI.
  • SharedMemory. android.os.SharedMemory creates and maps anonymous shared memory, sets read or write protection, and is Parcelable, so it passes to another process through AIDL. It works with ASharedMemory in 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 through getFrameAtTime() is a 16 MB bitmap.
  • Lock screen activities. Activity.setShowWhenLocked() and setTurnScreenOn() 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() and WebViewClient.onSafeBrowsingHit() let an app decide what happens when a page is a known threat, instead of always showing the warning page.
no yes loadUrl Known threat? Load the page onSafeBrowsingHit backToSafety proceed showInterstitial
  • Fingerprint errors. FINGERPRINT_ERROR_LOCKOUT_PERMANENT (too many lockouts, until the user unlocks with PIN, pattern or password) and FINGERPRINT_ERROR_VENDOR became 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

ChangeWhat to do
An app can play a notification sound at most once per secondDo not rely on rapid alert sounds; extra ones are dropped, not queued
Notification listeners do not run on low-RAM devicesCheck isLowRamDevice() and offer another path
GCM: getParameterSpec(IvParameterSpec.class) no longer worksUse getParameterSpec(GCMParameterSpec.class)
RSA KeyFactory rejects a KeySpec that does not fill its bufferPass exactly the encoded key; expect InvalidKeySpecException otherwise
SSLSession methods throw NullPointerException on nullCatch it where you caught IllegalArgumentException
A socket read interrupted by close throws SocketExceptionStop treating -1 as the only end of a closed socket
TLS sockets are ConscryptFileDescriptorSocket or ConscryptEngineSocketDo not depend on internal Conscrypt class names through reflection
WoSign and StartCom roots are goneReplace any server certificate that chains to them

Apps targeting API 27

ChangeWhat to do
An activity that is not fullscreen and opaque cannot fix its orientation with screenOrientationRemove the fixed orientation from translucent and dialog activities
Apps exporting or linking to APK shared libraries must list all signing certificates in a consistent orderDeclare every certificate of the library, in the same order everywhere
EditText.getText() returns Editable instead of CharSequenceNothing for most code; Editable is a CharSequence
FLAG_SHOW_WHEN_LOCKED and FLAG_TURN_SCREEN_ON are deprecatedUse 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_LOW is 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 FingerprintManager to BiometricPrompt.
  • 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_MR1 constant 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 an IllegalStateException for 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.1 Activity.java no 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.

Part 1 of 2

1 min

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 APIs

Developer 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 date25 October 2017
BuildOPP5.170921.005
DevicesPixel 2, Pixel 2 XL, Pixel, Pixel XL, Pixel C, Nexus 5X and Nexus 6P, through the Android Beta Program; the Android Emulator
Google Play services11.5.76
Platform stabilityYes, 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.

Part 2 of 2

1 min

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 Core

Developer 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 date27 November 2017
BuildOPP6.171019.012
Security patchNovember 2017
DevicesPixel 2, Pixel 2 XL, Pixel, Pixel XL, Pixel C, Nexus 6P, Nexus 5X; the Android Emulator
Google Play services11.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.

Filed under

Citations

40

External references