<CarlosDev/>

Actual

Android 7.0 Nougat: dos apps en una pantalla

API 24, agosto de 2016. Multiventana en pantalla dividida, Doze en el bolsillo, cifrado por archivo con Direct Boot y apps que dejan de confiar en las CA del usuario.

Publicado
Lectura
18 min
Redacción
Estable
Serie
Parte 6 de 19 · Android, versión por versión
Banner de Android 7.0 Nougat, con el logo de la versión.
En este registro12 secciones

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://.

La pantalla de inicio de Android 7.0: una barra de búsqueda de Google arriba, un fondo rosa y violeta con la silueta de una montaña, los íconos de Google, Create, Play y Play Store, y un dock con Teléfono, Mensajes, el cajón de apps, Chrome y Cámara sobre los botones de atrás, inicio y recientes
La pantalla de inicio de Android 7.0 con el fondo predeterminado de Nougat. Wikimedia Commons · Apache License 2.0

De un vistazo

VersiónAndroid 7.0
Nivel de API24
NombreNougat, público
Build.VERSION_CODESN
APIs y SDK finales15 de junio de 2016
LanzamientoDespliegue en Nexus desde el 22 de agosto de 2016
Dispositivo de lanzamientoLG V20, el primer teléfono nuevo que salió con Nougat
Plazo de target API en Google PlayNinguno. 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. MessagingStyle ordena 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.
quieto un tiempo pantalla encendida o enchufado pantalla encendida o enchufado Pantalla apagada, desenchufado Primer nivel: sin red, jobs y sincronizaciones en espera Segundo nivel: también wake locks, alarmas, GPS y escaneos Wi-Fi Vuelta a la normalidad
  • 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 en vkEnumeratePhysicalDevices.
  • Data Saver. Un interruptor que bloquea los datos en segundo plano en redes medidas. Las apps lo leen con ConnectivityManager.getRestrictBackgroundStatus() y escuchan ACTION_RESTRICT_BACKGROUND_CHANGED.
  • API de mosaicos de Quick Settings. Las apps agregan mosaicos con TileService y la clase Tile. 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. El libcore de AOSP en android-7.0.0_r1 tiene un árbol ojluni que 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 en android.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:directBootAware corren 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 libstagefright corre en un sandbox mediacodec con muy pocos permisos. Solo cameraserver accede a la cámara y solo audioserver a 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_SERVICE y BIND_CONDITION_PROVIDER_SERVICE. Protegen servicios a los que se conecta el sistema.
  • Eliminado. FLASHLIGHT salió del SDK.
  • Acceso acotado a carpetas. StorageVolume.createAccessIntent() pide una sola carpeta, como Pictures, en lugar de todo READ_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_READABLE y MODE_WORLD_WRITEABLE lanzan SecurityException. 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 necesita WRITE_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

CambioQué hacer
El primer nivel de Doze actúa con el teléfono en movimientoSigue la guía de Doze de 6.0; usa Firebase Cloud Messaging para los mensajes
Desaparecen Camera.ACTION_NEW_PICTURE y ACTION_NEW_VIDEOVigila los medios con un job de JobScheduler y JobInfo.Builder.addTriggerContentUri()
Las bibliotecas privadas del NDK fuera de una lista corta no carganUsa las APIs públicas del NDK o incluye tu propia copia
libcutils, libcrypto, libssl, libandroid_runtimeCargan 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 ≤23Restaura el estado bien al volver desde recientes
Se desactivan las suites de cifrado RC4Activa TLS 1.2, AES-GCM y ECDHE en el servidor
Escribir en un socket TCP desde el hilo principal lanza excepciónSaca el trabajo de red del hilo principal
Se respeta la visibilidad de las anotacionesAgrega @Retention(RetentionPolicy.RUNTIME) a las anotaciones que lees en ejecución
Apps con target 23 o menor en pantalla divididaLas 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

CambioQué hacer
Las URIs file:// que salen de la app lanzan FileUriExposedExceptionComparte una URI content:// de FileProvider con un permiso temporal
CONNECTIVITY_ACTION ya no llega a los receivers del manifiestoRegístralo en ejecución con registerReceiver() o programa el trabajo con JobScheduler
No se confía en las CA agregadas por el usuarioPermí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ónComparte archivos con FileProvider
DownloadManager.COLUMN_LOCAL_FILENAME lanza SecurityExceptionAbre la descarga con ContentResolver.openFileDescriptor()
Las bibliotecas privadas de la lista temporal también fallanInclúyelas en el APK o pasa a las APIs del NDK
Las actividades son redimensionables por defectoPrueba en pantalla dividida, o usa android:resizeableActivity="false"
Desaparecen el proveedor Crypto y SHA1PRNGDeriva claves con una función de derivación de claves real
TransactionTooLargeException se relanza como RuntimeExceptionMantén pequeño onSaveInstanceState()
Cambió el serialVersionUID por defecto de algunas clasesDeclara serialVersionUID de forma explícita
file:// content:// de FileProvider Enviar una foto a otra app ¿Qué URI? FileUriExposedException Intent con FLAG_GRANT_READ_URI_PERMISSION La otra app la lee

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 javac y dx.
  • El acceso acotado a carpetas no duró. createAccessIntent() quedó obsoleto en API 29 y devuelve RESULT_CANCELED en Android 10.

Para saber

  • La constante N en AOSP lleva el comentario N 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-dev y nyc-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 JobScheduler corre 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.

Parte 1 de 5

2 min

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: adelantada

Google 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.

Fecha9 de marzo de 2016
BuildsNPC56P, NPC56R; actualizadas luego a NPC56W, NPC56X
DispositivosNexus 6, 5X, 6P, 9, Nexus Player, Pixel C, General Mobile 4G (Android One) y el emulador del SDK
EstadoSolo 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:resizableActivity para 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 con android:supportsPictureInPicture.
  • Notificaciones. La API RemoteInput de 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. JobScheduler puede 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.

Parte 2 de 5

1 min

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 Vulkan

La 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() y addDynamicShortcut() 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).

Parte 3 de 5

2 min

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 beta

Google 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 ShortcutManager dejarí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 SecurityException en lugar de UnsupportedOperationException.
  • Los tiles de Quick Settings toman su modo del metadato TileService.META_DATA_ACTIVE_TILE en lugar del valor que devuelve onTileAdded().

Parte 4 de 5

1 min

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 finales

La 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 ShortcutManager salieron de la API pública.
  • Atributos de multiventana renombrados: android:minimalHeight y android:minimalWidth pasaron a ser android:minHeight y android: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.

Parte 5 de 5

1 min

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 final

La 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.

Clasificado en

Citas

49

Referencias externas