En esta guía, se describen los cambios necesarios para migrar a la versión 5.0.
Actualizaciones del complemento de Android para Gradle y Gradle
Cómo actualizar las versiones del complemento de Gradle para Android y Gradle
Primero, actualiza las versiones del complemento de Gradle para Android y Gradle. Esta actualización incluye una mejor compatibilidad con ciertas dependencias de 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, 7.5.0, pero no posterior a la 7.6.0
- una versión del complemento de Android para Gradle (AGP) en el rango de la v7.4.x.
Puedes apuntar a una versión posterior de los complementos. Sin embargo, puedes ejecutar en advertencias de baja, o es posible que no funcionen algunas funciones nuevas.
Para modificar la versión de Gradle, modifica la línea en el archivo
/gradle/wrapper/gradle-wrapper.properties
archivo
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 compatibilidad con la biblioteca de Java 7 a Java 8
Paso 1: Habilita la compatibilidad con la biblioteca de Java 8
Como el nivel de API mínimo del SDK es 23 y la versión requerida del AGP es 7.4 o superior, el es un poco diferente de la documentación de origen 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 la herramienta predeterminada de reducción, ofuscación y optimización. para el objeto binario, por lo que no se necesita ninguna acción especial en este punto.
Si se migra el proyecto desde AGP 4.0 y versiones posteriores, AGP puede generar 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 Gradle para Kotlin 1.9.0
Actualiza la versión del complemento de Kotlin para Gradle en el módulo de nivel superior de tu aplicación
build.gradle. 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 desde la sintaxis de Kotlin en caso de que llegues del complemento de Kotlin para Gradle 1.6.X o 1.7.X. Consulta el sitio web de migración guía para más información.
Paso 2: Actualiza kotlin-stdlib a 1.9.0
Actualiza kotlin-stblib
a 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 cualquier referencia a kotlin-stdlib-jdk7
o
kotlin-stdlib-jdk8
Ambas dependencias se consolidaron
kotlin-stdlib
a partir de Kotlin
1.8.0.
Baja de StatusListener
La interfaz StatusListener
dejó de estar disponible (se quitará en la versión 6) y se prefiere
de 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
. El principal
La diferencia entre ellos es que DriverStatusListener.updateStatus()
toma un
parámetro adicional llamado cause
. Esto proporciona información a los usuarios sobre la causa de un
con el nivel de estado de error.
Por lo general, debes usar cause
para recuperar el código de error que muestra Fleet
para las actualizaciones de ubicación con errores.
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 una implementación de DriverStatusListener
de muestra:
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
antecesora. Aquí hay 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.
}
}
});