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 bietet eine bessere Kompatibilität mit bestimmten SDK-Abhängigkeiten (einschließlich Kotlin 1.9) sowie einige wichtige Fehlerbehebungen.
Für diese Hauptversion des SDK sind die folgenden Versionsabhängigkeiten für Ihr Android-Anwendungsprojekt erforderlich:
- eine Gradle-Version von mindestens v7.5.0, aber nicht höher als v7.6.0.
- eine Version des Android-Gradle-Plug-ins (AGP) im Bereich von v7.4.x.
Sie können eine höhere Version der Plug-ins als Ziel festlegen. Allerdings erhalten Sie dann möglicherweise Warnungen zur Einstellung oder einige neue Funktionen funktionieren nicht.
Wenn Sie die Gradle-Version ändern möchten, bearbeiten Sie die entsprechende 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 Version des Android-Gradle-Plug-ins ändern möchten, bearbeiten 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 von Java 7 zu Java 8-Bibliotheken
Schritt 1: Unterstützung für Java 8-Bibliotheken aktivieren
Da das SDK-Mindest-API-Level 23 und die erforderliche AGP-Version 7.4+ ist, weicht die Konfiguration geringfügig von der genannten Quelldokumentation ab.
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
In AGP 7.4+ wird R8 als Standardtool zum Verkleinern, Verschleiern und Optimieren des Binärcodes verwendet. Daher sind an dieser Stelle keine besonderen Maßnahmen erforderlich.
Wenn das Projekt von AGP 4.0 oder höher migriert wird, gibt AGP möglicherweise die folgenden Warnungen zum Entfernen von Dateien aus:
useProguard true
-Nutzung in der Dateibuild.gradle
android.enableR8=false
-Nutzung in 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: Zum Kotlin-Gradle-Plug-in 1.9.0 migrieren
Aktualisieren Sie die Version des Kotlin-Gradle-Plug-ins 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 des buildscript-Blocks hinzu, falls es fehlt.
buildscript {
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.0"
}
}
Wenn Sie das Kotlin-Gradle-Plug-in 1.6.X oder 1.7.X verwenden, müssen Sie Ihre Anwendung von Kotlin-Synthetics migrieren. Weitere Informationen finden Sie in der offiziellen Migrationsanleitung.
Schritt 2: kotlin-stdlib auf Version 1.9.0 aktualisieren
Aktualisieren Sie kotlin-stblib
in der Datei „build.gradle“ Ihrer Anwendung auf Version 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 StatusListener
-Schnittstelle ist jetzt eingestellt (wird in Version 6 entfernt) und wird durch DriverStatusListener
ersetzt.
Es gibt hauptsächlich drei Änderungen:
- Ändern Sie die
implements
-Schnittstelle vonStatusListener
inDriverStatusListener
. - Fügen Sie
updateStatus
einenNullable
-Parameter mit dem Wertcause
hinzu. - Rufen Sie
DriverContextBuilder.setDriverStatusListener
anstelle vonsetStatusListener
auf.
DriverStatusListener
hat dieselbe Struktur wie StatusListener
. Der Hauptunterschied besteht darin, dass DriverStatusListener.updateStatus()
einen zusätzlichen Parameter namens cause
akzeptiert. So erhalten Nutzer Informationen zur Ursache eines Updates mit Fehlerstatus.
Normalerweise verwenden Sie cause
, um den Fehlercode abzurufen, der von Fleet Engine für fehlgeschlagene Standortaktualisierungen zurückgegeben wird.
Das folgende Beispiel zeigt, wie StatusListener
implementiert wird:
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 Java-Funktionsschnittstellen wie sein Vorgänger. 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.
}
}
});