In diesem Leitfaden werden die Änderungen beschrieben, die für die Migration zu Version 5.0 erforderlich sind.
Updates für das Gradle- und das Android-Gradle-Plug-in
Versionen des Gradle- und Android-Gradle-Plug-ins aktualisieren
Führen Sie zuerst ein Upgrade der Versionen des Gradle-Plug-ins und des Android-Gradle-Plug-ins durch. Dieses Upgrade bietet eine bessere Kompatibilität mit bestimmten SDK-Abhängigkeiten. (einschließlich Kotlin 1.9) sowie einige wichtige Fehlerkorrekturen.
Für diesen SDK-Hauptrelease sind die folgenden Versionsabhängigkeiten für dein Projekt für Android-Anwendung:
- eine Gradle-Version, die mindestens Version 7.5.0, aber nicht höher als Version 7.6.0 ist.
- eine AGP-Version (Android Gradle Plugin) im Bereich Version 7.4.x.
Sie können eine höhere Version der Plug-ins als Ziel verwenden. Sie könnten jedoch oder einige neue Funktionen möglicherweise nicht mehr funktionieren.
Wenn Sie die Gradle-Version ändern möchten, ändern Sie die Zeile im
/gradle/wrapper/gradle-wrapper.properties
Datei
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-all.zip
Um die Version des Android-Gradle-Plug-ins zu ändern, passen Sie die Datei build.gradle
an, die
enthält den buildscript
-Block. Beispiel:
buildscript {
repositories {
google()
mavenCentral()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.4.1'
}
}
Migration der Java 7- zur Java 8-Bibliothek
Schritt 1: Unterstützung der Java 8-Bibliothek aktivieren
Da das Mindest-API-Level des SDK 23 und die erforderliche AGP-Version 7.4 oder höher ist, gilt für Konfiguration sich geringfügig von der erwähnten Quelldokumentation unterscheidet.
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 und höher verwendet R8 als Standardtool zum Verkleinern, Verschleieren und Optimieren für die Binärdatei, sodass an dieser Stelle keine gesonderten Maßnahmen erforderlich sind.
Wenn das Projekt von AGP 4.0 oder höher migriert wird, gibt AGP möglicherweise die folgenden Warnungen aus: zum Entfernen von Dateien:
useProguard true
-Nutzung inbuild.gradle
-Dateiandroid.enableR8=false
-Nutzung ingradle.properties
-Datei
Durch das Entfernen dieser Zeilen werden diese Probleme normalerweise behoben.
Migration von Kotlin 1.6 zu 1.9
Schritt 1: Zu Kotlin-Gradle-Plug-in 1.9.0 migrieren
Version des Kotlin-Gradle-Plug-ins im Top-Level-Modul Ihrer Anwendung aktualisieren
build.gradle-Datei herunter. org.jetbrains.kotlin:kotlin-gradle-plugin
hinzufügen
in die Abhängigkeiten
aus dem Buildscript-Block ein, falls er fehlt.
buildscript {
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.0"
}
}
Sie müssen Ihre Anwendung von Kotlin-synthetics migrieren, aus Kotlin-Gradle-Plug-in 1.6.X oder 1.7.X. Weitere Informationen finden Sie in der offiziellen Migration Leitfaden für erhalten Sie weitere Informationen.
Schritt 2: Upgrade von kotlin-stdlib auf 1.9.0 durchführen
Aktualisieren Sie kotlin-stblib
in der build.gradle-Datei 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 in
kotlin-stdlib
ab Kotlin
1.8.0.
Einstellung von StatusListener
Die StatusListener
-Oberfläche wurde eingestellt und wird in Version 6 entfernt.
von DriverStatusListener
.
Es gibt im Wesentlichen drei Änderungen:
implements
-Schnittstelle vonStatusListener
ändern zuDriverStatusListener
- Fügen Sie
updateStatus
einenNullable
-cause
-Parameter hinzu. - Rufen Sie die
DriverContextBuilder.setDriverStatusListener
anstelle dersetStatusListener
.
DriverStatusListener
hat dieselbe Struktur wie StatusListener
. Die wichtigsten
Der Unterschied besteht darin, dass DriverStatusListener.updateStatus()
zusätzlichen Parameter namens cause
. So erhalten Nutzer Informationen zur Ursache eines
mit dem Fehlerstatus-Level aktualisiert.
In der Regel verwenden Sie cause
, um den von der Flotte zurückgegebenen Fehlercode abzurufen
Engine für fehlgeschlagene Standortaktualisierungen.
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());
Hier sehen Sie ein Beispiel für eine DriverStatusListener
-Implementierung:
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 funktionale Java-Schnittstellen wie seine
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.
}
}
});