<CarlosDev/>

Actual

Android 9 Pie: sin cámara ni micro en reposo

API 28, agosto de 2018. Las apps inactivas perdieron cámara, micrófono y sensores, el HTTP sin cifrar pasó a ser opcional y una píldora reemplazó al botón de inicio.

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

Android 9 Pie es la versión que dejó a las apps inactivas sin cámara, sin micrófono y sin sensores. Las apps con target API 28 perdieron el HTTP sin cifrar por defecto, y las llamadas a APIs ocultas de la plataforma empezaron a fallar. Los usuarios recibieron un botón de inicio en forma de píldora con navegación por deslizamiento, Adaptive Battery y el último nombre de postre que Google usó en público.

La pantalla de inicio de Android 9 con el Pixel Launcher: la fecha y el clima arriba, un fondo azul, un dock con Teléfono, Mensajes, Play Store, Chrome y Cámara, una barra de búsqueda de Google y abajo un único botón de inicio en forma de píldora, sin botón de atrás ni de recientes
La pantalla de inicio de Android 9, donde la píldora es el único botón de navegación. Wikimedia Commons · Apache License 2.0

De un vistazo

VersiónAndroid 9
Nivel de API28
NombrePie, público
Build.VERSION_CODESP
LanzamientoDespliegue en Pixel y código en AOSP, 6 de agosto de 2018
Dispositivos de lanzamientoPixel, Pixel XL, Pixel 2 y Pixel 2 XL por actualización; Pixel 3 y Pixel 3 XL llegaron con él
Plazo de target API en Google PlayApps nuevas desde agosto de 2019, actualizaciones desde noviembre de 2019

La primera vista previa para desarrolladores salió el 7 de marzo de 2018; los cinco hitos de la preview son las partes debajo de este resumen. La beta llegó el 8 de mayo, durante Google I/O, y gracias a Project Treble también funcionó en teléfonos de Essential, Nokia, Oppo, Sony, Vivo y Xiaomi.

El 6 de agosto de 2018 Google publicó el código en AOSP y empezó la actualización por aire a los teléfonos Pixel. 9to5Google informó ese mismo día que las imágenes para Pixel y Pixel 2 ya estaban disponibles, con el parche de seguridad de agosto. Essential empezó a enviar la versión final al Essential Phone ese mismo día. Google prometió la actualización antes del fin del otoño para los dispositivos de la beta de Sony, Xiaomi, HMD Global, Oppo, Vivo, OnePlus y Essential, y para los Android One que calificaran. AOSP registra las primeras compilaciones de Pie para Pixel 3 y Pixel 3 XL (PD1A) con el nivel de parche de septiembre de 2018. Los boletines de seguridad de AOSP incluyeron Android 9 por última vez en enero de 2022; desde febrero de 2022 cubren Android 10 y posteriores.

