Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Migración de aplicaciones a Android 8.0

Android 8.0 presenta varias funciones y API nuevas e incluye cambios que pueden afectar el comportamiento de tu aplicación aun cuando no realizas cambios. Para ayudarte con la preparación, en esta página se explica la manera de realizar pruebas de compatibilidad y actualizar tu aplicación para usar funciones nuevas de Android 8.0:

  1. Garantizar la compatibilidad de plataforma

    Verifica que tu aplicación sea completamente funcional en la versión nueva de la plataforma. En esta etapa, no usarás API nuevas ni modificarás la targetSdkVersion de tu aplicación, pero tal vez sean necesarios cambios menores.

  2. Compilar tu aplicación con el Android 8.0 SDK

    Cuando estés listo para aprovechar las funciones nuevas de la plataforma, actualiza tu targetSdkVersion a la versión “O”, verifica que la aplicación siga funcionando como se espera y luego comienza a usar las API nuevas.

Garantizar la compatibilidad de plataforma

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

Preparar un dispositivo con Android 8.0

  • Si tienes un dispositivo compatible (Pixel, Pixel XL, Pixel C, Nexus 5X, Nexus 6P o Nexus Player), obtén la imagen de sistema de Android 8.0 para este desde la página Downloads y luego sigue las instrucciones para actualizar tu dispositivo.
  • También puedes descargar la imagen de sistema de Android 8.0 para el Android Emulator. Se muestra en el SDK Manager, dentro de Android 8.0 Preview, como Google APIs Intel x86 Atom System Image.

    Nota: La imagen de sistema de Android 8.0 solo se encuentra disponible para la descarga desde Android Studio 3.0 Canary. Si deseas más información, consulta la sección siguiente para obtener el Android 8.0 SDK.

Realizar pruebas de compatibilidad

En general, probar la compatibilidad con Android 8.0 implica el mismo tipo de pruebas que realizas cuando te preparas para lanzar tu aplicación. Este es un buen momento para revisar las pautas de calidad de la aplicación principal y las prácticas recomendadas para realizar pruebas.

Sin embargo, hay otro aspecto en la realización de pruebas: Android 8.0 presenta modificaciones en la plataforma de Android que pueden afectar el comportamiento de tu aplicación o dañarla por completo, incluso si no modificas tu targetSdkVersion. Por esta razón, es importante que revises los cambios principales en la tabla 1 y pruebes cualquier corrección que implementes a fin de hacer lugar para estas modificaciones.

Tabla 1: Cambios principales que tienen efecto en todas las aplicaciones que se usan en dispositivos de Android 8.0.

Cambio Resumen Más referencia
Actualizaciones menos frecuentes de ubicación en segundo plano Si tu aplicación recibe actualizaciones de ubicación desde un servicio en segundo plano, estas serán menos frecuentes en Android 8.0 en comparación con versiones anteriores de Android. Específicamente, un servicio de segundo plano no puede recibir actualizaciones de ubicación más que unas pocas veces por hora. Sin embargo, mientras tu aplicación se encuentre en primer plano, el índice de actualizaciones de ubicación no se modifica. Límites de ubicación en segundo plano
net.hostname ya no es compatible La consulta de la propiedad del sistema net.hostname da como resultado el valor null. Ninguno
Excepción nueva de send(DatagramPacket) El método send(DatagramPacket) genera una SocketException si el método connect(InetAddress, int) previamente ejecutado falla. Cambios en el comportamiento: conectividad de red y HTTP(S)
NullPointerException correspondiente a partir de métodos AbstractCollection Ahora AbstractCollection.removeAll(null) y AbstractCollection.retainAll(null) generan una NullPointerException. Anteriormente, la NullPointerException no se producía cuando la recopilación estaba vacía. Este cambio hace que el comportamiento se adecue a la documentación. Cambios en el comportamiento: manejo de recopilaciones
NullPointerException correspondiente a partir de Currency.getDisplayName(null) Las llamadas a Currency.getDisplayName(null) generan una NullPointerException. Cambios en el comportamiento: configuración regional e internacionalización

Para obtener una lista más abarcadora de las modificaciones de comportamiento en Android 8.0, consulta también Cambios de comportamiento en Android 8.0.

Compilar tu aplicación con funciones de Android 8.0

Además de ofrecerte API nuevas, Android 8.0 genera otras modificaciones de comportamiento cuando actualizas tu targetSdkVersion, como se describe en la tabla 2. En esta sección se explica la manera de configurar tu entorno de desarrollo para orientarte hacia la plataforma nueva, y comenzar a compilar y probar las modificaciones y funciones nuevas con las API de Android 8.0.

Nota: Los pasos antes descritos, que permiten garantizar la compatibilidad de la plataforma, son requisitos previos para la compilación orientada a Android 8.0. Por lo tanto, asegúrate de completarlos en primer lugar.

