Migrationsanleitung für Android Driver SDK 5.0

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

Quelle

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

R8, Quelle

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 in build.gradle-Datei
  • android.enableR8=false-Nutzung in gradle.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

Quelle

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

Quelle

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:

  1. implements-Schnittstelle von StatusListener ändern zu DriverStatusListener
  2. Fügen Sie updateStatus einen Nullable-cause-Parameter hinzu.
  3. Rufen Sie die DriverContextBuilder.setDriverStatusListener anstelle der setStatusListener.

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.
    }
  }
});