Qué trajo

  • Nueva navegación del sistema. Un único botón de inicio en forma de píldora: deslizar hacia arriba abre un Overview nuevo con vistas previas a pantalla completa, y un toque vuelve al inicio. Venía desactivada, en Settings > Gestures > “Swipe up on home button”. Atrás siguió siendo un botón, oculto en la pantalla de inicio.
  • Adaptive Battery. Hecha con DeepMind, usa aprendizaje automático para dar los recursos del sistema a las apps que más le importan al usuario. Debajo están los App Standby Buckets, explicados en Qué cambió para tu app.
  • Soporte para recortes de pantalla. DisplayCutout y getDisplayCutout() indican dónde está el notch. El atributo de ventana layoutInDisplayCutoutMode acepta DEFAULT, SHORT_EDGES o NEVER. Las opciones de desarrollador pueden simular un recorte en cualquier dispositivo. El CDD de 9 solo admite recortes en los bordes cortos, como máximo uno por borde.
  • Cambios menores para el usuario. Un botón de rotación en la barra de navegación cuando la rotación automática está apagada, un editor de capturas, una lupa al seleccionar texto, controles de volumen simplificados y Adaptive Brightness. El reloj pasó a la izquierda de la barra de estado para dejar sitio al notch, y los mosaicos de ajustes rápidos perdieron sus paneles desplegables: una pulsación larga abre el ajuste, como señaló Ars Technica.
  • Notificaciones. MessagingStyle recibe un Person, muestra imágenes con setData(), guarda borradores de respuesta (EXTRA_REMOTE_INPUT_DRAFT) y ofrece respuestas sugeridas con RemoteInput.setChoices(). Los usuarios pueden bloquear grupos de canales completos.
  • API multicámara. Las apps pueden abrir a la vez flujos de dos o más cámaras físicas, o una cámara lógica que alterna entre ellas. Las cámaras USB externas funcionan con Camera2 en los dispositivos que lo soportan.
  • Multimedia e imágenes. ImageDecoder reemplaza a BitmapFactory, y AnimatedImageDrawable reproduce GIF y WebP. Se sumaron la codificación HEIF, HDR VP9 Profile 2 y un efecto de audio de Dynamics Processing.
  • Wi-Fi RTT. Con hardware compatible, las apps con ACCESS_FINE_LOCATION miden la distancia a puntos de acceso IEEE 802.11mc sin conectarse. Con tres o más, la posición suele quedar a 1 o 2 metros.
  • Aprendizaje automático y texto. Neural Networks API 1.1 con nueve operaciones nuevas, Smart Linkify sobre TextClassifier, PrecomputedText, y Slices y App Actions para mostrar contenido de las apps en superficies de Google.
  • ART y trazas. El compilador anticipado de ART convierte los archivos DEX de una app a una forma más compacta, así las apps arrancan antes y usan menos disco y RAM; los dispositivos de gama baja son los que más ganan. Las trazas del sistema se pueden grabar en el propio dispositivo y compartir como informe, también en HTML.
  • Digital Wellbeing. El Dashboard, App Timer, el nuevo Do Not Disturb y Wind Down. Llegó como una app de Google en Play Store, en beta para teléfonos Pixel con Android 9.

Seguridad y privacidad

  • Las apps inactivas pierden la entrada. Mientras el UID de una app está inactivo, el micrófono entrega audio vacío, los sensores de SensorManager dejan de enviar eventos y sus cámaras se desconectan con un error. Para seguir recibiendo eventos de sensores, usa un servicio en primer plano.
  • TLS por defecto. En las apps con target API 28, isCleartextTrafficPermitted() devuelve false salvo que la Network Security Configuration permita tráfico sin cifrar para un dominio. La tabla de apps con target API 28 indica qué hacer.
  • DNS privado. Android 9 pasa el DNS a DNS over TLS cuando el servidor de la red lo soporta. El usuario puede apagarlo o indicar un proveedor en “Private DNS”, dentro de Network & internet. Las apps que resuelven nombres por su cuenta pueden consultar LinkProperties.isPrivateDnsActive().
  • BiometricPrompt. El sistema dibuja un único diálogo biométrico para huella, rostro o iris. Las apps deben pasar de FingerprintManager a BiometricPrompt.
  • StrongBox. Un nuevo Keystore respaldado por un chip seguro aparte, con CPU, almacenamiento y generador de números aleatorios propios. Se pide con setIsStrongBoxBacked(true); una clave no soportada lanza StrongBoxUnavailableException. El CDD de 9 solo lo recomienda con fuerza.
  • Android Protected Confirmation. En los dispositivos compatibles que salen con Android 9, ConfirmationPrompt muestra una frase que el usuario aprueba fuera del sistema operativo principal. Después, el Trusted Execution Environment la firma.
  • Keymaster 4. Importación segura de claves, Triple DES para sistemas heredados, niveles de parche separados por partición y setUnlockedDeviceRequired() para claves que no descifran con la pantalla bloqueada.
  • APK Signature Scheme v3. Puede incluir un registro de rotación, así una app puede pasar a una nueva clave de firma.
  • Endurecimiento de la plataforma. Control Flow Integrity en el framework multimedia, NFC y Bluetooth, soporte de CFI en el kernel, más sanitizadores de desbordamiento de enteros y un filtro seccomp más estricto. El cifrado basado en archivos ya funciona con el almacenamiento adoptable, y el cifrado de metadatos llegó donde el hardware lo soporta.
  • Lockdown. “Show lockdown option”, en los ajustes de la pantalla de bloqueo, agrega un botón “Lockdown” al menú de encendido. Apaga Smart Lock, el desbloqueo con huella y las notificaciones en la pantalla de bloqueo hasta que el usuario desbloquea con PIN, patrón o contraseña.
  • Copias de seguridad cifradas. Con un PIN, patrón o contraseña configurado, las copias de Android se cifran con un secreto del lado del cliente, y restaurarlas exige ese bloqueo de pantalla.
  • Otros cambios. Una opción de desarrollador para usar una MAC aleatoria al conectarse a una red Wi-Fi, WPS obsoleto, eliminación de los archivos cifrados seguros de Android (ASEC), y la verificación del nombre de host ya no recurre al CN del certificado.

