<CarlosDev/>

Actual

Android 8.1 Oreo: edición Go y ML local

API 27, diciembre de 2017. Trajo Android Oreo (edición Go) para teléfonos con 1 GB de RAM o menos, la Neural Networks API para ML en el dispositivo y una API SharedMemory.

Publicado
Lectura
11 min
Redacción
Estable
Serie
Parte 9 de 19 · Android, versión por versión
Banner de Android 8.1 Oreo, con el logo de la versión.
En este registro9 secciones

Android 8.1 Oreo es la versión que hizo caber Android en teléfonos con 1 GB de RAM o menos. Trajo la configuración Android Oreo (edición Go) y la Neural Networks API, que ejecuta modelos de aprendizaje automático en el propio dispositivo. Para quien desarrolla fue un nivel de API pequeño sobre Android 8.0, sin permisos nuevos.

De un vistazo

VersiónAndroid 8.1
Nivel de API27
NombreOreo, público (el mismo que 8.0)
Build.VERSION_CODESO_MR1
APIs finales25 de octubre de 2017, con la primera vista previa para desarrolladores
LanzamientoDespliegue en Pixel y Nexus desde el 5 de diciembre de 2017
Dispositivos de lanzamientoNingún Pixel nuevo. Lo recibieron Pixel 2, Pixel 2 XL, Pixel, Pixel XL, Pixel C, Nexus 5X y Nexus 6P. Los primeros teléfonos con edición Go se anunciaron en febrero de 2018
Plazo de target API en Google PlayNinguno propio. Play exigió API 26 en 2018 y saltó a API 28 en 2019

La primera vista previa, del 25 de octubre de 2017, ya traía el nivel de API 27 final, y ese día Play se abrió a las apps con target 27. Google anunció la versión final en Google for India el lunes 4 de diciembre y publicó los detalles el 5, con la actualización llegando a Pixel y Nexus “over the next week”. MobileSyrup informó del despliegue ese mismo día. Los dispositivos de fabricantes, incluidos los teléfonos con edición Go, quedaron para “the months ahead”. Las dos vistas previas tienen su propia parte abajo: Developer Preview 1 y Developer Preview 2.

La pantalla de inicio de Android 8.1 en un Nexus 5X: una línea con la fecha y el clima arriba, un fondo rosa y violeta, carpetas redondas llamadas Google, Erstellen y Play, el ícono de Play Store, un dock con Teléfono, Mensajes, Chrome, Gmail y Cámara, y una barra de búsqueda de Google sobre los botones de atrás, inicio y recientes
Android 8.1 en un Nexus 5X, capturado el 3 de noviembre de 2017 durante la vista previa para desarrolladores. Wikimedia Commons · Apache License 2.0

Qué trajo

  • Android Oreo (edición Go). Una configuración para teléfonos de entrada con 1 GB de RAM o menos: ahorro de memoria en la plataforma, apps de Google rehechas para usar menos memoria, almacenamiento y datos, y nuevas constantes de hardware para que Play distinga dispositivos con poca RAM de los normales. El CDD de 8.1 obliga a un teléfono con 1 GB o menos a declarar android.hardware.ram.low. Los primeros teléfonos con edición Go, entre ellos el Alcatel 1X, el Nokia 1 y el ZTE Tempo Go, se anunciaron en el Mobile World Congress el 27 de febrero de 2018. Según Google, la configuración deja libre el doble de almacenamiento de fábrica.
  • Neural Networks API. Una API en C del NDK para inferencia acelerada por hardware. Google la diseñó como base para TensorFlow Lite, Caffe2 y otros frameworks, empezando por modelos de visión como MobileNets e Inception v3.
  • Mejoras de Autofill. BaseAdapter.setAutofillOptions() expone como texto los valores de un spinner, por ejemplo los años de vencimiento de una tarjeta. AutofillManager.notifyViewVisibilityChanged() avisa cambios de visibilidad en vistas virtuales. Los servicios de autocompletado pueden sumar una CustomDescription y un Validator (LuhnChecksumValidator, RegexValidator) a la interfaz de guardado.
  • SharedMemory. android.os.SharedMemory crea y mapea memoria compartida anónima, fija la protección de lectura o escritura y es Parcelable, así que pasa a otro proceso por AIDL. Funciona junto con ASharedMemory del NDK.
  • WallpaperColors. Un fondo animado puede indicarle a la interfaz del sistema sus colores primario, secundario y terciario, y llamar a notifyColorsChanged() cuando cambian.
  • Miniaturas de video. MediaMetadataRetriever.getScaledFrameAtTime() devuelve un fotograma escalado al tamaño pedido. El ejemplo de Google: un fotograma de un video 4K con getFrameAtTime() es un bitmap de 16 MB.
  • Actividades sobre la pantalla de bloqueo. Activity.setShowWhenLocked() y setTurnScreenOn() reemplazan los flags de ventana con el mismo fin.
  • Pixel Visual Core. En el Pixel 2, 8.1 activó el coprocesador de imagen de Google con una nueva opción de desarrollador, para que las apps que usan la Camera API tomaran fotos HDR+ a través de él.
  • Para el usuario. Los ajustes de Wi-Fi etiquetan las redes abiertas por velocidad, de “Slow” a “Very Fast”; Android Police informó que las etiquetas llegaron a los usuarios en enero de 2018. Los ajustes de Bluetooth muestran la batería del dispositivo conectado, como en “Connected, battery 80%”. Ambos textos aparecen por primera vez en AOSP en 8.1.
  • Botones de navegación atenuados. Tras 2,25 segundos sin tocar la pantalla, SystemUI baja los botones de atrás, inicio y recientes al 60 % de opacidad, salvo cuando el fondo de pantalla se ve detrás de la barra. En 8.0 solo se atenuaban si una app pedía el modo de perfil bajo. Android Police lo detectó en la primera vista previa y lo interpretó como una protección contra el quemado de pantalla; Google no dio ningún motivo.

