Questa guida descrive le modifiche necessarie per eseguire la migrazione alla versione 5.0.
Aggiornamenti di Gradle e del plug-in Android per Gradle
Eseguire l'upgrade delle versioni di Gradle e del plug-in Android per Gradle
Innanzitutto, esegui l'upgrade delle versioni di Gradle e del plug-in Android per Gradle. Questo upgrade include una migliore compatibilità con alcune dipendenze dell'SDK (incluso Kotlin 1.9), nonché alcune correzioni di bug critiche.
Questa release principale dell'SDK richiede le seguenti dipendenze di versione per il progetto di applicazione Android:
- una versione di Gradle almeno 7.5.0, ma non superiore alla 7.6.0.
- una versione del plug-in Android per Gradle (AGP) compresa tra la v7.4.x.
Puoi scegliere come target una versione più recente dei plug-in, ma potresti visualizzare avvisi di ritiro o alcune nuove funzionalità potrebbero non funzionare.
Per modificare la versione di Gradle, modifica la riga nel file /gradle/wrapper/gradle-wrapper.properties
del progetto
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-all.zip
Per modificare la versione del plug-in Android per Gradle, modifica il file build.gradle
che contiene il blocco buildscript
. Ad esempio:
buildscript {
repositories {
google()
mavenCentral()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.4.1'
}
}
Migrazione del supporto delle librerie da Java 7 a Java 8
Passaggio 1: attiva il supporto della libreria Java 8
Poiché il livello API SDK minimo è 23 e la versione AGP richiesta è 7.4 o successiva, la configurazione è leggermente diversa dalla documentazione dell'origine indicata.
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'
}
Passaggio 2: esegui la migrazione da ProGuard o Dexguard a R8
AGP 7.4 e versioni successive utilizzano R8 come strumento di ottimizzazione, offuscamento e riduzione per il file binario, quindi non è necessaria alcuna azione speciale a questo punto.
Se la migrazione del progetto viene eseguita da AGP 4.0 o versioni successive, AGP potrebbe emettere i seguenti avvisi sulla rimozione dei file:
- Utilizzo di
useProguard true
nel filebuild.gradle
- Utilizzo di
android.enableR8=false
nel filegradle.properties
La rimozione di queste righe di solito risolve i problemi.
Migrazione da Kotlin 1.6 a 1.9
Passaggio 1: esegui la migrazione al plug-in Gradle di Kotlin 1.9.0
Aggiorna la versione del plug-in Gradle di Kotlin nel file build.gradle del modulo di primo livello dell'applicazione. Assicurati di aggiungere org.jetbrains.kotlin:kotlin-gradle-plugin
nelle dipendenze del blocco buildscript, se mancante.
buildscript {
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.0"
}
}
Devi eseguire la migrazione dell'applicazione da Kotlin-synthetics se provieni da Kotlin Gradle Plugin 1.6.X o 1.7.X. Per ulteriori informazioni, consulta la guida alla migrazione ufficiale.
Passaggio 2: esegui l'upgrade di kotlin-stdlib alla versione 1.9.0
Esegui l'upgrade di kotlin-stblib
alla versione 1.9.0 nel file build.gradle dell'applicazione.
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:1.9.0"
}
Assicurati di rimuovere tutti i riferimenti a kotlin-stdlib-jdk7
o
kotlin-stdlib-jdk8
. Entrambe le dipendenze sono state consolidate in
kotlin-stdlib
a partire da Kotlin
1.8.0.
Ritiro di StatusListener
L'interfaccia StatusListener
è stata ritirata (verrà rimossa nella versione 6) a favore di DriverStatusListener
.
Esistono principalmente tre modifiche:
- Modifica l'interfaccia
implements
daStatusListener
aDriverStatusListener
. - Aggiungi un parametro
Nullable
cause
aupdateStatus
. - Chiama il numero
DriverContextBuilder.setDriverStatusListener
anzichésetStatusListener
.
DriverStatusListener
condivide la stessa struttura di StatusListener
. La principale
differenza tra i due è che DriverStatusListener.updateStatus()
accetta un
parametro aggiuntivo denominato cause
. In questo modo, gli utenti possono ottenere informazioni sulla causa di un update con livello di stato di errore.
In genere, utilizzi cause
per recuperare il codice di errore restituito da Fleet Engine per gli aggiornamenti della posizione non riusciti.
L'esempio seguente illustra come implementare 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());
Di seguito è riportata un'implementazione di esempio di 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
come interfaccia funzionale
DriverStatusListener
supporta le interfacce funzionali Java come il suo predecessore. Ecco un esempio:
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.
}
}
});