Migrar apps a Android 9

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 ofrece una descripción general de los pasos para migrar tus apps a Android 9 en dos fases clave:

  1. 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 usarás APIs nuevas ni modificarás la targetSdkVersion de tu app, pero es posible que se necesiten cambios menores.

  2. Orienta las apps a la nueva plataforma, compila con el SDK de Android 9 y realiza compilaciones con las funciones de Android 9

    Cuando estés listo para aprovechar las nuevas funciones de la plataforma, actualiza tu targetSdkVersion a 28, 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 correspondiente al fabricante. Haz clic aquí para obtener imágenes de fábrica para 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. Se muestra en el SDK Manager en Android API 28 como Google APIs Intel x86 Atom System Image.

Nota: La imagen del sistema del emulador de Android 9 se puede 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. Debido a que algunos cambios en la plataforma pueden afectar el comportamiento de tu app, tal vez se necesiten algunos ajustes. Sin embargo, no es necesario que uses nuevas APIs ni que cambies tu targetSdkVersion.

Cómo garantizar la compatibilidad con Android 9 paso a paso

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

Tabla 1: Cambios clave que afectan a todas las apps que se ejecutan en dispositivos con Android 9.

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 para 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 una 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 completa de los cambios de comportamiento de todas las apps que se ejecutan en Android 9, consulta el documento sobre cambios de comportamiento.

Actualizar tu versión de destino y usar 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. Debido a 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 de la plataforma son un requisito previo para orientar tu app a Android 9. Por lo tanto, asegúrate de completarlos en primer lugar.

Actualiza la versión de destino y usa las funciones de Android 9 paso a paso

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 con 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 oriente a Android 9 (nivel de API 28). Este es otro buen momento para revisar los lineamientos principales de calidad de la app 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 considerablemente 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.

Tabla 2: Cambios clave que afectan a las apps cuando targetSdkVersion se establece en 28.

Cambiar Resumen
Permiso de servicios en primer plano Las apps que deseen 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. Iniciar un servicio en primer plano sin el permiso 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 de Conscrypt. Las llamadas a getInstance() que solicitan al proveedor Bouncy Castle generan errores NoSuchAlgorithmException. Para resolver los errores, 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() que se agregó 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 el paso de FD.

Para obtener una lista más amplia 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.