Seguridad y privacidad

  • Conscrypt primero. Algoritmos nuevos (parámetros GCM, generadores de claves AES, DESede y HMAC, NONEWITHECDSA) se implementaron en Conscrypt, que ahora tiene preferencia sobre Bouncy Castle.
  • Menos raíces de confianza. El almacén de CA del sistema quitó muchas raíces obsoletas, entre ellas las de WoSign y StartCom, en las que Chrome ya había dejado de confiar en 2017.
  • Safe Browsing en WebView. WebView.startSafeBrowsing() y WebViewClient.onSafeBrowsingHit() dejan que la app decida qué pasa cuando una página es una amenaza conocida, en lugar de mostrar siempre la página de advertencia.
no sí loadUrl ¿Amenaza conocida? Cargar la página onSafeBrowsingHit backToSafety proceed showInterstitial
  • Errores de huella. FINGERPRINT_ERROR_LOCKOUT_PERMANENT (demasiados bloqueos, hasta que el usuario desbloquee con PIN, patrón o contraseña) y FINGERPRINT_ERROR_VENDOR pasaron a ser públicos. En 8.0 eran @hide.
  • Nivel de parche. La primera compilación de 8.1, OPM1.171019.011, salió con el nivel de parche de seguridad 2017-12-05.

Permisos

Android 8.1 no añadió constantes nuevas a Manifest.permission ni cambió cómo se conceden. El modelo de permisos es el de Android 8.0.

Hay un límite ligado a los dispositivos Go: en un teléfono donde ActivityManager.isLowRamDevice() devuelve true, NotificationListenerService y ConditionProviderService no están soportados, así que el usuario no tiene acceso a notificaciones que conceder.

Qué cambió para tu app

Todas las apps en Android 8.1

CambioQué hacer
Una app puede sonar una notificación como máximo una vez por segundoNo dependas de sonidos seguidos; los que sobran se pierden, no se encolan
Los listeners de notificaciones no corren en dispositivos con poca RAMComprueba isLowRamDevice() y ofrece otro camino
GCM: getParameterSpec(IvParameterSpec.class) ya no funcionaUsa getParameterSpec(GCMParameterSpec.class)
KeyFactory RSA rechaza un KeySpec que no llena su búferPasa exactamente la clave codificada; si no, espera InvalidKeySpecException
Los métodos de SSLSession lanzan NullPointerException ante nullCaptúrala donde capturabas IllegalArgumentException
Una lectura de socket interrumpida por el cierre lanza SocketExceptionDeja de tratar -1 como el único fin de un socket cerrado
Los sockets TLS son ConscryptFileDescriptorSocket o ConscryptEngineSocketNo dependas por reflexión de nombres de clases internas de Conscrypt
Las raíces de WoSign y StartCom ya no estánReemplaza cualquier certificado de servidor que encadene a ellas

Apps con target API 27

CambioQué hacer
Una actividad que no es de pantalla completa y opaca no puede fijar su orientación con screenOrientationQuita la orientación fija de las actividades translúcidas y de diálogo
Las apps que exportan o enlazan bibliotecas compartidas en APK deben listar todos los certificados de firma en un orden consistenteDeclara cada certificado de la biblioteca, en el mismo orden en todas partes
EditText.getText() devuelve Editable en lugar de CharSequenceNada en la mayoría del código; Editable es un CharSequence
FLAG_SHOW_WHEN_LOCKED y FLAG_TURN_SCREEN_ON quedan obsoletosUsa setShowWhenLocked() y setTurnScreenOn() o los atributos del manifiesto

Las dos reglas de las primeras filas vienen de la documentación de O_MR1 en Build.java de AOSP. developer.android.com no tiene una página aparte de cambios de comportamiento para 8.1.

Qué perduró

  • Android Go siguió como configuración para teléfonos con poca RAM, y FEATURE_RAM_LOW sigue siendo la forma en que Play los distingue.
  • La Neural Networks API estuvo en todos los dispositivos desde 8.1 y quedó obsoleta en Android 15. Google ahora recomienda alternativas como el runtime de GPU de TensorFlow Lite.
  • Huella digital: Android 9 pasó a las apps de FingerprintManager a BiometricPrompt.
  • La regla de target API de Play se saltó el 27: las apps nuevas necesitaron API 26 desde agosto de 2018 y API 28 desde agosto de 2019 (las actualizaciones, desde noviembre de cada año).
  • SharedMemory y WallpaperColors siguen en el SDK.

