In diesem Leitfaden werden die Änderungen beschrieben, die für die Migration zu Version 5.0 erforderlich sind.
Gradle- und Android-Gradle-Plug-in-Updates
Gradle- und Android-Gradle-Plug-in-Versionen aktualisieren
Aktualisieren Sie zuerst Ihre Gradle- und Android-Gradle-Plug-in-Versionen. Dieses Upgrade umfasst eine bessere Kompatibilität mit bestimmten SDK-Abhängigkeiten (einschließlich Kotlin 1.9) sowie einige kritische Fehlerkorrekturen.
Für diese Hauptversion des SDK sind die folgenden Versionsabhängigkeiten für Ihr Android-Anwendungsprojekt erforderlich:
- Eine Gradle-Version von mindestens 7.5.0, aber nicht höher als 7.6.0.
- Eine Android-Gradle-Plug-in-Version (AGP) im Bereich von 7.4.x.
Sie können eine höhere Version der Plug-ins verwenden. Es können jedoch Warnungen zu eingestellten Funktionen auftreten oder einige neue Funktionen funktionieren möglicherweise nicht.
Wenn Sie die Gradle-Version ändern möchten, ändern Sie die Zeile in der Datei /gradle/wrapper/gradle-wrapper.properties Ihres Projekts.
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-all.zip
Wenn Sie die Android-Gradle-Plug-in-Version ändern möchten, ändern Sie die Datei build.gradle, die den Block buildscript enthält. Beispiel:
buildscript {
repositories {
google()
mavenCentral()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.4.1'
}
}
Migration der Bibliothekunterstützung von Java 7 zu Java 8
Schritt 1: Unterstützung für Java 8-Bibliotheken aktivieren
Da das minimale API-Level des SDK 23 und die erforderliche AGP-Version 7.4 oder höher ist, unterscheidet sich die Konfiguration geringfügig von der in der genannten Quelldokumentation.
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'
}
Schritt 2: Von Proguard oder Dexguard zu R8 migrieren
AGP 7.4 oder höher verwendet R8 als Standardtool zum Verkleinern, Verschleiern und Optimieren der Binärdatei. An dieser Stelle sind keine besonderen Maßnahmen erforderlich.
Wenn das Projekt von AGP 4.0 oder höher migriert wird, gibt AGP möglicherweise die folgenden Warnungen zu Dateientfernungen aus:
- Verwendung von
useProguard truein der Dateibuild.gradle - Verwendung von
android.enableR8=falsein der Dateigradle.properties
Wenn Sie diese Zeilen entfernen, werden diese Probleme in der Regel behoben.
Migration von Kotlin 1.6 zu 1.9
Schritt 1: Zu Kotlin-Gradle-Plug-in 1.9.0 migrieren
Aktualisieren Sie die Kotlin-Gradle-Plug-in-Version in der Datei „build.gradle“ des Moduls auf oberster Ebene Ihrer Anwendung. Fügen Sie org.jetbrains.kotlin:kotlin-gradle-plugin in den Abhängigkeiten aus dem Block „buildscript“ hinzu, falls es fehlt.
buildscript {
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.0"
}
}
Wenn Sie vom Kotlin-Gradle-Plug-in 1.6.X oder 1.7.X kommen, müssen Sie Ihre Anwendung von Kotlin-Synthetics migrieren. Weitere Informationen finden Sie im offiziellen Migrations leitfaden.
Schritt 2: „kotlin-stdlib“ auf 1.9.0 aktualisieren
Aktualisieren Sie kotlin-stblib in der Datei „build.gradle“ Ihrer Anwendung auf 1.9.0.
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:1.9.0"
}
Entfernen Sie alle Verweise auf kotlin-stdlib-jdk7 oder kotlin-stdlib-jdk8. Beide Abhängigkeiten wurden ab Kotlin
1.8.0 in
kotlin-stdlib zusammengefasst.
Einstellung von „StatusListener“
Die Schnittstelle StatusListener wurde eingestellt und wird in Version 6 entfernt. Verwenden Sie stattdessen DriverStatusListener.
Es gibt hauptsächlich drei Änderungen:
- Ändern Sie die
implementsSchnittstelle vonStatusListenerinDriverStatusListener. - Fügen Sie
updateStatuseinenNullable-Parametercausehinzu. - Rufen Sie
DriverContextBuilder.setDriverStatusListeneranstelle vonsetStatusListenerauf.
DriverStatusListener hat dieselbe Struktur wie StatusListener. Der Hauptunterschied besteht darin, dass DriverStatusListener.updateStatus() einen zusätzlichen Parameter namens cause verwendet. So erhalten Nutzer Informationen zur Ursache eines Updates mit Fehlerstatus.
In der Regel verwenden Sie cause, um den Fehlercode abzurufen, der von Fleet Engine für fehlgeschlagene Standortupdates zurückgegeben wird.
Das folgende Beispiel zeigt, wie Sie StatusListener implementieren:
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());
Im Folgenden finden Sie ein Beispiel für die Implementierung von 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());
DriverStatusListener als funktionale Schnittstelle implementieren
DriverStatusListener unterstützt wie sein Vorgänger funktionale Java-Schnittstellen. Hier ein Beispiel:
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.
}
}
});