Android 9 (nivel de API 28) presenta nuevas funciones y APIs que puedes aprovechar en tus apps, además de nuevos cambios de comportamiento. En este documento, se brinda una descripción general de los pasos para migrar tus apps a Android 9 en dos fases clave:
- Garantiza la compatibilidad básica con Android 9
Verifica que tu app existente funcione en su totalidad en la versión nueva de la plataforma. En esta etapa, no usas APIs nuevas ni cambias el
targetSdkVersion
de tu app, pero es posible que se necesiten cambios menores. - Orienta la plataforma nueva, compila con el SDK de Android 9 y compila con las funciones de Android 9
Cuando todo esté listo para aprovechar las funciones nuevas de la plataforma, actualiza tu
targetSdkVersion
a28
, verifica que la app siga funcionando como se espera y comienza a usar APIs nuevas.
Preparar un dispositivo con Android 9
Si tienes un dispositivo compatible, obtén la imagen del sistema de Android 9 del fabricante. Haz clic aquí para ver las imágenes de fábrica de dispositivos Pixel. Aquí encontrarás las instrucciones generales para escribir en la memoria flash de una imagen del sistema.
También puedes descargar la imagen de sistema de Android 9 para Android Emulator. Aparecerá en el SDK Manager en Android API 28 como Google APIs Intel x86 Atom System Image.
Nota: La imagen del sistema emulador de Android 9 está disponible para descargar en Android Studio 3.1 y versiones posteriores. Android Studio 3.2 proporciona la máxima compatibilidad. Para obtener más información, consulta Cómo obtener el SDK de Android 9.
Garantizar la compatibilidad con Android 9
El objetivo aquí es asegurarte de que tu app existente funcione tal como está en Android 9. Dado que algunos cambios en la plataforma pueden afectar el comportamiento de tu app, quizás sean necesarios algunos ajustes, pero no necesitarás usar APIs nuevas ni cambiar tu targetSdkVersion
.
Cómo realizar pruebas de compatibilidad
En general, probar la compatibilidad con Android 9 implica el mismo tipo de pruebas que realizas cuando te preparas para lanzar tu app. Este es un buen momento para revisar los Lineamientos principales de calidad de las apps y las Prácticas recomendadas para pruebas.
Sin embargo, hay otro aspecto relacionado con las pruebas: Android 9 presenta cambios en la plataforma de Android que pueden afectar el comportamiento de tu app o dañarla por completo, incluso si no cambias tu targetSdkVersion
. Por este motivo, es importante que revises los cambios clave de la tabla 1 y pruebes cualquier corrección que implementes para contemplar estas modificaciones.
Cambiar | Resumen |
---|---|
Restricciones en interfaces que no pertenecen al SDK |
Ahora se bloquea el acceso a interfaces específicas que no pertenecen al SDK, independientemente de que sea directo, a través de JNI o mediante reflejo. Los intentos de acceder a interfaces restringidas generan errores, como NoSuchFieldException y NoSuchMethodException .
Para obtener más información, consulta Restricciones en interfaces que no pertenecen al SDK.
|
Eliminación del proveedor de criptografía |
A partir de Android 9, se elimina el proveedor de criptografía JCA. Las llamadas a SecureRandom.getInstance("SHA1PRNG", "Crypto") arrojarán NoSuchProviderException .
|
Decodificador UTF-8 más estricto | En Android 9, el decodificador UTF-8 para lenguaje Java es más estricto y responde al estándar Unicode. |
Acceso a la cámara, al micrófono y a sensores bloqueado para apps inactivas | Mientras las apps estén inactivas, no podrán acceder a la cámara, al micrófono ni a los sensores de SensorManager. |
Para obtener una lista más exhaustiva de los cambios de comportamiento de todas las apps que se ejecutan en Android 9, consulta el documento sobre cambios de comportamiento.
Actualiza tu versión de destino y usa funciones de Android P
En esta sección, se explica cómo habilitar la compatibilidad total con Android 9 actualizando targetSdkVersion
a la versión 28 y agregando nuevas funciones disponibles en Android 9.
Además de ofrecerte nuevas APIs, Android 9 presenta algunos cambios de comportamiento cuando actualizas tu targetSdkVersion
a la versión 28. Dado que algunos cambios de comportamiento pueden requerir modificaciones en el código para evitar fallas, primero debes comprender cómo se podría ver afectada tu app cuando cambias la targetSdkVersion
. Para ello, revisa todos los cambios de comportamiento de las apps orientadas a Android 9.
Nota: Los pasos descritos anteriormente para garantizar la compatibilidad con la plataforma son un requisito previo para orientar tu app a Android 9. Por lo tanto, asegúrate de completarlos primero.
Obtener el SDK de Android 9
Puedes obtener los paquetes del SDK para compilar tu app con Android 9 mediante Android Studio 3.1 o una versión posterior. Si aún no necesitas las funciones nuevas de Android 9 y solo quieres realizar compilaciones en esa versión de la plataforma, puedes usar Android Studio 3.1. Android Studio 3.2 ofrece compatibilidad total con las funciones de Android 9.
Probar tu app para Android 9
Una vez completados los preparativos anteriores, puedes compilar tu app y, luego, probarla más para asegurarte de que funcione correctamente cuando se orienta a Android 9 (nivel de API 28). Este es otro buen momento para revisar los lineamientos de calidad de la app principal y las prácticas recomendadas para pruebas.
Cuando compilas tu app con el targetSdkVersion
configurado en P, hay cambios específicos de la plataforma que debes tener en cuenta. Algunos de estos cambios pueden afectar significativamente el comportamiento de tu app o dañarla por completo, incluso si no implementas funciones nuevas en Android 9.
En la tabla 2 se proporciona una lista de estas modificaciones con vínculos para acceder a más información.
Cambiar | Resumen |
---|---|
Permiso de servicios en primer plano | Las apps que quieran usar servicios en primer plano ahora deben solicitar primero el permiso FOREGROUND_SERVICE. Este es un permiso normal, por lo que el sistema se lo otorga automáticamente a la app que lo solicita. Si se inicia un servicio en primer plano sin el permiso, se genera una SecurityException. |
Baja de cifrados de Bouncy Castle |
En Android 9, varios algoritmos de cifrado del proveedor Bouncy Castle dejan de estar disponibles para dar lugar a los que proporciona el proveedor Conscrypt. Las llamadas a getInstance() que solicitan el proveedor de Bouncy Castle generan errores NoSuchAlgorithmException . Para resolverlos, no especifiques un proveedor en getInstance() (es decir, solicita la implementación predeterminada).
|
Eliminación del acceso directo a Build.serial
|
Las apps que necesitan el identificador Build.serial ahora deben solicitar el permiso READ_PHONE_STATE y, luego, usar el nuevo método Build.getSerial() agregado en Android 9.
|
Prohibición del uso compartido del directorio de datos de WebView | Las apps ya no pueden compartir un único directorio de datos de WebView en diferentes procesos. Si tu app tiene más de un proceso que usa WebView, CookieManager o cualquier otra API del paquete android.webkit, fallará cuando el segundo proceso llame a un método de WebView. |
Bloqueo del acceso al directorio de datos de la app ocasionado por SELinux | El sistema aplica zonas de pruebas de SELinux por app con restricciones de SELinux por app en los directorios de datos privados de cada app. Ahora no se permite el acceso directo al directorio de datos de otra app por ruta de acceso. Las apps pueden seguir compartiendo datos con mecanismos de IPC, incluso mediante la transmisión de FD. |
Para obtener una lista más exhaustiva de los cambios de comportamiento de las apps orientadas a Android 9, consulta el documento sobre cambios de comportamiento.
Para explorar las nuevas funciones y APIs disponibles en Android 9, consulta Funciones y APIs de Android 9.