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.

De un vistazo
| Versión | Android 9 |
| Nivel de API | 28 |
| Nombre | Pie, público |
Build.VERSION_CODES | P |
| Lanzamiento | Despliegue en Pixel y código en AOSP, 6 de agosto de 2018 |
| Dispositivos de lanzamiento | Pixel, 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 Play | Apps 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.
DisplayCutoutygetDisplayCutout()indican dónde está el notch. El atributo de ventanalayoutInDisplayCutoutModeaceptaDEFAULT,SHORT_EDGESoNEVER. 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.
MessagingStylerecibe unPerson, muestra imágenes consetData(), guarda borradores de respuesta (EXTRA_REMOTE_INPUT_DRAFT) y ofrece respuestas sugeridas conRemoteInput.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.
ImageDecoderreemplaza aBitmapFactory, yAnimatedImageDrawablereproduce 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_LOCATIONmiden 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
SensorManagerdejan 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()devuelvefalsesalvo 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
FingerprintManageraBiometricPrompt. - 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 lanzaStrongBoxUnavailableException. El CDD de 9 solo lo recomienda con fuerza. - Android Protected Confirmation. En los dispositivos compatibles que salen
con Android 9,
ConfirmationPromptmuestra 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_LOGyPROCESS_OUTGOING_CALLSsalieron del grupoPHONEhacia un nuevo grupoCALL_LOG. Hay que pedirlos por separado o se obtiene unaSecurityException. - Números de teléfono. Sin
READ_CALL_LOG, los números del broadcast de estado del teléfono y dePhoneStateListenerllegan vacíos. - Escaneos Wi-Fi.
WifiManager.startScan()necesitaACCESS_FINE_LOCATIONoACCESS_COARSE_LOCATION,CHANGE_WIFI_STATEy la ubicación activada. Leer el SSID y el BSSID desdegetConnectionInfo()pide un permiso de ubicación yACCESS_WIFI_STATE. - Datos de celdas. Con la ubicación del dispositivo apagada,
getAllCellInfo(),getCellLocation()ygetNeighboringCellInfo()no devuelven nada. - Número de serie.
Build.getSerial()necesitaREAD_PHONE_STATE. - Nuevos.
FOREGROUND_SERVICE(normal),USE_BIOMETRIC(normal),ACCEPT_HANDOVER(peligroso) yNFC_TRANSACTION_EVENT(normal). - Obsoleto.
USE_FINGERPRINT, reemplazado porUSE_BIOMETRIC.
Qué cambió para tu app
Todas las apps en Android 9
| Cambio | Qué hacer |
|---|---|
| App Standby Buckets: active, working set, frequent, rare, never | Consulta UsageStatsManager.getAppStandbyBucket(); prueba con adb shell am set-standby-bucket <pkg> rare |
| Las apps inactivas pierden cámara, micrófono y sensores | Lleva el trabajo continuo con sensores a un servicio en primer plano |
| Restricciones a interfaces fuera del SDK | Reemplaza 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 30 | Guarda los resultados en lugar de escanear cada vez |
NETWORK_STATE_CHANGED_ACTION ya no trae SSID ni BSSID | Llama a getConnectionInfo() |
| El ahorro de batería aplica los límites en segundo plano a todas las apps | Prueba con el ahorro de batería activo |
| Las versiones de Bouncy Castle de muchos algoritmos quedan obsoletas | Usa el proveedor Conscrypt |
FLAG_ACTIVITY_NEW_TASK vuelve a exigirse desde un contexto que no es una actividad | Agrega 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 visible | No supongas vertical |
getCameraIdList() puede listar varias cámaras frontales o traseras | Deja que el usuario elija entre ellas |
| Las apps con target API 16 o inferior muestran un aviso al abrirse | Sube 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.
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
| Cambio | Qué hacer |
|---|---|
| Tráfico sin cifrar bloqueado por defecto | Usa HTTPS, o define cleartextTrafficPermitted="true" para dominios concretos en la Network Security Configuration |
startForeground() exige FOREGROUND_SERVICE | Declá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 bootclasspath | Declara <uses-library android:name="org.apache.http.legacy" android:required="false"/> o deja de usarlo |
| Un directorio de datos de WebView por proceso | Mantén WebView en un solo proceso, o llama a WebView.setDataDirectorySuffix() |
| Dominios SELinux por app | Comparte archivos con un content provider, no con archivos legibles por todos |
| Los clientes DNS propios deben respetar el DNS privado | Usa DNS cifrado hacia el mismo host, o el resolvedor del sistema |
| Las vistas de área cero no reciben foco; no hay foco inicial implícito | Pide 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
cameraomicrophone, y uno iniciado desde segundo plano no puede usarlos. - Identificadores del dispositivo: Android 10 puso
Build.getSerial()y el IMEI detrás deREAD_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 llamadaPAINT.APK. - En AOSP,
Build.SERIALse inicializa leyendo una propiedad llamadano.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).

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 buildGoogle 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.
| Fecha | 7 de marzo de 2018 |
| Build | PPP1.180208.014, según Droid Life; AOSP la etiqueta como android-p-preview-1 |
| Dispositivos | Pixel, Pixel XL, Pixel 2 y Pixel 2 XL; Android Emulator |
| Cómo se obtenía | Solo por descarga y flasheo manual; Android Beta todavía no estaba abierto para P |
| Estabilidad de la API | No; 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ó.
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 sociosGoogle 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.
| Fecha | 8 de mayo de 2018 |
| Dispositivos | Pixel, 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ía | Por aire con Android Beta en Pixel; las builds de socios, desde el sitio de cada fabricante |
| Estabilidad de la API | No; 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.
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 finalLa 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.
| Fecha | 6 de junio de 2018 |
| Build | PPP3.180510.008, en el mensaje de la etiqueta de AOSP y en el reporte de 9to5Google |
| Dispositivos | Pixel, Pixel XL, Pixel 2 y Pixel 2 XL; los teléfonos de socios en las semanas siguientes |
| Cómo se obtenía | Por aire con Android Beta, o flasheando la imagen de fábrica |
| Estabilidad de la API | Sí: 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.
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 tempranaLa 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.
| Fecha | 2 de julio de 2018 |
| Build | PPP4.180612.004, según 9to5Google |
| Dispositivos | Pixel, Pixel XL, Pixel 2 y Pixel 2 XL; Android Emulator; luego, teléfonos de socios |
| Cómo se obtenía | Por aire con Android Beta, o flasheando la imagen de fábrica |
| Estabilidad de la API | Sí, 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.
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 candidateLa 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.
| Fecha | 25 de julio de 2018 |
| Build | PPP5.180610.010, según 9to5Google |
| Dispositivos | Pixel, Pixel XL, Pixel 2 y Pixel 2 XL; los teléfonos de socios en las semanas siguientes |
| Cómo se obtenía | Por aire con Android Beta, o flasheando la imagen del sistema |
| Estabilidad de la API | Sí, 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.