Permisos

  • Grupo CALL_LOG. READ_CALL_LOG, WRITE_CALL_LOG y PROCESS_OUTGOING_CALLS salieron del grupo PHONE hacia un nuevo grupo CALL_LOG. Hay que pedirlos por separado o se obtiene una SecurityException.
  • Números de teléfono. Sin READ_CALL_LOG, los números del broadcast de estado del teléfono y de PhoneStateListener llegan vacíos.
  • Escaneos Wi-Fi. WifiManager.startScan() necesita ACCESS_FINE_LOCATION o ACCESS_COARSE_LOCATION, CHANGE_WIFI_STATE y la ubicación activada. Leer el SSID y el BSSID desde getConnectionInfo() pide un permiso de ubicación y ACCESS_WIFI_STATE.
  • Datos de celdas. Con la ubicación del dispositivo apagada, getAllCellInfo(), getCellLocation() y getNeighboringCellInfo() no devuelven nada.
  • Número de serie. Build.getSerial() necesita READ_PHONE_STATE.
  • Nuevos. FOREGROUND_SERVICE (normal), USE_BIOMETRIC (normal), ACCEPT_HANDOVER (peligroso) y NFC_TRANSACTION_EVENT (normal).
  • Obsoleto. USE_FINGERPRINT, reemplazado por USE_BIOMETRIC.

Qué cambió para tu app

Todas las apps en Android 9

CambioQué hacer
App Standby Buckets: active, working set, frequent, rare, neverConsulta UsageStatsManager.getAppStandbyBucket(); prueba con adb shell am set-standby-bucket <pkg> rare
Las apps inactivas pierden cámara, micrófono y sensoresLleva el trabajo continuo con sensores a un servicio en primer plano
Restricciones a interfaces fuera del SDKReemplaza las llamadas ocultas por las del SDK; búscalas con StrictMode.detectNonSdkApiUsage()
Una app en primer plano escanea Wi-Fi 4 veces en 2 minutos; todas las de fondo, una vez en 30Guarda los resultados en lugar de escanear cada vez
NETWORK_STATE_CHANGED_ACTION ya no trae SSID ni BSSIDLlama a getConnectionInfo()
El ahorro de batería aplica los límites en segundo plano a todas las appsPrueba con el ahorro de batería activo
Las versiones de Bouncy Castle de muchos algoritmos quedan obsoletasUsa el proveedor Conscrypt
FLAG_ACTIVITY_NEW_TASK vuelve a exigirse desde un contexto que no es una actividadAgrega la flag al abrir una actividad desde un servicio o el contexto de la aplicación
El bloqueo de rotación puede fijar cualquier orientación que admita la actividad visibleNo supongas vertical
getCameraIdList() puede listar varias cámaras frontales o traserasDeja que el usuario elija entre ellas
Las apps con target API 16 o inferior muestran un aviso al abrirseSube targetSdkVersion a 17 o más

El bucket limita jobs, alarmas y mensajes FCM de alta prioridad, y en “rare” también el acceso a la red. Los límites solo se aplican con batería, y el fabricante decide cómo se asignan las apps.

Antes, el límite de Wi-Fi en segundo plano era por app: en Android 8.0 y en Android 8.1 Oreo, cada app en segundo plano podía escanear una vez cada 30 minutos. En Android 9 ese único escaneo lo comparten todas.

