Android 8.0 (nivel de API 26) presenta cambios de comportamiento, así como nuevas funciones y APIs que puedes aprovechar en tus apps. En este documento, se brinda una descripción general de los pasos para migrar tus apps a Android 8.0 en dos fases clave:
- Garantiza la compatibilidad con Android 8.0
Verifica que tu app 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. - Actualiza tu versión de destino y usa funciones de Android 8.0
Cuando todo esté listo para aprovechar las funciones nuevas de la plataforma, actualiza tu
targetSdkVersion
a 26, verifica que la app siga funcionando como se espera y, luego, comienza a usar APIs nuevas.
Asegúrate de brindar compatibilidad con Android 8.0
El objetivo aquí es asegurarte de que tu app existente funcione tal como está en Android 8.0 (nivel de API 26). 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
.
Preparar un dispositivo con Android 8.0
- Si tienes un dispositivo compatible (Pixel, Pixel XL, Pixel C, Nexus 5X, Nexus 6P o Nexus Player), sigue las instrucciones para escribir en la memoria flash del dispositivo.
- También puedes descargar la imagen del sistema de Android 8.0 para Android Emulator. Aparecerá en el SDK Manager de Android 8.0 como Google APIs Intel x86 Atom System Image.
Nota: La imagen del sistema de Android 8.0 está disponible para descargar desde Android Studio 3.0 y versiones posteriores. Si quieres obtener más información, consulta la sección que se incluye más abajo para obtener el SDK de Android 8.0.
Cómo realizar pruebas de compatibilidad
En general, probar la compatibilidad con Android 8.0 (nivel de API 26) 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 8.0 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 | Más referencia |
---|---|---|
Actualizaciones menos frecuentes de ubicación en segundo plano | Si tu app recibe actualizaciones de ubicación desde un servicio en segundo plano, recibirá actualizaciones menos frecuentes en Android 8.0 (nivel de API 26) en comparación con versiones anteriores de Android. Específicamente, un servicio en segundo plano no puede recibir actualizaciones de ubicación más de unas pocas veces por hora. Sin embargo, mientras la app está en primer plano, la tasa de actualizaciones de ubicación no cambia. | Límites de ubicación en segundo plano |
Ya no es compatible un total de net.hostname
|
La consulta de la propiedad del sistema net.hostname produce un resultado nulo.
|
Ninguno |
Nueva excepción de send(DatagramPacket) |
El método send(DatagramPacket) arroja una SocketException si el método connect(InetAddress, int) ejecutado anteriormente falla.
|
Cambios en el comportamiento: conectividad de red y HTTP(S) |
NullPointerException adecuado a partir de métodos AbstractCollection
|
AbstractCollection.removeAll(null) y AbstractCollection.retainAll(null) ahora siempre arrojan una NullPointerException . Antes, no se arrojaba NullPointerException 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 colecciones |
NullPointerException correspondiente de
Currency.getDisplayName(null)
|
Llamar a Currency.getDisplayName(null) arroja una NullPointerException .
|
Cambios en el comportamiento: configuración regional e internacionalización |
Para obtener una lista más exhaustiva de los cambios de comportamiento en Android 8.0 (nivel de API 26), consulta también Cambios de comportamiento en Android 8.0.
Actualiza tu versión de destino y usa funciones de Android 8.0
En esta sección, se explica cómo habilitar la compatibilidad total con Android 8.0 (nivel de API 26) actualizando targetSdkVersion
a la versión 26 y agregando nuevas funciones disponibles en Android 8.0.
Además de ofrecerte nuevas APIs, Android 8.0 presenta algunos cambios de comportamiento cuando actualizas tu targetSdkVersion
a la versión 26. 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 8.0.
Nota: Los pasos descritos anteriormente para garantizar la compatibilidad con la plataforma son un requisito previo para orientar tu app a Android 8.0. Por lo tanto, asegúrate de completarlos primero.
Obtener el SDK de Android 8.0
Puedes obtener los paquetes del SDK para compilar tu app con Android 8.0 (nivel de API 26) usando la versión más reciente de Android Studio (se recomienda Android Studio 3.0 o versiones posteriores). Android Studio 3.0 y versiones posteriores incluyen herramientas para ayudarte con las funciones de Android 8.0, como íconos adaptables y fuentes descargables. Si aún no necesitas esas funciones, puedes usar la versión estable de Android Studio 2.3.3 para compilar tu app con Android 8.0 y usar las nuevas APIs.
Para configurar cualquiera de las versiones de Android Studio, sigue estos pasos:
- Inicia Android Studio y haz clic en Tools > SDK Manager para abrir SDK Manager.
- En la pestaña SDK Platforms, marca Show Package Details. Debajo de Versión preliminar de Android 8.0, verifica lo siguiente:
- Plataforma 26 del SDK de Android
- Google APIs Intel x86 Atom System Image (solo se requiere para el emulador)
- Cambia a la pestaña SDK Tools y marca todos los elementos que tengan actualizaciones disponibles (haz clic en cada casilla de verificación que muestra un guion ). Esto debe incluir las versiones más recientes de los siguientes elementos que son obligatorios:
- Herramientas de compilación del SDK de Android 26.0.0
- Herramientas de la plataforma del SDK de Android 26.0.0
- Android Emulator 26.0.0
- Haz clic en OK para instalar todos los paquetes del SDK seleccionados.
Ahora, está todo listo para que comiences a compilar con Android 8.0.
Cómo actualizar la configuración de tu compilación
Actualiza compileSdkVersion
, targetSdkVersion
y la versión de la biblioteca de compatibilidad a las últimas revisiones disponibles, por ejemplo:
android { compileSdkVersion 26 defaultConfig { targetSdkVersion 26 } ... } dependencies { compile 'com.android.support:appcompat-v7:26.0.0' } // REQUIRED: Google's new Maven repo is required for the latest // support library that is compatible with Android 8.0 repositories { google() // If you're using a version of Gradle lower than 4.1, you must instead use: // maven { // url 'https://maven.google.com' // } }
Quitar receptores de transmisión de tu archivo de manifiesto
Debido a que Android 8.0 (nivel de API 26) presenta nuevas limitaciones para los receptores de emisión, debes quitar cualquier receptor de emisión que esté registrado para intents de transmisión implícitos. Dejarlas en su lugar no dañará tu app durante la compilación ni el tiempo de ejecución, pero no tendrán ningún efecto cuando tu app se ejecute en Android 8.0.
Las transmisiones a las que solo tu app puede responder (intents de transmisión explícitos y transmisiones que se envían específicamente al nombre de paquete de tu app) siguen funcionando de la misma manera en Android 8.0.
Hay excepciones para esta restricción nueva. Para obtener una lista de transmisiones implícitas que aún funcionan en apps orientadas a Android 8.0, consulta Excepciones de transmisiones implícitas.
Prueba tu app para Android 8.0
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 8.0 (API nivel 26). 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
establecido en 26, 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 8.0.
En la tabla 2 se proporciona una lista de estas modificaciones con vínculos para acceder a más información.
Cambiar | Resumen | Más referencia |
---|---|---|
Privacidad | Android 8.0 (nivel de API 26) no admite el uso de las propiedades del 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 (nivel de API 26) aplica la regla de que los datos no deben ser ejecutables 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 verifica 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 apps orientadas a la versión del SDK para Android 8.0 (nivel de API 26) deben implementar uno o más canales de notificaciones a fin de publicar notificaciones para los usuarios. | Descripción general de la API: notificaciones |
El método List.sort()
|
Es posible que las implementaciones de este método ya no llamen a Collections.sort() o que tu app arroje una excepción debido al desbordamiento de pila.
|
Cambios en el comportamiento: Manejo de colecciones |
El método Collections.sort()
|
En las implementaciones de List, Collections.sort() ahora arroja una ConcurrentModificationException .
|
Cambios en el comportamiento: Manejo de colecciones |
Para obtener una lista más exhaustiva de los cambios de comportamiento en Android 8.0 (nivel de API 26), consulta Cambios de comportamiento en Android 8.0.
Para explorar las nuevas funciones y APIs disponibles con Android 8.0 (nivel de API 26), consulta Funciones y APIs de Android 8.0.