En esta guía, se describen los cambios necesarios para migrar a la versión 5.0.
Actualizaciones de Gradle y del complemento de Android para Gradle
Actualiza las versiones de Gradle y del complemento de Android para Gradle
Primero, actualiza las versiones de Gradle y del complemento de Android para Gradle. Esta actualización incluye una mejor compatibilidad con ciertas dependencias del SDK (incluido Kotlin 1.9), así como algunas correcciones de errores críticos.
Esta versión principal del SDK requiere las siguientes dependencias de versión para tu proyecto de aplicación para Android:
- Una versión de Gradle, como mínimo, v7.5.0, pero no superior a v7.6.0
- Una versión del complemento de Android para Gradle (AGP) en el rango de la versión 7.4.x
Puedes segmentar versiones más recientes de los complementos. Sin embargo, es posible que recibas advertencias de baja o que algunas funciones nuevas no funcionen.
Para modificar la versión de Gradle, modifica la línea en el archivo /gradle/wrapper/gradle-wrapper.properties
de tu proyecto.
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-all.zip
Para modificar la versión del complemento de Android para Gradle, modifica el archivo build.gradle
que contiene el bloque buildscript
. Por ejemplo:
buildscript {
repositories {
google()
mavenCentral()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.4.1'
}
}
Migración de la compatibilidad con la biblioteca de Java 7 a Java 8
Paso 1: Habilita la compatibilidad con la biblioteca de Java 8
Dado que el nivel de API mínimo del SDK es 23 y la versión de AGP requerida es 7.4 o posterior, la configuración es ligeramente diferente de la documentación de la fuente mencionada.
buildscript {
repositories {
google()
mavenCentral()
jcenter()
maven {
url = uri("https://storage.googleapis.com/r8-releases/raw")
}
}
dependencies {
classpath 'com.android.tools:r8:8.0.46'
classpath 'com.android.tools.build:gradle:7.4.1'
}
}
android {
compileOptions {
// Flag to enable support for the new language APIs
coreLibraryDesugaringEnabled true
// Sets Java compatibility to Java 8
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs_nio:2.0.3'
}
Paso 2: Migra de Proguard o Dexguard a R8
AGP v7.4 y versiones posteriores usan R8 como herramienta predeterminada de reducción, ofuscación y optimización para el código binario, por lo que no se requiere ninguna acción especial en este punto.
Si el proyecto se migra desde AGP 4.0 o versiones posteriores, es posible que AGP emita las siguientes advertencias sobre la eliminación de archivos:
- Uso de
useProguard true
en el archivobuild.gradle
- Uso de
android.enableR8=false
en el archivogradle.properties
Por lo general, quitar estas líneas resuelve esos problemas.
Migración de Kotlin 1.6 a 1.9
Paso 1: Migra al complemento de Kotlin para Gradle 1.9.0
Actualiza la versión del complemento de Kotlin Gradle en el archivo build.gradle del módulo de nivel superior de tu aplicación. Asegúrate de agregar org.jetbrains.kotlin:kotlin-gradle-plugin
en las dependencias del bloque buildscript en caso de que falte.
buildscript {
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.0"
}
}
Debes migrar tu aplicación de Kotlin-synthetics si vienes del complemento de Kotlin para Gradle 1.6.X o 1.7.X. Consulta la guía de migración oficial para obtener más información.
Paso 2: Actualiza kotlin-stdlib a la versión 1.9.0
Actualiza kotlin-stblib
a la versión 1.9.0 en el archivo build.gradle de tu aplicación.
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:1.9.0"
}
Asegúrate de quitar todas las referencias a kotlin-stdlib-jdk7
o kotlin-stdlib-jdk8
. Ambas dependencias se consolidaron en kotlin-stdlib
a partir de Kotlin 1.8.0.
Baja de StatusListener
La interfaz de StatusListener
ahora está obsoleta (se quitará en la versión 6) y se reemplazó por DriverStatusListener
.
Principalmente, hay 3 cambios:
- Cambia la interfaz
implements
deStatusListener
aDriverStatusListener
. - Agrega un parámetro
Nullable
cause
aupdateStatus
. - Llama a
DriverContextBuilder.setDriverStatusListener
en lugar de asetStatusListener
.
DriverStatusListener
comparte la misma estructura que StatusListener
. La principal diferencia entre ellas es que DriverStatusListener.updateStatus()
toma un parámetro adicional llamado cause
. Esto proporciona a los usuarios estadísticas sobre la causa de una actualización con un nivel de estado de error.
Por lo general, usarías cause
para recuperar el código de error que devuelve Fleet Engine para las actualizaciones de ubicación fallidas.
En el siguiente ejemplo, se muestra cómo implementar StatusListener
:
class MyStatusListener implements StatusListener {
/** Called when background status is updated during actions such as location reporting. */
@Override
public void updateStatus(
StatusLevel statusLevel, StatusCode statusCode, String statusMsg) {
// Implementation
}
}
// Inject StatusListener into DriverContext.
DriverContextBuilder.setStatusListener(new MyStatusListener());
A continuación, se muestra un ejemplo de implementación de DriverStatusListener
:
class MyStatusListener implements DriverStatusListener {
/** Called when background status is updated during actions such as location reporting. */
@Override
public void updateStatus(
StatusLevel statusLevel, StatusCode statusCode, String statusMsg, @Nullable Throwable cause) {
// Existing implementation
if (cause != null && cause instanceof StatusRuntimeException) {
if (Status.NOT_FOUND.getCode().equals(cause.getStatus().getCode())) {
// NOT_FOUND gRPC exception thrown by Fleet Engine.
}
}
}
}
DriverContextBuilder.setStatusListener(new MyStatusListener());
Implementa DriverStatusListener
como una interfaz funcional
DriverStatusListener
admite interfaces funcionales de Java al igual que su predecesor. Aquí tienes un ejemplo:
DriverContextBuilder.setDriverStatusListener((statusLevel, statusCode, statusMsg, cause) -> {
if (cause != null && cause instanceof StatusRuntimeException) {
if (Status.NOT_FOUND.getCode().equals(cause.getStatus().getCode())) {
// NOT_FOUND gRPC exception thrown by Fleet Engine.
}
}
});