Migrar apps a Android 9

En Android 9 (nivel de API 28), se presentan nuevas características y API 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 claves:

  1. 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. Procurar perfilamiento hacia la nueva plataforma, realizar compilaciones con el SDK de Android 9 y trabajar con características de Android 9

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

Preparar un dispositivo con Android 9

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

También puedes descargar la imagen de sistema de Android 9 para Android Emulator. Se muestra en el SDK Manager, dentro de Android 9, como Google API Intel x86 Atom System Image.

Nota: La imagen de sistema de Android 9 para emuladores se encuentra 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 Obtener el SDK de Android 9.

Garantizar la compatibilidad con Android 9

El objetivo en este aspecto es asegurarte de que tu app existente funcione según su configuración actual en Android 9. Debido a que algunos cambios en la plataforma pueden afectar el comportamiento de tu app, probablemente sean necesarios algunos ajustes. Sin embargo, no tendrás la necesidad de usar las API nuevas ni de cambiar tu targetSdkVersion.

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 repasar las pautas de calidad de la app principal y las prácticas recomendadas para realizar pruebas.

Sin embargo, hay otro aspecto para la realización de pruebas: Android 9 presenta modificaciones 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 ello, es importante que revises los cambios claves en la tabla 1 y pruebes cualquier corrección que implementes a fin de contemplar estas modificaciones.

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

Cambio Resumen
Restricciones en interfaces que no pertenecen al SDK El acceso a interfaces específicas que no pertenecen al SDK está bloqueado, 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") generará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.

Si quieres obtener una lista más abarcadora de los cambios de comportamiento para todas las apps que funcionan en Android 9, consulta el documento sobre cambios de comportamiento.

Actualizar tu versión de destino y usar características de Android P

En esta sección se explica la forma de habilitar la compatibilidad completa con Android 9 actualizando tu targetSdkVersion al nivel 28 e incorporando características nuevas disponibles en Android 9.

Además de ofrecerte nuevas API, Android 9 presenta cambios de comportamiento al actualizar tu targetSdkVersion al nivel 28. Debido a que algunos cambios de comportamiento pueden requerir modificaciones en el código para evitar daños, primero debes comprender en qué medida se puede ver afectada tu app al cambiar la targetSdkVersion; para ello, revisa todos los cambios de comportamiento para apps orientadas a Android 9.

Nota: Los pasos para garantizar la compatibilidad con la plataforma, descritos anteriormente, son requisitos previos para orientar tu app a Android 9. Por ello, debes asegurarte de completarlos en primer lugar.

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 características 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 características de Android 9.

Para realizar la configuración con cualquiera de las versiones de Android Studio, sigue los pasos documentados en Configurar el SDK de la versión preliminar.

Probar tu app para Android 9

Una vez completados los preparativos anteriores, puedes compilar tu app y luego probarla para asegurarte de que funcione de manera apropiada al orientarla a Android 9 (nivel de API 28). Este es otro buen momento para repasar las pautas de calidad de la app principal y las prácticas recomendadas para realizar pruebas.

Al compilar tu app con targetSdkVersion en Android P, hay cambios específicos de la plataforma que debes tener en cuenta. Alguna de estas modificaciones pueden afectar considerablemente el comportamiento de tu app o dañarla por completo, incluso cuando no implementes características nuevas de 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: Modificaciones principales que afectan las apps cuando targetSdkVersion se fija en 28.

Cambio 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, de modo que el sistema se lo otorga automáticamente a la app que lo solicita. 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. Las llamadas a getInstance() que soliciten el proveedor Bouncy Castle generarán errores NoSuchAlgorithmException. Para solucionar los errores, no especifiques un proveedor en getInstance() (es decir, solicita 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 método nuevo 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 en tu app hay más de un proceso que use 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 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 características y API disponibles en Android 9, consulta Características y API de Android 9.