Migrar apps a Android 9

En Android 9 (nivel de API 28), se presentan nuevas funciones y APIs que puedes aprovechar en tus apps, y también 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 etapas clave:

  1. Cómo garantizar 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 API nuevas ni modificarás la targetSdkVersion de tu app, pero tal vez se necesiten cambios menores.

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

    Cuando estés listo para aprovechar las funciones nuevas de la plataforma, actualiza tu targetSdkVersion a 28, verifica que la app siga funcionando como se espera y comienza a usar las APIs nuevas.

Preparar un dispositivo con Android 9

Si tienes un dispositivo compatible, obtén la Imagen del sistema de Android 9 del fabricante para tu dispositivo. haz clic aquí para imágenes de fábrica para Dispositivos Pixel. Podrás acceder a instrucciones generales para instalar una imagen del sistema aquí.

También puedes descargar la imagen de sistema de Android 9 para Android Emulator. Se incluye en la SDK Manager en API de Android 28 como Google APIs Intel x86 Atom System Image.

Nota: La imagen de sistema del emulador de Android 9 está disponible para la descarga 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 asegurarse de que tu aplicación existente funcione tal como está en Android 9 Debido a que algunos cambios en la plataforma pueden afectar el comportamiento de tu app, es posible que debas hacer algunos ajustes. Sin embargo, no es necesario que uses APIs nuevas 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. Es un buen momento para revisar los Lineamientos de calidad de la app principal 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 cuando no modifiques tu targetSdkVersion. Por este motivo, es importante que revises los cambios clave en la tabla 1 y probar las correcciones que implementes para admitir los cambios.

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 El acceso a interfaces específicas que no pertenecen al SDK ahora está bloqueado, ya sea que el acceso sea directo, a través de JNI o mediante reflejo. Los intentos para acceder a interfaces restringidas generan errores, como NoSuchFieldException y NoSuchMethodException. Consulta las restricciones en interfaces que no pertenecen al SDK para obtener más detalles.
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 amplia de los cambios de comportamiento de todas las apps que se ejecutan en Android 9, consulta el documento Cambios de comportamiento.

Actualiza tu versión de destino y usa las funciones de Android P

En esta sección, se explica cómo habilitar la compatibilidad completa con Android 9 actualizando tu targetSdkVersion al nivel 28 y agregando funciones nuevas disponibles en Android 9.

Además de ofrecerte nuevas APIs, Android 9 presenta comportamientos cambios cuando actualizas tu targetSdkVersion a 28. Debido a que algunos cambios de comportamiento podrían requerir cambios en el código para evitar fallas, primero debes comprender cómo podría funcionar se ven afectados cuando cambias la targetSdkVersion revisando 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.

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 de SDK para compilar tu app con Android 9 usando 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 completa 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 para asegurarte de que funcione correctamente cuando se oriente a Android 9. (nivel de API 28). Este es otro buen momento para repasar el App principal Lineamientos de calidad y Prácticas para realizar pruebas.

Cuando compilas tu app con targetSdkVersion establecido 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 incluso puede dañar tu app por completo, incluso si no implementas 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 intenten 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 al solicitante . El inicio de un servicio en primer plano sin el permiso genera una SecurityException.
Baja de cifrados de Bouncy Castle En Android 9, varios cifrados del proveedor Bouncy Castle dejan de estar disponibles para dar lugar a los que proporciona el proveedor Conscrypt. Llamadas a getInstance() que solicita el salto El proveedor del castillo genera NoSuchAlgorithmException errores. Para resolverlos, no especificar un proveedor en getInstance() (es decir, solicitar la implementación predeterminada).
Eliminación del acceso directo a Build.serial Ahora, las apps que necesiten el identificador Build.serial 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 usando WebView, CookieManager o cualquier otra API en android.webkit tu app 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 impone zonas de pruebas de SELinux por app con restricciones de SELinux por app en el directorio 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 abarcadora de los cambios de comportamiento para apps orientadas a Android 9, consulta el documento sobre Cambios de comportamiento.

Para explorar las nuevas funciones y API disponibles en Android 9, consulta Funciones y APIs de Android 9