Questa guida descrive le modifiche necessarie per la migrazione alla versione 5.0.
Aggiornamenti di Gradle e del plug-in Android per Gradle
Esegui 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 critici.
Questa release principale dell'SDK richiede le seguenti dipendenze di versione per il progetto della tua app per Android:
- Una versione di Gradle almeno v7.5.0, ma non superiore a v7.6.0.
- Una versione del plug-in Android per Gradle (AGP) compresa nell'intervallo v7.4.x.
Puoi scegliere come target una versione più recente dei plug-in, ma potresti riscontrare 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 della libreria da Java 7 a Java 8
Passaggio 1: attiva il supporto della libreria Java 8
Poiché il livello API minimo dell'SDK è 23 e la versione AGP richiesta è 7.4+, la configurazione è leggermente diversa dalla documentazione di origine menzionata.
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 v7.4+ utilizza R8 come strumento predefinito per la riduzione, l'offuscamento e l'ottimizzazione del file binario, quindi a questo punto non è necessaria alcuna azione speciale.
Se il progetto viene migrato da AGP 4.0+, AGP potrebbe emettere i seguenti avvisi relativi alla rimozione dei file:
- Utilizzo di
useProguard truenel filebuild.gradle - Utilizzo di
android.enableR8=falsenel filegradle.properties
La rimozione di queste righe in genere risolve questi problemi.
Migrazione da Kotlin 1.6 a 1.9
Passaggio 1: esegui la migrazione al plug-in Kotlin per Gradle 1.9.0
Aggiorna la versione del plug-in Kotlin per Gradle 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 nel caso in cui manchi.
buildscript {
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.0"
}
}
Se utilizzi il plug-in Kotlin per Gradle 1.6.X o 1.7.X, devi eseguire la migrazione dell'applicazione da Kotlin-synthetics. 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. A partire da Kotlin
1.8.0, entrambe le dipendenze sono state consolidate in
kotlin-stdlib.
Ritiro di StatusListener
L'interfaccia StatusListener è ora ritirata (verrà rimossa nella versione 6) a favore
di DriverStatusListener.
Le modifiche principali sono tre:
- Modifica l'interfaccia
implementsdaStatusListeneraDriverStatusListener. - Aggiungi un parametro
NullablecauseaupdateStatus. - Chiama
DriverContextBuilder.setDriverStatusListeneranziché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 conoscere la causa di un aggiornamento con livello di stato di errore.
In genere, utilizzeresti cause per recuperare il codice di errore restituito da Fleet Engine per gli aggiornamenti della posizione non riusciti.
Il seguente esempio 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 è riportato un esempio di implementazione 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 proprio 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.
}
}
});