Android 7.0 Nougat es la versión que puso dos apps en la pantalla de un
teléfono. Los usuarios recibieron la multiventana en pantalla dividida,
respuestas escritas dentro de la notificación y un Doze que también actúa con
el teléfono en movimiento. Los desarrolladores recibieron el cifrado por
archivo con Direct Boot, una configuración de seguridad de red declarativa y un
crash para las apps que todavía comparten URIs file://.

De un vistazo
| Versión | Android 7.0 |
| Nivel de API | 24 |
| Nombre | Nougat, público |
Build.VERSION_CODES | N |
| APIs y SDK finales | 15 de junio de 2016 |
| Lanzamiento | Despliegue en Nexus desde el 22 de agosto de 2016 |
| Dispositivo de lanzamiento | LG V20, el primer teléfono nuevo que salió con Nougat |
| Plazo de target API en Google Play | Ninguno. La regla de target API de Play empezó en 2018, con API 26 |
Google declaró finales las APIs de N el 15 de junio de 2016 y avisó que ya se podían publicar actualizaciones que compilaran contra API 24, y opcionalmente la tuvieran como target. El 22 de agosto Dave Burke anunció el despliegue “starting with Nexus devices”: en varias semanas, a Nexus 6, 5X, 6P, 9, Nexus Player, Pixel C y General Mobile 4G (Android One). Ese mismo día el código llegó a AOSP y Ars Technica publicó su reseña.
La primera vista previa para desarrolladores salió el 9 de marzo de 2016. Burke la llamó “early… really early”, y el nuevo Android Beta Program la entregó por OTA a los mismos Nexus y al Pixel C. Sus cinco vistas previas para desarrolladores, de marzo a julio, siguen a esta vista general como partes, de la Developer Preview 1 a la Developer Preview 5. En el lanzamiento también pasó Nougat a “a new regular maintenance schedule over the coming quarters”. Los teléfonos con Snapdragon 800 y 801 de Qualcomm, que movían casi todos los modelos de gama alta de fines de 2013 a fines de 2014, quedaron fuera: Ars Technica concluyó que una actualización oficial a Nougat era “very difficult if not completely impossible” para ellos.
Qué trajo
- Multiventana. Dos apps corren lado a lado o una sobre otra en teléfonos y tablets. Ars Technica describe el gesto: pulsación larga en el botón de recientes y luego se elige la segunda app. Android TV recibió picture-in-picture, y el usuario puede arrastrar y soltar contenido entre las dos apps.
- Notificaciones. Direct Reply pone un campo de texto dentro de la
notificación. Las notificaciones agrupadas juntan varias alertas de una
misma app.
MessagingStyleordena las conversaciones. Una pulsación larga sobre una notificación abre sus controles. - Doze en movimiento. Doze, que llegó en Android 6.0 Marshmallow, ahora funciona en dos niveles. El primero se aplica siempre que la pantalla está apagada y el teléfono desenchufado, aunque esté en un bolsillo.
- JIT/AOT guiado por perfiles. ART sumó un compilador JIT que registra los métodos más usados de cada app. Los compila por adelantado solo cuando el dispositivo está inactivo y cargando. Google dice que apps grandes que tardaban minutos en optimizarse en 6.0 ahora se instalan “in just a matter of seconds”.
- Vulkan. La API 3D de bajo costo está en el NDK, en el hardware que la
soporta. El CDD obliga a todo dispositivo a incluir
libvulkan.so; uno sin Vulkan devuelve cero dispositivos envkEnumeratePhysicalDevices. - Data Saver. Un interruptor que bloquea los datos en segundo plano en
redes medidas. Las apps lo leen con
ConnectivityManager.getRestrictBackgroundStatus()y escuchanACTION_RESTRICT_BACKGROUND_CHANGED. - API de mosaicos de Quick Settings. Las apps agregan mosaicos con
TileServicey la claseTile. El usuario puede reordenarlos. - “Display size”. Con este ajuste el usuario escala toda la interfaz, no solo el
texto, hasta un ancho mínimo de
sw320dp. - OpenJDK y Java 8. Las bibliotecas
java.*base ahora vienen de OpenJDK en lugar de Apache Harmony. Ellibcorede AOSP enandroid-7.0.0_r1tiene un árbolojlunique 6.0.1 no tiene. Con el toolchain Jack, las lambdas funcionan hasta Gingerbread; los métodos de interfaz por defecto y estáticos y los streams requieren API 24. - Emoji. Nougat soporta Unicode 9, con 72 emoji nuevos según Ars Technica,
y es la primera versión con modificadores de tono de piel. Las apps
comprueban que un glifo existe con
Paint.hasGlyph()antes de insertarlo; los teclados deberían ofrecer los tonos de piel. - Otros añadidos. Varios idiomas a la vez con
LocaleList, un subconjunto de ICU4J enandroid.icu, bloqueo de números (BlockedNumberContract), filtrado de llamadas (CallScreeningService), OpenGL ES 3.2, el modo VR, la ayuda de atajos de teclado, punteros personalizados, la API Frame Metrics y Chrome como proveedor de WebView.
Seguridad y privacidad
- Cifrado por archivo. Los archivos se cifran uno por uno en lugar de como un único dispositivo de bloques, lo que aísla mejor a cada usuario y perfil. El CDD de 7.0 dice que los dispositivos “SHOULD” cumplir el requisito de cifrado con FBE.
- Direct Boot. Se apoya en FBE. Tras un reinicio el teléfono llega a la
pantalla de bloqueo, y las alarmas, los mensajes y los servicios de
accesibilidad marcados con
android:directBootAwarecorren antes de que el usuario desbloquee. Solo ven el almacenamiento cifrado por dispositivo; el cifrado por credencial se abre al desbloquear. - Verified Boot estricto. Android 7.0 aplica Verified Boot de forma estricta, así que un dispositivo comprometido no arranca. También corrige la corrupción accidental de datos.
- Actualizaciones sin interrupción. En algunos dispositivos nuevos, dos copias de las particiones del sistema (slots A y B) permiten instalar una actualización en segundo plano. Si el slot nuevo no arranca, el dispositivo vuelve al anterior. Ars Technica aclara que solo funciona en dispositivos que salen de fábrica con 7.0 o posterior.
- Pila multimedia dividida. Tras Stagefright, mediaserver se partió en
varios procesos. El análisis de
libstagefrightcorre en un sandbox mediacodec con muy pocos permisos. Solocameraserveraccede a la cámara y soloaudioservera Bluetooth. La detección de desbordamiento de enteros cubre toda la pila multimedia. - CA de confianza. Las apps con target API 24 confían solo en el almacén de CA del sistema. Los certificados que instala el usuario o un administrador del dispositivo se ignoran salvo que la app lo permita. Todo dispositivo compatible trae el mismo conjunto de CA de AOSP.
- Configuración de seguridad de red. Un archivo XML, referenciado con
android:networkSecurityConfig, define las CA de confianza por dominio, las reglas de tráfico en claro, los pines de certificados y excepciones solo para depuración. - Otros cambios. APK Signature Scheme v2 firma el archivo completo y se verifica más rápido. La atestación de claves prueba que una clave vive en hardware. Seccomp pasó a ser requisito del CDD, el kernel ganó memoria de solo lectura y acceso restringido al espacio de usuario, y el orden de carga de bibliotecas se aleatoriza.
Permisos
No llegaron permisos peligrosos nuevos. Los cambios tocan los archivos y el acceso acotado.
- Nuevos.
BIND_QUICK_SETTINGS_TILE,BIND_SCREENING_SERVICE,BIND_VR_LISTENER_SERVICEyBIND_CONDITION_PROVIDER_SERVICE. Protegen servicios a los que se conecta el sistema. - Eliminado.
FLASHLIGHTsalió del SDK. - Acceso acotado a carpetas.
StorageVolume.createAccessIntent()pide una sola carpeta, comoPictures, en lugar de todoREAD_EXTERNAL_STORAGE. El usuario la permite o la niega en un diálogo. - Archivos privados. En las apps con target API 24, el directorio privado
tiene permisos
0700.MODE_WORLD_READABLEyMODE_WORLD_WRITEABLElanzanSecurityException. Qué hacer está en la sección siguiente. - Números bloqueados. Solo la app de teléfono predeterminada, la de SMS predeterminada y las apps del operador pueden leer o escribir la lista.
- Trazas de métodos.
Debug.startMethodTracing()escribe en el directorio propio de la app en el almacenamiento compartido, así que ya no necesitaWRITE_EXTERNAL_STORAGE. - Copia de seguridad. Android Backup ahora incluye los permisos otorgados en ejecución, según la lista de funciones de Nougat de Google.
Qué cambió para tu app
Todas las apps en Android 7.0
| Cambio | Qué hacer |
|---|---|
| El primer nivel de Doze actúa con el teléfono en movimiento | Sigue la guía de Doze de 6.0; usa Firebase Cloud Messaging para los mensajes |
Desaparecen Camera.ACTION_NEW_PICTURE y ACTION_NEW_VIDEO | Vigila los medios con un job de JobScheduler y JobInfo.Builder.addTriggerContentUri() |
| Las bibliotecas privadas del NDK fuera de una lista corta no cargan | Usa las APIs públicas del NDK o incluye tu propia copia |
libcutils, libcrypto, libssl, libandroid_runtime | Cargan con una advertencia solo si tu target es 23 o menor; inclúyelas ya |
| Cambiar el tamaño de pantalla mata apps en segundo plano con target ≤23 | Restaura el estado bien al volver desde recientes |
| Se desactivan las suites de cifrado RC4 | Activa TLS 1.2, AES-GCM y ECDHE en el servidor |
| Escribir en un socket TCP desde el hilo principal lanza excepción | Saca el trabajo de red del hilo principal |
| Se respeta la visibilidad de las anotaciones | Agrega @Retention(RetentionPolicy.RUNTIME) a las anotaciones que lees en ejecución |
| Apps con target 23 o menor en pantalla dividida | Las redimensionables se fuerzan a cambiar de tamaño con un aviso; las de orientación fija ocupan toda la pantalla |
Apps con target API 24
| Cambio | Qué hacer |
|---|---|
Las URIs file:// que salen de la app lanzan FileUriExposedException | Comparte una URI content:// de FileProvider con un permiso temporal |
CONNECTIVITY_ACTION ya no llega a los receivers del manifiesto | Regístralo en ejecución con registerReceiver() o programa el trabajo con JobScheduler |
| No se confía en las CA agregadas por el usuario | Permítelas con una configuración de seguridad de red, o usa debug-overrides para un proxy de depuración |
El directorio privado es 0700; MODE_WORLD_* lanza excepción | Comparte archivos con FileProvider |
DownloadManager.COLUMN_LOCAL_FILENAME lanza SecurityException | Abre la descarga con ContentResolver.openFileDescriptor() |
| Las bibliotecas privadas de la lista temporal también fallan | Inclúyelas en el APK o pasa a las APIs del NDK |
| Las actividades son redimensionables por defecto | Prueba en pantalla dividida, o usa android:resizeableActivity="false" |
Desaparecen el proveedor Crypto y SHA1PRNG | Deriva claves con una función de derivación de claves real |
TransactionTooLargeException se relanza como RuntimeException | Mantén pequeño onSaveInstanceState() |
Cambió el serialVersionUID por defecto de algunas clases | Declara serialVersionUID de forma explícita |
Qué perduró
- La multiventana creció: Android 8.0 llevó picture-in-picture a los teléfonos, y Android 10 mantiene reanudadas todas las actividades visibles, donde 7.0 solo reanudaba la última que se tocó.
- Los límites en segundo plano se endurecieron en Android 8.0. Las apps con target API 26 ya no pueden declarar en el manifiesto receivers para la mayoría de los broadcasts implícitos.
- La configuración de seguridad de red sigue siendo el lugar para las reglas de confianza. Desde Android 9, las apps con target API 28 bloquean el tráfico en claro por defecto.
- El cifrado por archivo pasó a ser obligatorio en los dispositivos que salen con Android 10. En 7.0 a 8.1 no podía combinarse con el almacenamiento adoptable.
- Las actualizaciones A/B ganaron streaming en Android 8.0, y Virtual A/B reemplazó el esquema original en Android 10.
- Jack tampoco duró. En marzo de 2017 Google lo declaró obsoleto y llevó
el soporte de Java 8 a las herramientas estándar
javacydx. - El acceso acotado a carpetas no duró.
createAccessIntent()quedó obsoleto en API 29 y devuelveRESULT_CANCELEDen Android 10.
Para saber
- La constante
Nen AOSP lleva el comentarioN is for ¯\_(ツ)_/¯. - Dentro de Google, N era “New York Cheesecake”, según Android Police en marzo
de 2016. El historial de AOSP en la etiqueta de 7.0 muestra las iniciales en
ramas como
nyc-devynyc-release. - Google pidió nombres al público en android.com con
#NameAndroidN, con envíos hasta el 8 de junio de 2016. Fue una convocatoria de sugerencias, no una votación. Google se reservó la decisión y anunció Nougat el 30 de junio de 2016. - El Easter egg es Android Neko, un coleccionista de gatos. Toca tres veces seguidas “Android version” en Ajustes, toca el logo cinco veces y luego mantenlo pulsado. Un toast muestra un gato: se activó un mosaico oculto de Quick Settings.
- El mosaico llena un plato con Bits, Fish, Chicken o un Treat. Un job de
JobSchedulercorre a los 15, 30, 60 o 120 minutos, y una notificación dice “A cat is here.” Mejor comida hace más probable un gato nuevo que uno que vuelve: 5 % con Bits, 90 % con un Treat.
Android N Developer Preview 1: adelantada
9 de marzo de 2016. La primera build de Android N salió meses antes de lo habitual, con multiventana, Direct Reply, notificaciones agrupadas y el nuevo Android Beta Program.
Leer por separado: Android N Developer Preview 1: adelantadaGoogle publicó la primera Developer Preview de Android N el 9 de marzo de 2016, dos meses antes de Google I/O, donde se habían presentado las vistas previas anteriores. Dave Burke explicó el motivo: una build más temprana deja más tiempo para el feedback de los desarrolladores y permite entregar la versión final a los fabricantes en verano.
| Fecha | 9 de marzo de 2016 |
| Builds | NPC56P, NPC56R; actualizadas luego a NPC56W, NPC56X |
| Dispositivos | Nexus 6, 5X, 6P, 9, Nexus Player, Pixel C, General Mobile 4G (Android One) y el emulador del SDK |
| Estado | Solo para desarrolladores; sin aprobación CTS, así que las apps que la exigen (Android Pay) no funcionaban |
Ese mismo día Google abrió el Android Beta Program en g.co/androidbeta. Al
inscribir un dispositivo compatible, la vista previa llegaba por OTA y se
mantenía actualizada, sin flashear nada a mano.
Lo que abrió la primera vista previa
- Multiventana. Las apps con target N declaran
android:resizableActivitypara correr en pantalla dividida. Un cambio de tamaño se comporta como una rotación: la actividad maneja el cambio de configuración o se recrea. Las apps de TV obtienen picture-in-picture conandroid:supportsPictureInPicture. - Notificaciones. La API
RemoteInputde Android Wear ahora funciona en teléfonos y tablets, y el usuario responde desde el panel.Notification.Builder.setGroup()agrupa las notificaciones de una app. - Doze ahora también ahorra batería cada vez que la pantalla se apaga, no
solo con el dispositivo quieto.
JobSchedulerpuede reaccionar a cambios en un content provider. - Java 8. El compilador Jack lleva las lambdas a Android hasta Gingerbread; los métodos default y static de interfaces y los streams requieren N.
- Compilador JIT. El post de Google en I/O nombró después el nuevo compilador JIT como un cambio de la primera vista previa: instalaciones más rápidas y menos almacenamiento que compilar todo por adelantado.
Las notas de versión de Google la declararon no apta para uso diario: lenta a ratos, con peor batería y algunas apps, incluidas las de Google, sin funcionar.
Android N Developer Preview 2: llega Vulkan
13 de abril de 2016. La segunda vista previa integró Vulkan a la plataforma, sumó atajos del launcher y emoji de Unicode 9, y corrigió bugs reportados en la primera.
Leer por separado: Android N Developer Preview 2: llega VulkanLa Developer Preview 2 salió el 13 de abril de 2016, builds NPC91K y
NPC91O, para los mismos dispositivos que la primera; el Nexus Player la
recibió varios días después. Los dispositivos del Android Beta Program la
recibieron por OTA. Seguía exigiendo Android Studio 2.1 y seguía sin ser apta
para uso diario.
Lo que sumó la Developer Preview 2
- Vulkan pasó a ser parte de la plataforma: una API 3D de bajo overhead que Google ayudó a desarrollar en Khronos. Google dijo que algunos benchmarks sintéticos lograban hasta 10 veces el rendimiento de draw calls en un núcleo frente a OpenGL ES.
- Atajos del launcher.
ShortcutManager.setDynamicShortcuts()yaddDynamicShortcut()permitían a una app publicar intents hacia pantallas concretas. Esta API no sobrevivió: ver las Developer Preview 3 y 4. - Emoji. Glifos de Unicode 9, tonos de piel y un diseño nuevo, más humano,
para los emoji de personas. Las apps comprueban un glifo con
Paint.hasGlyph(). - Multiventana sumó un alto mínimo y un ancho mínimo separados para una actividad, y varios nombres de su API cambiaron.
También corrigió bugs reportados en la Preview 1, entre ellos redes Wi-Fi ocultas que no conectaban (AOSP 203116), YouTube que se pausaba al cambiar el foco en multiventana (203424) y Direct Reply cerrando una actividad abierta (204411).
Android N Developer Preview 3: calidad beta
18 de mayo de 2016, en Google I/O. La primera build de N con calidad beta, apta para el teléfono principal, sumó VR Mode y FrameMetrics y postergó los atajos del launcher.
Leer por separado: Android N Developer Preview 3: calidad betaGoogle anunció la Developer Preview 3 en Google I/O el 18 de mayo de 2016 como
“our first beta-quality candidate, available to test on your primary phone or
tablet”. La build NPD35K tenía aprobación CTS en Nexus 5X, 6, 6P y Pixel C,
así que las apps que la exigen, como Android Pay, funcionaban. Llegó a todos
los dispositivos compatibles y al Sony Xperia Z3 (D6603 y D6653).
Lo que sumó la Developer Preview 3
- VR Mode: un núcleo de CPU exclusivo para apps de VR, seguimiento de cabeza, notificaciones estereoscópicas y gráficos de baja latencia. Google midió una latencia de movimiento a fotón menor a 20 ms en un Nexus 6P.
- Modo de rendimiento sostenido: indicaciones del dispositivo para apps que corren mucho tiempo a un nivel estable. En esta vista previa solo se podía probar en el Nexus 6P.
- API FrameMetrics: un listener que transmite los tiempos de cada frame de la ventana de la app, para medir el rendimiento de la UI en producción sin USB.
- Keyboard Shortcuts helper: Meta+/ lista los atajos del sistema y de la app.
- WebView multiproceso tras una opción de desarrollador: el contenido web corre en un proceso aislado aparte desde WebView 51.
Cambios de comportamiento en la Developer Preview 3
- Atajos del launcher postergados. Google sacó la función de N y avisó que
ShortcutManagerdejaría la API pública en la siguiente vista previa. - WebView, para apps con target N: el contexto de JavaScript se reinicia en cada carga de página, y la geolocalización solo funciona en orígenes seguros (HTTPS).
- Data Saver: las apps pueden abrir un diálogo del sistema que las agrega a la lista de exenciones de Data Saver.
- Bloqueo de números por un llamador no autorizado ahora lanza
SecurityExceptionen lugar deUnsupportedOperationException. - Los tiles de Quick Settings toman su modo del metadato
TileService.META_DATA_ACTIVE_TILEen lugar del valor que devuelveonTileAdded().
Android N Developer Preview 4: APIs finales
15 de junio de 2016. El nivel de API 24 quedó final con el SDK de N, las apps podían publicarse en Google Play y los atajos del launcher salieron de la API pública.
Leer por separado: Android N Developer Preview 4: APIs finalesLa Developer Preview 4, build NPD56N, salió el 15 de junio de 2016 con el
SDK final de Android N. Todas las APIs eran finales y el nivel de API era 24.
Desde ese día se podían publicar en Google Play, en los canales alpha, beta y
producción, apps compiladas contra API 24 y opcionalmente con API 24 como
target. Requería Android Studio 2.1.2 o superior, y la Support Library 24.0.0
llevaba las APIs de multiventana, notificaciones y Direct Boot a versiones
anteriores.
Lo que cambió la Developer Preview 4
- Atajos del launcher eliminados. Como se anunció con la Preview 3, las
APIs de
ShortcutManagersalieron de la API pública. - Atributos de multiventana renombrados:
android:minimalHeightyandroid:minimalWidthpasaron a serandroid:minHeightyandroid:minWidth. - Escaneo Bluetooth LE: una app que inicia y detiene escaneos más de cinco veces en 30 segundos queda bloqueada, y los escaneos largos pasan a ser oportunistas.
- Los recursos de idioma se negocian por cada objeto de recurso, en lugar de que la app arranque con todos sus recursos de idioma cargados.
La aprobación CTS cubría Nexus 5X, 6, 6P y Pixel C. La vista previa llegó a todos los dispositivos compatibles, incluido el Sony Xperia Z3.
Android N Developer Preview 5: casi final
18 de julio de 2016. La última vista previa, ya llamada Android 7.0 Nougat, trajo imágenes de sistema casi finales para terminar las pruebas antes del despliegue de agosto.
Leer por separado: Android N Developer Preview 5: casi finalLa Developer Preview 5, build NPD90G, salió el 18 de julio de 2016, “the
last milestone of this preview series”. Es la primera vista previa que el blog
de Google anunció con el nombre Android 7.0 Nougat. No sumó APIs: eran finales
desde la Preview 4. Trajo imágenes de sistema casi finales y un emulador para
las pruebas finales, además de correcciones en el sistema y en las apps
preinstaladas.
La aprobación CTS ahora incluía el Nexus 9, además de 5X, 6, 6P y Pixel C. Las notas de versión de Google listan Nexus 5X, 6, 6P, 9, Nexus Player, Pixel C y General Mobile 4G; el Sony Xperia Z3, que tuvo las Previews 3 y 4, no aparece. Google pidió probar los cambios de comportamiento de Nougat (Doze on the go, optimizaciones en segundo plano, zoom de pantalla, permisos) y publicar las actualizaciones con API 24. El despliegue público empezó cinco semanas después, el 22 de agosto.