Android 8.0 (nivel de API 26) presenta cambios de comportamiento y funciones y APIs nuevas que que puedes aprovechar en tus apps. En este documento, se ofrece una descripción general de los pasos para migrar tus apps a Android 8.0 en dos fases clave:
- Cómo garantizar 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 la
targetSdkVersion
de tu app, pero con cambios menores que podrían ser necesarias. - Actualiza tu versión de destino y usa las funciones de Android 8.0
Cuando estés listo para aprovechar las nuevas funciones de la plataforma, actualiza tu
targetSdkVersion
a 26, verifica que la app continúe funcionen como se espera y, luego, empezar a usar APIs nuevas.
Asegúrate de brindar compatibilidad con Android 8.0
El objetivo en este caso es asegurarte de que tu app existente funcione tal como está en Android 8.0
(nivel de API 26). Como algunos cambios en la plataforma
podrían afectar el comportamiento de tu app
podrían ser necesarios algunos ajustes, pero no hace falta usar APIs nuevas ni
cambia tu targetSdkVersion
.
Cómo preparar un dispositivo con Android 8.0
- Si tienes un dispositivo compatible (Pixel, Pixel XL, Pixel C, Nexus 5X, Nexus 6P o Nexus) reproductor), sigue el instrucciones para escribir en la memoria flash del dispositivo.
- También puedes descargar la imagen del sistema Android 8.0 para Android Emulator. Se incluye en la
SDK Manager en
Android 8.0 como Google APIs Intel x86 Atom System Image.
Nota: La imagen del sistema de Android 8.0 se puede descargar en Android Studio 3.0 y versiones posteriores Si quieres obtener más información, consulta la siguiente sección para obtener el SDK de Android 8.0.
Cómo realizar pruebas de compatibilidad
En general, las pruebas de 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 las pruebas.
Sin embargo, hay otro aspecto para las pruebas: Android 8.0 presenta cambios en la versión
que puede 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
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 8.0.
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, recibe menos frecuencia en Android 8.0 (nivel de API 26) en comparación con versiones anteriores de Android. Específicamente, un fondo servicio no puede recibir actualizaciones de ubicación más de unas cuantas veces por hora. Sin embargo, si bien esté en primer plano, la tasa de actualizaciones de ubicación no se modificará. | 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 da como resultado un resultado nulo.
|
Ninguno |
Nueva excepción de send(DatagramPacket) |
El método send(DatagramPacket) arroja una SocketException
si falla el método connect(InetAddress, int) ejecutado anteriormente.
|
Cambios en el comportamiento: conectividad de red y HTTP(S) |
NullPointerException correspondiente de
AbstractCollection métodos
|
AbstractCollection.removeAll(null) y
Ahora AbstractCollection.retainAll(null) siempre arroja una
NullPointerException ;
anteriormente, no se arrojaba NullPointerException cuando la colección estaba vacía.
Este cambio hace que el comportamiento se adecue a la documentación.
|
Cambios en el comportamiento: manejo de las colecciones |
NullPointerException correspondiente de
Currency.getDisplayName(null)
|
Llamando a Currency.getDisplayName(null)
arroja una NullPointerException .
|
Cambios de comportamiento: internacionalización y configuración regional |
Para obtener una lista más amplia de los cambios de comportamiento en Android 8.0 (nivel de API 26), también consulta 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) mediante la actualización de tu targetSdkVersion
a 26
y agregar nuevas funciones disponibles en Android 8.0.
Además de ofrecerte nuevas APIs, Android 8.0 presenta algunos comportamientos
cambia cuando actualizas tu targetSdkVersion
a 26. 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 para apps orientadas a Android 8.0.
Nota: Los pasos descritos anteriormente para garantizar la compatibilidad con la plataforma son requisitos previos para orientar tu app a Android 8.0, así que asegúrate de completarlos primero.
Cómo 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) con la última versión de Android Studio (se recomienda Android Studio 3.0 o una versión posterior). Android Studio 3.0 y versiones posteriores incluyen herramientas para ayudarte con las funciones de Android 8.0. como los í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 APIs nuevas
Para configurar cualquiera de las versiones de Android Studio, sigue estos pasos:
- Inicia Android Studio y abre SDK Manager haciendo clic en Herramientas > SDK Manager.
- En la pestaña SDK Platforms, marca Show Package Details. Inferior a
Verifica lo siguiente en la vista previa de Android 8.0:
- Plataforma 26 del SDK de Android
- Imagen del sistema con Intel x86 Atom de las APIs de Google (solo se requiere para el emulador)
- Cambia a la pestaña SDK Tools y comprueba todos los elementos que tengan actualizaciones disponibles (haz clic en
cada casilla de verificación que muestra un guion
). Se deben incluir las versiones más recientes de los siguientes elementos que son necesarios:
- 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.
Ya 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 la versión más reciente
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 limitaciones para receptores de emisión, debes quitar cualquier receptor de emisión que se registran para intents de transmisión implícitos. Dejarlas en su lugar no daña tu app durante el tiempo de compilación o ejecución, pero no tienen efecto cuando tu app se ejecuta en Android 8.0.
Transmisiones a las que solo tu app puede responder: intents de transmisión explícitas y enviados específicamente al nombre del paquete de tu app, sigue funcionando de la misma manera Android 8.0
Hay excepciones para esta restricción nueva. Para un 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 para asegurarte de que funcione correctamente cuando se oriente a Android 8.0. (nivel de API 26). Este es otro buen momento para repasar el App principal lineamientos de calidad y mejor Prácticas para realizar pruebas.
Cuando compilas tu app con 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 incluso
puede dañar tu app por completo, incluso si no implementas
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.
Tabla 2: Cambios clave que afectan a las apps
cuando targetSdkVersion
se establece en 26.
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 | Para las bibliotecas nativas, Android 8.0 (nivel de API 26) aplica la regla que establece 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 | Apps orientadas a la versión Android 8.0 (nivel de API 26) del SDK implementar uno o más canales de notificaciones para publicar notificaciones a 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 recopilaciones |
El método Collections.sort()
|
En las implementaciones de List, Collections.sort() ahora arroja un
ConcurrentModificationException
|
Comportamiento Cambios: manejo de las colecciones |
Para obtener una lista más amplia 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 Características y APIs de Android 8.0