Android 7.1 es la actualización de Nougat que llegó primero al teléfono propio de Google, el Pixel, dos meses antes que a cualquier Nexus. A los usuarios les trajo Night Light y las actualizaciones sin interrupción. A los desarrolladores, API 25 les dio accesos directos en el icono del launcher, iconos redondos y una forma de que los teclados envíen imágenes.
De un vistazo
| Versión | Android 7.1 (7.1.1 y 7.1.2 mantuvieron el mismo nivel de API) |
| Nivel de API | 25 |
| Nombre | Nougat, público (el mismo nombre que 7.0) |
Build.VERSION_CODES | N_MR1 |
| Play acepta apps con API 25 | 19 de octubre de 2016, con la Developer Preview 1 |
| Lanzamiento | En el Pixel, octubre de 2016. 7.1.1 llegó a los Nexus desde el 5 de diciembre |
| Dispositivos de lanzamiento | Pixel y Pixel XL, anunciados y en preventa el 4 de octubre de 2016 |
| Plazo de target API en Google Play | Ninguno. La regla de target API de Play empezó en 2018, con API 26 |
Google anunció el Pixel el 4 de octubre de 2016 con “Android 7.1 Nougat”. Las primeras imágenes de fábrica del Pixel, compilación NDE63H, son de octubre de 2016. El 11 de octubre Google anunció una developer preview para los Nexus “later this month” y la versión final “in early December”. La primera compilación de la preview, del 19 de octubre, ya traía la API 25 final y abrió Play a las apps con target API 25. Las dos developer previews y las dos betas de 7.1.2 son las cuatro partes que siguen a esta vista general.
7.1 es una versión menor sobre Android 7.0. Todo lo que trajo 7.0, desde la multiventana hasta el cifrado por archivo, está en esa nota.
Tres versiones, un nivel de API
| Versión | Fecha | Dispositivos |
|---|---|---|
| 7.1 | Octubre 2016 | Solo Pixel y Pixel XL |
| 7.1.1 | Diciembre 2016 | Pixel, Pixel XL, Nexus 5X, 6P, 6, 9, Nexus Player, Pixel C y General Mobile 4G (Android One). El código llegó a AOSP el mismo día |
| 7.1.2 | Abril 2017 | Pixel, Pixel XL, Pixel C, Nexus 5X, 6P y Nexus Player. Google la describió como una actualización de mantenimiento: correcciones, optimizaciones y algunos cambios para operadores y usuarios |
El Nexus 6 y el Nexus 9 nunca recibieron 7.1.2. Sus últimas imágenes de fábrica son compilaciones de 7.1.1 de octubre de 2017. Con 7.1.2 el Pixel C recibió el Pixel Launcher, los iconos redondos y una cuadrícula de apps recientes pensada para tablet, y todos los dispositivos una pantalla “Battery usage alerts”, según Ars Technica.
Qué trajo
- Accesos directos (app shortcuts). Una pulsación larga en el icono del
launcher muestra acciones que llevan directo a una parte de la app, cada una
respaldada por un intent. Los estáticos van en
res/xml/shortcuts.xml, referenciado desde la actividad del launcher con un<meta-data android:name="android.app.shortcuts">. Los dinámicos se publican en ejecución conShortcutManager(Context.SHORTCUT_SERVICE). La página de Google para 7.1 permitía hasta cinco por app, y algunos launchers muestran menos. - Iconos redondos. Un atributo nuevo,
android:roundIcon. Cuando el launcher pide un icono, el framework devuelveandroid:iconoandroid:roundIconsegún la configuración del dispositivo. El launcher del Pixel usaba el redondo. - Teclados con imágenes. La Commit Content API permite que un teclado envíe un GIF, un sticker o una imagen directamente a un campo de texto. El flujo está en Permisos, porque depende de un permiso sobre una URI. También llegó en la support library 25.0.0 para versiones anteriores.
- Night Light. Tiñe la pantalla de ámbar según un horario o al atardecer. Funciona con el Hardware Composer HAL 2.0 en lugar de un shader de GL, así que necesita soporte del driver. Ian Lake, de Google, explicó que por eso los Nexus no lo tendrían, según Android Police.
- Intent del gestor de almacenamiento.
StorageManager.ACTION_MANAGE_STORAGEabre la pantalla del sistema “Free up space”, para que una app sin espacio deje al usuario liberarlo. - Usuario demo.
UserManager.isDemoUser()le dice a una app que corre en un equipo de exhibición en tienda. AOSP fecha el modo demo para tiendas a nivel de sistema en 7.1.1. - Daydream VR. El modo VR llegó con 7.0. 7.1 añadió
ActivityManager.setVrThread(): un hilo por proceso al que el planificador da prioridad mientras la app está en modo VR. Google presentó su visor Daydream en el mismo evento del 4 de octubre. - Añadidos menores. Paridad de género en los emoji de profesiones (se
comprueba con
Paint.hasGlyph()), URL de contexto y título en los metadatos de fondos animados, llamadas multi-endpoint y tipos de origen de Visual Voicemail para operadores, y las densidades para WearDENSITY_260,DENSITY_300yDENSITY_340.
Lo que era del Pixel, no de Android
Ars Technica listó lo que Google se guardó para el Pixel: el Pixel Launcher con su cajón de apps que se abre deslizando hacia arriba, Google Assistant, la copia ilimitada en calidad original en Google Photos, la pestaña de soporte en Settings y los nuevos botones de navegación. Los Nexus con 7.1.1 recibieron la lista de la plataforma. El Nexus 5X y el 6P tampoco tuvieron el gesto de deslizar en el sensor de huellas para abrir las notificaciones. Android Police informó que su sensor no lo permitía, pero el registro de cambios de Google para 7.1.2 incluye “Fingerprint swipe on 5X/6P”, según Ars Technica.
Seguridad y privacidad
- Sin lista nueva de refuerzos. La página “Security enhancements” de Google tiene una entrada para 7.0 y nada para 7.1. El trabajo de plataforma está en 7.0.
- Actualizaciones sin interrupción. Los Pixel fueron los primeros teléfonos con actualizaciones A/B: dos ranuras de sistema, una se actualiza en segundo plano mientras el teléfono sigue en uso. Si la nueva no arranca, el dispositivo vuelve a la anterior. El CDD de 7.1 añadió que los dispositivos “SHOULD support A/B system updates”; el CDD de 7.0 no lo decía.
- Actualizaciones de Google. Google dijo que los Pixel reciben actualizaciones de software y de seguridad “as soon as they’re available, directly from Google”. Ars Technica señaló que la promesa cubría dos años de actualizaciones mayores del sistema.
- El gestor de almacenamiento puede desinstalar sin aviso. El CDD de 7.1
prohíbe que alguien distinto al instalador de una app la desinstale sin
preguntar, con dos excepciones: el verificador de paquetes y el gestor de
almacenamiento que atiende
ACTION_MANAGE_STORAGE. Esa segunda excepción es nueva en 7.1. - Fin de los parches de seguridad. El boletín de seguridad de octubre de 2019 es el último que incluye 7.1.1 y 7.1.2 entre las versiones de AOSP actualizadas. Desde noviembre de 2019 la versión más antigua listada es 8.0.
Permisos
API 25 no añadió ni quitó ningún permiso. El diff de la API para el paquete
android solo toca R.attr, donde viven los atributos de los accesos directos
y roundIcon. Dos funciones se protegen de otra forma:
- Quién lee los accesos directos. Los de otra app solo los ve el launcher
actual, lo que comprueba
LauncherApps.hasShortcutHostPermission(). Publicar los propios no requiere permiso. - Contenido del teclado. El teclado entrega una URI de contenido, no los
bytes. Activa
INPUT_CONTENT_GRANT_READ_URI_PERMISSION, que desde API 25 da a la app una lectura temporal de esa URI. En 7.0 y anteriores la bandera se ignora y el teclado tiene que conceder el acceso por su cuenta.
Google recomienda que el provider del teclado no se exporte
(android:exported="false") y que conceda permisos sobre URIs
(android:grantUriPermissions="true").
Qué cambió para tu app
Todas las apps en Android 7.1
| Cambio | Qué hacer |
|---|---|
Los launchers pueden pedir android:roundIcon | Incluye android:icon y android:roundIcon. Image Asset Studio genera los dos |
| Una pulsación larga en tu icono puede mostrar accesos directos | Añade estáticos en res/xml/shortcuts.xml, o dinámicos con ShortcutManager |
| Las llamadas de accesos dinámicos tienen límite en segundo plano | Actualízalos en primer plano. El límite se reinicia cuando la app pasa a primer plano |
| Los accesos dinámicos no entran en la copia de seguridad | Vuelve a publicarlos cuando la app se abra por primera vez en un dispositivo nuevo |
| Los teclados pueden enviar imágenes | Declara los tipos MIME con EditorInfoCompat.setContentMimeTypes() y maneja onCommitContent() |
| En API 25 los teclados conceden lectura por URI | En un IME, activa INPUT_CONTENT_GRANT_READ_URI_PERMISSION cuando SDK_INT >= N_MR1 |
| Falta almacenamiento | Lanza ACTION_MANAGE_STORAGE en lugar de fallar |
Apps con target API 25
Google no publicó cambios de comportamiento ligados a apuntar a API 25. Su página de 7.1 no tiene sección de cambios, y el post de la preview solo recomendaba apuntar a 25 para “test your app with compatibility behaviors disabled”. El trabajo es opcional: accesos directos, iconos redondos y contenido enriquecido.
Qué perduró
- Los accesos directos siguen siendo el menú de la pulsación larga. Android
8.0 añadió los accesos fijados con
requestPinShortcut(), y los fijados no tienen límite de cantidad. La mayoría de launchers hoy muestra cuatro a la vez. - Los iconos redondos fueron reemplazados en Android 8.0 por los iconos adaptativos, que cada dispositivo recorta con su propia forma.
- Commit Content tiene sucesor: Google llama a
OnReceiveContentListener, de Android 12, su siguiente versión. También recibe contenido del portapapeles y de arrastrar y soltar. - Las actualizaciones A/B crecieron: A/B por streaming en 8.0, y Virtual A/B reemplazó a la A/B clásica en Android 10.
- Night Light sigue en AOSP, controlado por
ColorDisplayManager. - El modo demo para tiendas se rehízo alrededor de usuarios demo en Android 8.1. AOSP dice ahora que ya no tiene soporte desde 8.1.
Para saber
- El comentario de la constante en AOSP dice
N MR1: Nougat++. - 7.1 conservó el Easter egg de 7.0, Android Neko, el de coleccionar gatos:
PlatLogoActivity.javaes el mismo archivo en las dos etiquetas de versión. - Google ya no garantizaba nuevas versiones al Nexus 6 y al 9 después de octubre de 2016, señaló Ars Technica. Los dos recibieron 7.1.1 de todos modos, y ahí se quedaron.
- En 2016 Ars Technica comprobó que Qualcomm no daba soporte a Nougat en los Snapdragon 800 y 801. El Fairphone 2 usa un 801 y aun así recibió una actualización oficial a 7.1.2 en noviembre de 2018. Fairphone afirma que fue el único teléfono con 801 que dio ese salto.
Android 7.1 Developer Preview 1: API 25 final
19 de octubre de 2016. La primera build de 7.1 para Nexus llegó con la API 25 ya final, así que se podían publicar en Google Play apps con target API 25 ese mismo día.
Leer por separado: Android 7.1 Developer Preview 1: API 25 finalLa Developer Preview 1 llevó Android 7.1 a los Nexus el 19 de octubre de 2016, dos semanas después de que el Pixel saliera con esa versión. Como 7.1 ya estaba en un teléfono a la venta, Google la calificó de “beta quality” y dijo que su objetivo era “to tease out any device-specific issues”.
| Fecha | 19 de octubre de 2016 |
| Build | NPF10C |
| Dispositivos | Nexus 5X, Nexus 6P y Pixel C, por OTA a través de Android Beta |
| Estado de la API | Final: “We’ve finalized the new APIs as API Level 25” |
| Google Play | Abierto a apps compiladas contra la API 25 y, si se quería, con target 25 |
| SDK | Plataforma API 25 e imágenes de emulador en el SDK Manager de Android Studio 2.2.2 |
A diferencia de las previews de Android 7.0, esta no empezó con APIs
inestables. El SDK de la API 25 fue final desde la primera build, así que una
app compilada contra él no necesitaba recompilarse para la versión final.
Google recomendó poner targetSdkVersion en 25 para probar “with
compatibility behaviors disabled”.
La preview traía las funciones para desarrolladores que ya tenía el Pixel:
accesos directos, iconos redondos y teclados con imágenes. La imagen de
emulador Google APIs para la API 25 incluía el Pixel Launcher, para revisar
los iconos redondos. Las imágenes de los dispositivos incluían Messenger y
Google Keyboard, que ya usaban la API de teclados con imágenes. Con ella salió
la support library 25.0.0, que llevó los teclados con imágenes hasta la API 13
y sumó el widget BottomNavigationView.
En un Nexus 5X, 9to5Google encontró también cambios que el Pixel ya tenía para el usuario: un botón más en la fila superior de Quick Settings, con un acceso a Settings al lado, y una pantalla “Moves” con el gesto de doble giro para la cámara. Los iconos redondos no aparecían ahí, ni siquiera con el Pixel Launcher instalado a mano. El 3 de noviembre Google añadió la preview a los dispositivos virtuales de Firebase Test Lab, gratis hasta fin de 2016.
Android 7.1 Developer Preview 2: 7.1.1 RC
22 de noviembre de 2016. La última preview fue una release candidate de Android 7.1.1, sumó el Nexus 9 y trajo la support library 25.0.1. Las APIs no cambiaron.
Leer por separado: Android 7.1 Developer Preview 2: 7.1.1 RCLa Developer Preview 2, del 22 de noviembre de 2016, fue la última preview antes de Android 7.1.1. Google la llamó “a release candidate for Android 7.1.1”, con “near-final system behaviors and UI” y las últimas correcciones.
| Fecha | 22 de noviembre de 2016 |
| Build | NPF26F; NPF26H en el Pixel C |
| Dispositivos | Nexus 5X, Nexus 6P, Nexus 9 y Pixel C |
| Estado de la API | Sin cambios: las funciones de la API 25 “already introduced in Developer Preview 1” |
| Herramientas | Build tools y platform tools nuevas, imágenes de emulador API 25, support library 25.0.1 |
El Nexus 9 fue el dispositivo nuevo. En octubre Google había dicho que la preview llegaría a “other supported devices” antes de terminar, y Android Police informó que el calendario de la preview de Google incluía el Nexus 6 y el Nexus Player en esta build. Ambos quedaron fuera, aunque recibieron la versión final de 7.1.1. El Pixel y el Pixel XL no estaban en el programa beta y esperaron a la versión final.
Las imágenes del Nexus 9 faltaban al principio y aparecieron más tarde ese día, según Android Police. Google publicó imágenes de fábrica de esta build pero no enlaces OTA, según 9to5Google; los dispositivos inscritos la recibieron igual por OTA. El plan de Google no cambió: 7.1.1 para todos los dispositivos compatibles a principios de diciembre, con el código subido a AOSP al mismo tiempo.
Android 7.1.2 Beta 1: una beta de mantenimiento
30 de enero de 2017. Una beta pública de la versión de mantenimiento 7.1.2 para Pixel, Pixel XL, Nexus 5X, Nexus Player y Pixel C. Sin APIs nuevas, y sin el Nexus 6 ni el 9.
Leer por separado: Android 7.1.2 Beta 1: una beta de mantenimientoEl 30 de enero de 2017 Google abrió una beta pública de Android 7.1.2 a través del Android Beta Program. Google describió 7.1.2 como “an incremental maintenance release focused on refinements”: correcciones, optimizaciones y “a small number of enhancements for carriers and users”. Siguió en la API 25, sin APIs nuevas para desarrolladores.
| Fecha | 30 de enero de 2017 |
| Build | NPG05D; NPG05E en el Pixel y el Pixel XL |
| Dispositivos | Pixel, Pixel XL, Nexus 5X, Nexus Player y Pixel C |
| Estado | Aprobada por el Compatibility Test Suite (CTS), así que apps como Android Pay funcionaban |
El Nexus 6P no estaba en esta build. Google dijo que preparaba “an update for Nexus 6P that we expect to release soon”. El Nexus 6 y el Nexus 9 no figuraban ni en la beta ni en la versión final, y 9to5Google señaló que era la primera versión que dejaba fuera al Nexus 6.
Las notas de versión de Google listaban problemas conocidos: Quick Settings podía desaparecer en el Pixel C, el Pixel Launcher podía cerrarse al buscar con un teclado físico conectado, y había bloqueos de la interfaz e inestabilidad del Wi-Fi. 9to5Google informó después que esta build llevó al Nexus 5X el gesto del Pixel de deslizar sobre el sensor de huellas para abrir las notificaciones. Google prometió la versión final “in just a couple of months”.
Android 7.1.2 Beta 2: llega el Nexus 6P
Marzo de 2017. La segunda beta de 7.1.2, build NPG47I, llegó también al Nexus 6P, con el parche de seguridad de marzo y el gesto en el sensor de huellas. Google no la anunció.
Leer por separado: Android 7.1.2 Beta 2: llega el Nexus 6PLa segunda beta de Android 7.1.2 llegó sin un post de Google. Su build,
NPG47I, aparece en la página de descarga de la beta pública de 7.1.2 de
Google para Nexus 5X, Nexus 6P, Pixel C, Nexus Player, Pixel y Pixel XL. La
fecha viene de la prensa: 9to5Google informó del despliegue el 20 de marzo de 2017.
| Fecha | 20 de marzo de 2017, según 9to5Google; Google no dio fecha |
| Build | NPG47I en todos los dispositivos |
| Dispositivos | Pixel, Pixel XL, Nexus 5X, Nexus 6P, Nexus Player y Pixel C |
| Parche de seguridad | Marzo de 2017, según 9to5Google |
Esta vez el Nexus 6P estuvo en la primera tanda. Había recibido la primera beta apenas unas tres semanas antes, señaló 9to5Google. La Beta 2 le dio el gesto del Pixel en el sensor de huellas, en Settings > “Moves”. 9to5Google también vio una línea “Powered by Android” en la pantalla de arranque del Pixel. En el Pixel C mostró el Pixel Launcher, los botones de navegación blancos del Pixel y una nueva cuadrícula de apps recientes, todavía sin terminar: no se podían descartar apps deslizándolas.
Para los desarrolladores no cambió nada. La versión final de 7.1.2 llegó a principios de abril de 2017, y está en la vista general de arriba.