Obtener el Android 8.0 SDK

  1. Instalar Android Studio 3.0 Canary.

    Solo Android Studio 3.0 incorpora compatibilidad con todas las funciones nuevas para desarrolladores disponibles en Android 8.0. Por ello, debes obtener la versión Canary de Android Studio 3.0 Canary para comenzar a usar el Android 8.0 SDK. Sin embargo, puedes de todos modos dejar instalada tu versión estable de Android Studio.

  2. Inicia Android Studio 3.0 y abre SDK Manager haciendo clic en Tools > Android > SDK Manager.
  3. En la pestaña SDK Platforms, marca Show Package Details. Debajo de Android 8.0 Preview, marca lo siguiente:
    • Android SDK Platform O;
    • Google APIs Intel x86 Atom System Image (solo se necesita para el emulador).
  4. Realiza un cambio en la pestaña SDK Tools y marca todos los elementos para los cuales haya actualizaciones disponibles (haz clic en cada casilla de verificación en la que se muestre un guión ). Esto tiene que incluir los obligatorios:
    • Android SDK Build-Tools 26.0.0 (rc2 o posterior)
    • Android SDK Platform-Tools 26.0.0 (rc2 o posterior)
    • Android Emulator 26.0.0
    • Repositorio de compatibilidad
  5. Haz clic en OK para instalar todos los paquetes de SDK seleccionados.

Ahora estás listo para comenzar a desarrollar la Android 8.0 .

Actualizar la configuración de tu compilación

Actualiza compileSdkVersion, buildToolsVersion, targetSdkVersion y la versión de la biblioteca de compatibilidad con las siguientes versiones:

android {
  compileSdkVersion 'android-O'
  buildToolsVersion '26.0.0-rc2'

  defaultConfig {
    targetSdkVersion 'O'
  }
  ...
}

dependencies {
  compile 'com.android.support:appcompat-v7:26.0.0-beta1'
}

// REQUIRED: Google's new Maven repo is required for the latest
// support library that is compatible with Android 8.0
repositories {
    maven {
        url 'https://maven.google.com'
    }
}

No puedes publicar tu aplicación con esta configuración. La versión “O” es un nivel de API provisorio que solo se puede usar para desarrollo y pruebas durante la Android O Developer Preview. Debes esperar para publicar tus modificaciones de Android 8.0 hasta que se lance el último nivel de API y luego volver a actualizar tu configuración en ese momento.

Quitar receptores de transmisión de tu archivo de manifiesto

Debido a que Android 8.0 presenta nuevas limitaciones para receptores de transmisiones, debes eliminar cualquier receptor de transmisiones que se registre para intents de transmisión implícitas. Dejarlos en su lugar no daña tu aplicación en el momento de compilación ni durante el tiempo de ejecución, pero no tienen efecto cuando tu aplicación se ejecuta en Android 8.0.

Las intents de transmisión explícitas, aquellas a las cuales solo puede responder tu aplicación, siguen funcionando de la misma manera en Android 8.0.

Hay excepciones para esta restricción nueva. Para ver una lista de transmisiones implícitas que aún funcionen en aplicaciones orientadas a Android 8.0, consulta Excepciones de las transmisiones implícitas.

Probar tu aplicación de Android 8.0

Una vez completados los preparativos anteriores, puedes compilar tu aplicación y luego probarla para asegurarte de que funcione de manera apropiada al orientarla hacia Android 8.0. Este es otro buen momento para revisar las pautas de calidad de la aplicación principal y las prácticas recomendadas para realizar pruebas.

Al compilar tu aplicación con el conjunto targetSdkVersion para Android 8.0, hay cambios específicos de plataforma que debes tener en cuenta. Alguna de estas modificaciones pueden afectar significativamente el comportamiento de tu aplicación o dañarla por completo, incluso si no implementas funciones nuevas en Android 8.0.

En la tabla 2 se proporciona una lista de estas modificaciones con vínculos a más información.

Tabla 2: Modificaciones principales que afectan las aplicaciones cuando targetSdkVersion se fija en “O”.

Cambio Resumen Más referencia
Privacidad Android 8.0 no es compatible con el uso de las propiedades de sistema net.dns1, net.dns2, net.dns3 o net.dns4. Cambios en el comportamiento: privacidad
Implementación de segmentos que admiten escritura y ejecución En el caso de las bibliotecas nativas, Android 8.0 impone la regla de que los datos no deben admitir ejecución y el código no debe admitir la escritura. Cambios en el comportamiento: bibliotecas nativas
Encabezado ELF y validación de la sección El vinculador dinámico comprueba más valores en el encabezado ELF y los encabezados de sección, y falla si no son válidos. Cambios en el comportamiento: bibliotecas nativas
Notificaciones Las aplicaciones orientadas a la versión de Android 8.0 del SDK deben implementar uno o más canales de notificaciones a fin de publicar notificaciones para usuarios. Información general de la API: notificaciones
Método List.sort() Es posible que las implementaciones de este método dejen de llamar a Collections.sort() o que tu aplicación genere una excepción debido a stack overflow. Cambios en el comportamiento: manejo de recopilaciones
Método Collections.sort() En las implementaciones de List, Collections.sort() ahora genera una ConcurrentModificationException. Cambios en el comportamiento: manejo de recopilaciones

Para obtener una lista más abarcadora de las modificaciones de comportamiento en Android 8.0, consulta Cambios de comportamiento en Android 8.0.

Para explorar las nuevas funciones y API disponibles en Android 8.0, consulta Funciones y API de Android 8.0.