Przewodnik migracji pakietu Android Driver SDK 5.0

W tym przewodniku opisujemy zmiany, które należy wprowadzić, aby przejść na wersję 5.0.

Aktualizacje Gradle i wtyczki Androida do obsługi Gradle

Uaktualnianie wersji Gradle i wtyczki Androida do obsługi Gradle

Najpierw zaktualizuj wersje Gradle i wtyczki Androida do obsługi Gradle. Ta aktualizacja zapewnia lepszą zgodność z niektórymi zależnościami pakietu SDK (w tym Kotlinem 1.9) oraz zawiera ważne poprawki błędów.

Ta główna wersja pakietu SDK wymaga w projekcie aplikacji na Androida tych zależności wersji:

  • wersję Gradle co najmniej 7.5.0, ale nie nowszą niż 7.6.0;
  • wersję wtyczki Androida do obsługi Gradle (AGP) z zakresu v7.4.x.

Możesz kierować reklamy na wyższą wersję wtyczek, ale mogą pojawić się ostrzeżenia o wycofaniu lub niektóre nowe funkcje mogą nie działać.

Aby zmodyfikować wersję Gradle, zmień wiersz w pliku /gradle/wrapper/gradle-wrapper.properties projektu.

distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-all.zip

Aby zmodyfikować wersję wtyczki Androida do obsługi Gradle, zmień plik build.gradle, który zawiera blok buildscript. Na przykład:

buildscript {
    repositories {
        google()
        mavenCentral()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:7.4.1'
    }
}

Migracja z bibliotek Java 7 na biblioteki Java 8

Krok 1. Włącz obsługę biblioteki Java 8

Źródło

Minimalny poziom interfejsu API pakietu SDK to 23, a wymagana wersja AGP to 7.4 lub nowsza, więc konfiguracja nieco różni się od tej podanej w dokumentacji źródłowej.

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'
}

Krok 2. Przejdź z ProGuarda lub DexGuarda na R8

R8, źródło

AGP w wersji 7.4 i nowszych używa R8 jako domyślnego narzędzia do zmniejszania, zaciemniania i optymalizacji plików binarnych, więc na tym etapie nie musisz podejmować żadnych specjalnych działań.

Jeśli projekt został przeniesiony z AGP 4.0 lub nowszej wersji, AGP może wyświetlić te ostrzeżenia o usunięciu plików:

  • useProguard true w pliku build.gradle
  • android.enableR8=false w pliku gradle.properties

Usunięcie tych wierszy zwykle rozwiązuje te problemy.

Migracja z Kotlin 1.6 na 1.9

Krok 1. Przejdź na wtyczkę Kotlin Gradle w wersji 1.9.0

Źródło

Zaktualizuj wersję wtyczki Kotlin Gradle w pliku build.gradle modułu najwyższego poziomu aplikacji. Jeśli brakuje zależności, dodaj org.jetbrains.kotlin:kotlin-gradle-plugin w bloku buildscript.

buildscript {
  dependencies {
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.0"
  }
}

Jeśli korzystasz z wtyczki Kotlin Gradle w wersji 1.6.X lub 1.7.X, musisz przenieść aplikację z Kotlin-synthetics. Więcej informacji znajdziesz w oficjalnym przewodniku po migracji.

Krok 2. Uaktualnij kotlin-stdlib do wersji 1.9.0

Źródło

Zaktualizuj kotlin-stblib do wersji 1.9.0 w pliku build.gradle aplikacji.

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib:1.9.0"
}

Usuń wszystkie odwołania do kotlin-stdlib-jdk7 lub kotlin-stdlib-jdk8. Obie zależności zostały połączone w kotlin-stdlibod Kotlin 1.8.0.

Wycofanie StatusListener

Interfejs StatusListener został wycofany (zostanie usunięty w wersji 6) na rzecz interfejsu DriverStatusListener.

Wprowadziliśmy 3 główne zmiany:

  1. Zmień interfejs implementsStatusListener na DriverStatusListener.
  2. Dodaj parametr Nullable cause do updateStatus.
  3. Zadzwoń pod numer DriverContextBuilder.setDriverStatusListener zamiast pod numer setStatusListener.

DriverStatusListener ma taką samą strukturę jak StatusListener. Główna różnica między nimi polega na tym, że funkcja DriverStatusListener.updateStatus() przyjmuje dodatkowy parametr o nazwie cause. Dzięki temu użytkownicy mogą dowiedzieć się, co spowodowało błąd aktualizacji.

Zwykle używasz cause, aby pobrać kod błędu zwrócony przez Fleet Engine w przypadku nieudanych aktualizacji lokalizacji.

Poniższy przykład pokazuje, jak wdrożyć 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());

Poniżej znajdziesz przykładową implementację 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());

Implementowanie interfejsu DriverStatusListener jako interfejsu funkcyjnego

DriverStatusListener obsługuje interfejsy funkcyjne Java tak samo jak jego poprzednik. Oto przykład:

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