El aviso para apps antiguas dice “This app was built for an older version of Android and may not work properly.” AOSP lo muestra cuando targetSdkVersion es menor que ro.build.version.min_supported_target_sdk, que Pie fija en 17.

Las interfaces fuera del SDK se reparten en listas. La light greylist sigue funcionando, con entradas de log y toasts que la señalan. La dark greylist falla para las apps con target API 28, y la blacklist falla para todas, con errores como NoSuchMethodError o NoSuchFieldException.

light greylist dark greylist no sí blacklist La app llama a un método fuera del SDK ¿Qué lista? Funciona, queda en el log ¿targetSdk 28? Falla como si no existiera

Para probar, adb shell settings put global hidden_api_policy_p_apps 1 (y hidden_api_policy_pre_p_apps para targets anteriores) levanta la restricción.

Apps con target API 28

CambioQué hacer
Tráfico sin cifrar bloqueado por defectoUsa HTTPS, o define cleartextTrafficPermitted="true" para dominios concretos en la Network Security Configuration
startForeground() exige FOREGROUND_SERVICEDecláralo; es un permiso normal
Build.SERIAL devuelve "unknown"Pide READ_PHONE_STATE y llama a Build.getSerial()
El cliente HTTP de Apache sale del bootclasspathDeclara <uses-library android:name="org.apache.http.legacy" android:required="false"/> o deja de usarlo
Un directorio de datos de WebView por procesoMantén WebView en un solo proceso, o llama a WebView.setDataDirectorySuffix()
Dominios SELinux por appComparte archivos con un content provider, no con archivos legibles por todos
Los clientes DNS propios deben respetar el DNS privadoUsa DNS cifrado hacia el mismo host, o el resolvedor del sistema
Las vistas de área cero no reciben foco; no hay foco inicial implícitoPide el foco inicial de forma explícita
WebView lee colores hex de 8 dígitos como RGBA y no deduce el MIME en file:Corrige los colores ARGB en el CSS y da su extensión a los archivos locales

Qué perduró

  • La navegación por gestos se completó en Android 10: atrás con un deslizamiento desde el borde, inicio desde abajo, y por defecto en los dispositivos nuevos, con los tres botones todavía disponibles.
  • Las restricciones fuera del SDK crecen en cada versión. Las interfaces todavía permitidas en Pie pero bloqueadas en Android 10 están en la lista max-target-p.
  • La cámara y el micrófono en segundo plano se endurecieron en Android 11: un servicio en primer plano necesita el tipo camera o microphone, y uno iniciado desde segundo plano no puede usarlos.
  • Identificadores del dispositivo: Android 10 puso Build.getSerial() y el IMEI detrás de READ_PRIVILEGED_PHONE_STATE, que las apps de Play no pueden tener.
  • BiometricPrompt llegó a versiones anteriores con la librería AndroidX Biometric, que sumó BiometricManager.
  • Los nombres de postre terminaron aquí. Google los abandonó con Android 10.

Para saber

  • En el lanzamiento, el Easter egg seguía siendo solo una “P”, como señaló Ars Technica: una letra dibujada sobre anillos de color que cambian en cada apertura y se agrandan con dos dedos. Las compilaciones del Pixel 3 (android-9.0.0_r11) lo cambiaron por una app de dibujo llamada PAINT.APK.
  • En AOSP, Build.SERIAL se inicializa leyendo una propiedad llamada no.such.thing. Un comentario explica por qué: una llamada a función impide que el compilador incruste el valor, así la plataforma puede devolver "unknown" a las apps con target API 28.
  • El propio anuncio de Google bromeó con el nombre: “Slices (pie…slices…get it?!)”.
  • Cuando Google retiró los nombres de postre en agosto de 2019, una de las razones que dio fue que “pies are not a dessert in some places” (el pie no es un postre en algunos lugares).
Un Essential Phone sobre un banco metálico con el Easter egg de Android 9: una gran letra P sobre anillos rojos, verdes y morados, con el recorte de la cámara arriba
El Easter egg de Android 9 en un Essential Phone, fotografiado el 7 de agosto de 2018. Davidlamma, Wikimedia Commons · CC BY-SA 4.0