Vale la pena saber

  • La constante O_MR1 salió con un comentario de dos palabras: O MR1. El AOSP actual añade “Released publicly as Android 8.1 in December 2017.”
  • En el propio Android 8.0, Activity.onCreate() lanzaba una IllegalStateException para apps con target mayor que 26 (o sea, 27) cuando una actividad translúcida o flotante fijaba su orientación. Su mensaje: “Only fullscreen opaque activities can request orientation”. El Activity.java de 8.1 ya no tiene ese throw.
  • 8.1 redibujó el logo del Easter egg: una galleta oscura con una capa de crema blanca reemplazó los círculos ámbar de 8.0. El pulpo que aparece detrás no cambió, y Android Police señaló que sigue teniendo ocho patas en 8.1.

Parte 1 de 2

2 min

Android 8.1 Developer Preview 1: APIs finales

25 de octubre de 2017. La primera build de Android 8.1 ya traía el nivel de API 27 final, así que Google Play aceptó apps con ese target el mismo día.

Leer por separado: Android 8.1 Developer Preview 1: APIs finales

La Developer Preview 1 fue la primera build de Android 8.1, publicada el 25 de octubre de 2017. Ya tenía las APIs finales: Google dijo que el nivel de API 27 estaba “already finalized” y ese día abrió Google Play a las apps compiladas contra él o con ese target.

Fecha25 de octubre de 2017
BuildOPP5.170921.005
DispositivosPixel 2, Pixel 2 XL, Pixel, Pixel XL, Pixel C, Nexus 5X y Nexus 6P, con el Android Beta Program; el Android Emulator
Google Play services11.5.76
Estabilidad de plataformaSí, desde esta build: el nivel de API 27 era final

El post de Google nombró cuatro áreas de API: las optimizaciones de memoria de Android Go y las constantes de hardware para equipos con poca RAM, la Neural Networks API en el NDK, cambios de Autofill como setAutofillOptions() para spinners, y la API SharedMemory. Las notas de versión suman un cambio de Wear que salió a la vez: el fragmento sin interfaz AmbientMode, con el que una app de Wear ya no necesita extender WearableActivity para seguir visible en modo ambiente. Google recomendó Android Studio 3.0 y la Support Library 27.0.0 para compilar contra API 27.

Problemas conocidos de la Developer Preview 1

  • Imágenes de fábrica del Pixel 2. Un problema de configuración del bootloader impedía instalar esta build en un Pixel 2; Google indicó a sus dueños que se inscribieran en el Android Beta Program.
  • Neural Networks API. ANeuralNetworksModel_identifyInputsAndOutputs() no se podía resolver en esta build. La Developer Preview 2 lo corrigió.
  • Pixel Visual Core. Los dueños de un Pixel 2 todavía no podían probarlo. Android Police informó el 1 de noviembre que la opción de desarrollador “Camera HAL HDR+” solo aparecía en builds de depuración, y que Google había cambiado sus notas para decir que las pruebas empezarían con la Developer Preview 2.

Parte 2 de 2

1 min

Android 8.1 Developer Preview 2: Visual Core

27 de noviembre de 2017. La última vista previa antes del lanzamiento trajo imágenes casi finales, el parche de noviembre de 2017 y Pixel Visual Core en el Pixel 2.

Leer por separado: Android 8.1 Developer Preview 2: Visual Core

La Developer Preview 2 salió el 27 de noviembre de 2017, la última vista previa antes del lanzamiento de diciembre. Google la describió como imágenes de sistema “near-final” con el nivel de API 27 oficial, las últimas correcciones y el parche de seguridad de noviembre de 2017. Los dispositivos ya inscritos en el Android Beta Program la recibieron por OTA “over the next few days”.

Fecha27 de noviembre de 2017
BuildOPP6.171019.012
Parche de seguridadNoviembre de 2017
DispositivosPixel 2, Pixel 2 XL, Pixel, Pixel XL, Pixel C, Nexus 6P, Nexus 5X; el Android Emulator
Google Play services11.5.80

Qué cambió la Developer Preview 2

  • Pixel Visual Core. En el Pixel 2, una nueva opción de desarrollador activaba el coprocesador de imagen de Google, y las apps que usan la Camera API podían tomar fotos HDR+ con él. Es el cambio que conservó la versión final; ver “Qué trajo” arriba.
  • TensorFlow Lite. El post de Google anunció TensorFlow Lite disponible ese mismo día, ejecutando modelos como MobileNets, Inception v3 y Smart Reply sobre la Neural Networks API.
  • Una corrección nombrada. ANeuralNetworksModel_identifyInputsAndOutputs(), que faltaba en la Developer Preview 1, pasó a poder resolverse. Las notas de versión no listan otras correcciones ni cambios de API; el nivel de API 27 ya era final.

Clasificado en

Citas

40

Referencias externas