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ón | Android 8.1 |
| Nivel de API | 27 |
| Nombre | Oreo, público (el mismo que 8.0) |
Build.VERSION_CODES | O_MR1 |
| APIs finales | 25 de octubre de 2017, con la primera vista previa para desarrolladores |
| Lanzamiento | Despliegue en Pixel y Nexus desde el 5 de diciembre de 2017 |
| Dispositivos de lanzamiento | Ningú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 Play | Ninguno 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.

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 unaCustomDescriptiony unValidator(LuhnChecksumValidator,RegexValidator) a la interfaz de guardado. - SharedMemory.
android.os.SharedMemorycrea y mapea memoria compartida anónima, fija la protección de lectura o escritura y esParcelable, así que pasa a otro proceso por AIDL. Funciona junto conASharedMemorydel 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 congetFrameAtTime()es un bitmap de 16 MB. - Actividades sobre la pantalla de bloqueo.
Activity.setShowWhenLocked()ysetTurnScreenOn()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()yWebViewClient.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.
- Errores de huella.
FINGERPRINT_ERROR_LOCKOUT_PERMANENT(demasiados bloqueos, hasta que el usuario desbloquee con PIN, patrón o contraseña) yFINGERPRINT_ERROR_VENDORpasaron 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
| Cambio | Qué hacer |
|---|---|
| Una app puede sonar una notificación como máximo una vez por segundo | No dependas de sonidos seguidos; los que sobran se pierden, no se encolan |
| Los listeners de notificaciones no corren en dispositivos con poca RAM | Comprueba isLowRamDevice() y ofrece otro camino |
GCM: getParameterSpec(IvParameterSpec.class) ya no funciona | Usa getParameterSpec(GCMParameterSpec.class) |
KeyFactory RSA rechaza un KeySpec que no llena su búfer | Pasa exactamente la clave codificada; si no, espera InvalidKeySpecException |
Los métodos de SSLSession lanzan NullPointerException ante null | Captúrala donde capturabas IllegalArgumentException |
Una lectura de socket interrumpida por el cierre lanza SocketException | Deja de tratar -1 como el único fin de un socket cerrado |
Los sockets TLS son ConscryptFileDescriptorSocket o ConscryptEngineSocket | No dependas por reflexión de nombres de clases internas de Conscrypt |
| Las raíces de WoSign y StartCom ya no están | Reemplaza cualquier certificado de servidor que encadene a ellas |
Apps con target API 27
| Cambio | Qué hacer |
|---|---|
Una actividad que no es de pantalla completa y opaca no puede fijar su orientación con screenOrientation | Quita 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 consistente | Declara cada certificado de la biblioteca, en el mismo orden en todas partes |
EditText.getText() devuelve Editable en lugar de CharSequence | Nada en la mayoría del código; Editable es un CharSequence |
FLAG_SHOW_WHEN_LOCKED y FLAG_TURN_SCREEN_ON quedan obsoletos | Usa 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_LOWsigue 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
FingerprintManageraBiometricPrompt. - 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_MR1salió 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 unaIllegalStateExceptionpara 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”. ElActivity.javade 8.1 ya no tiene esethrow. - 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.
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 finalesLa 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.
| Fecha | 25 de octubre de 2017 |
| Build | OPP5.170921.005 |
| Dispositivos | Pixel 2, Pixel 2 XL, Pixel, Pixel XL, Pixel C, Nexus 5X y Nexus 6P, con el Android Beta Program; el Android Emulator |
| Google Play services | 11.5.76 |
| Estabilidad de plataforma | Sí, 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.
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 CoreLa 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”.
| Fecha | 27 de noviembre de 2017 |
| Build | OPP6.171019.012 |
| Parche de seguridad | Noviembre de 2017 |
| Dispositivos | Pixel 2, Pixel 2 XL, Pixel, Pixel XL, Pixel C, Nexus 6P, Nexus 5X; el Android Emulator |
| Google Play services | 11.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.