Parte 1 de 5

1 min

Android P Developer Preview 1: primera build

7 de marzo de 2018. Una build solo para desarrolladores y por flasheo que ya traía soporte de notch, los límites a apps inactivas, cleartext bloqueado y primeros avisos non-SDK.

Leer por separado: Android P Developer Preview 1: primera build

Google publicó la primera developer preview de “Android P” el 7 de marzo de 2018, cinco meses antes de la versión final. Dave Burke la llamó “an early baseline build for developers only” y prometió más novedades para Google I/O en mayo.

Fecha7 de marzo de 2018
BuildPPP1.180208.014, según Droid Life; AOSP la etiqueta como android-p-preview-1
DispositivosPixel, Pixel XL, Pixel 2 y Pixel 2 XL; Android Emulator
Cómo se obteníaSolo por descarga y flasheo manual; Android Beta todavía no estaba abierto para P
Estabilidad de la APINo; las API seguían cambiando

La build trajo Wi-Fi RTT (IEEE 802.11mc) para ubicación en interiores, soporte para el recorte de pantalla con getDisplayCutout() y layoutInDisplayCutoutMode, una opción de desarrollador que simula ese recorte, notificaciones MessagingStyle más completas, la API multicámara, ImageDecoder y AnimatedImageDrawable, HDR VP9 y codificación HEIF, pistas de costo de datos para JobScheduler, la Neural Networks API 1.1 y la Open Mobile API de GlobalPlatform para elementos seguros.

Varios cambios de comportamiento clave ya estaban presentes. Las apps inactivas perdían el micrófono, la cámara y los sensores. Network Security Configuration bloqueaba el tráfico en texto plano por defecto. Build.SERIAL pasó a requerir READ_PHONE_STATE, e instalar una app con target menor a API 17 mostraba un diálogo de advertencia. Usar interfaces non-SDK restringidas mostraba un toast y una línea en el log. La autenticación por huella usaba una nueva API FingerprintDialog, que el siguiente hito reemplazó.

Parte 2 de 5

1 min

Android P Beta: abierta a teléfonos de socios

8 de mayo de 2018. La build de I/O, también Developer Preview 2, llegó a seis teléfonos de socios con Treble y trajo Adaptive Battery, Slices, BiometricPrompt y errores non-SDK.

Leer por separado: Android P Beta: abierta a teléfonos de socios

Google anunció Android P Beta el 8 de mayo de 2018, en Google I/O. Es la segunda developer preview: AOSP la etiqueta como android-p-preview-2, y 9to5Google la llamó “the second Developer Preview build of Android P”. Fue la primera build de P que cualquiera podía recibir por aire.

Fecha8 de mayo de 2018
DispositivosPixel, Pixel XL, Pixel 2 y Pixel 2 XL; Sony Xperia XZ2, Xiaomi Mi Mix 2S, Nokia 7 Plus, Oppo R15 Pro, Vivo X21UD y X21, y Essential PH-1
Cómo se obteníaPor aire con Android Beta en Pixel; las builds de socios, desde el sitio de cada fabricante
Estabilidad de la APINo; las API finales llegaron con la Beta 2

Los teléfonos de socios fueron posibles gracias a Project Treble, que Google presentó como “proof of what Treble can do”. La build sumó las funciones por las que se recuerda a Pie: Adaptive Battery con cuatro App Standby buckets, la navegación con un solo botón, las restricciones en segundo plano por batería en Ajustes y el Magnifier de texto. Para desarrolladores trajo Slices (con las API en Android Jetpack), respuestas inteligentes en notificaciones, nuevos tipos de entidad en TextClassifier, el efecto de audio Dynamics Processing, Android Protected Confirmation y las claves StrongBox.

Dos cambios rompieron lo que traía la Preview 1. BiometricPrompt reemplazó a FingerprintDialog, con un único permiso USE_BIOMETRIC, y FingerprintManager y USE_FINGERPRINT quedaron obsoletos. Las interfaces non-SDK no exentas pasaron a lanzar excepciones en lugar de mostrar un toast, y StrictMode sumó detectNonSdkApiUsage() para encontrarlas.

