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
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
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 plikubuild.gradle
android.enableR8=false
w plikugradle.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
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
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-stdlib
od 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:
- Zmień interfejs
implements
zStatusListener
naDriverStatusListener
. - Dodaj parametr
Nullable
cause
doupdateStatus
. - Zadzwoń pod numer
DriverContextBuilder.setDriverStatusListener
zamiast pod numersetStatusListener
.
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.
}
}
});