Parte 3 de 5

1 min

Android P Beta 2: la API 28 es final

6 de junio de 2018. La Developer Preview 3 congeló el nivel de API 28, trajo el SDK oficial, abrió Google Play a apps con ese target y fijó qué interfaces non-SDK seguían abiertas.

Leer por separado: Android P Beta 2: la API 28 es final

La Beta 2 salió el 6 de junio de 2018, cuatro semanas después de Google I/O. Google la describió como “an update that includes the final Android P APIs”. AOSP la etiqueta como android-p-preview-3, y 9to5Google la reportó como Developer Preview 3.

Fecha6 de junio de 2018
BuildPPP3.180510.008, en el mensaje de la etiqueta de AOSP y en el reporte de 9to5Google
DispositivosPixel, Pixel XL, Pixel 2 y Pixel 2 XL; los teléfonos de socios en las semanas siguientes
Cómo se obteníaPor aire con Android Beta, o flasheando la imagen de fábrica
Estabilidad de la APISí: nivel de API 28 y SDK oficial

Con la API congelada, Google abrió Google Play a los APK compilados contra la API 28 o con ese target, y pidió subir targetSdkVersion a 28 “as soon as possible”. Para una app que ya apuntaba a API 26 por la próxima regla de Play, dijo, era “a small jump”.

El 12 de junio Google explicó qué hacía la Beta 2 con las interfaces non-SDK. La mayoría de las que reportaron los desarrolladores pasó a una greylist que seguía disponible. Las apps con target API 28 solo podían usar la greylist; las apps con target Oreo o inferior conservaban casi todo el acceso y recibían advertencias en logcat. Google dijo que la Beta 2 debía “closely match” la versión final en este punto.

Parte 4 de 5

1 min

Android P Beta 3: release candidate temprana

2 de julio de 2018. La Developer Preview 4 fue una release candidate temprana con comportamientos casi finales, el parche de julio de 2018 y D8 como herramienta independiente.

Leer por separado: Android P Beta 3: release candidate temprana

La Beta 3 salió el 2 de julio de 2018. Google la llamó “an early release candidate build of Android with near-final system behaviors”, sobre el nivel de API 28 que la Beta 2 había congelado. AOSP la etiqueta como android-p-preview-4.

Fecha2 de julio de 2018
BuildPPP4.180612.004, según 9to5Google
DispositivosPixel, Pixel XL, Pixel 2 y Pixel 2 XL; Android Emulator; luego, teléfonos de socios
Cómo se obteníaPor aire con Android Beta, o flasheando la imagen de fábrica
Estabilidad de la APISí, desde la Beta 2

La build no agregó API. Trajo correcciones de errores, las actualizaciones de seguridad de julio de 2018 y una actualización de las build tools de Android Studio que publicó D8 como herramienta independiente. Google pidió probar las apps con los App Standby buckets, las restricciones de privacidad y los límites non-SDK.

Parte 5 de 5

1 min

Android P Beta 4: release candidate

25 de julio de 2018. La Developer Preview 5, último hito antes del lanzamiento, fue una release candidate con comportamientos finales sobre la API 28 congelada desde la Beta 2.

Leer por separado: Android P Beta 4: release candidate

La Beta 4 salió el 25 de julio de 2018, doce días antes de la versión final. Google la llamó “the last preview milestone before we launch the official Android P platform”. AOSP la etiqueta como android-p-preview-5.

Fecha25 de julio de 2018
BuildPPP5.180610.010, según 9to5Google
DispositivosPixel, Pixel XL, Pixel 2 y Pixel 2 XL; los teléfonos de socios en las semanas siguientes
Cómo se obteníaPor aire con Android Beta, o flasheando la imagen del sistema
Estabilidad de la APISí, desde la Beta 2

Fue “a release candidate build with final system behaviors”. Google pidió terminar las pruebas de compatibilidad, revisar el uso de interfaces non-SDK y publicar actualizaciones sin cambiar antes el nivel de target. Android 9 Pie salió el 6 de agosto de 2018.

Clasificado en

Citas

52

Referencias externas