Ten przewodnik opisuje zmiany niezbędne do przejścia na wersję 5.0.
Aktualizacje Gradle i wtyczki Androida do obsługi Gradle
Aktualizacja wersji Gradle i wtyczki Androida do obsługi Gradle
Najpierw zaktualizuj wersje Gradle i wtyczki Androida do obsługi Gradle. Ta aktualizacja obejmuje lepszą zgodność z niektórymi zależnościami pakietu SDK (w tym Kotlin 1.9) oraz poprawki niektórych krytycznych błędów.
Ta główna wersja pakietu SDK wymaga tych wersji zależności w projekcie aplikacji na Androida:
- Gradle w wersji co najmniej 7.5.0, ale nie wyższej niż 7.6.0.
- wtyczka Androida do obsługi Gradle (AGP) w wersji 7.4.x.
Możesz kierować reklamy na użytkowników korzystających z wyższej wersji wtyczek, ale może to spowodować wyświetlanie ostrzeżeń o wycofaniu lub nieprawidłowe działanie niektórych nowych funkcji.
Aby zmienić wersję Gradle, zmodyfikuj wiersz w pliku /gradle/wrapper/gradle-wrapper.properties
projektu.
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-all.zip
Aby zmienić wersję wtyczki Androida do obsługi Gradle, zmodyfikuj 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 biblioteki Java 7 na bibliotekę 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 różni się nieco od wspomnianej 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. Przejście z Proguard lub Dexguard na R8
AGP w wersji 7.4 i nowszej używa R8 jako domyślnego narzędzia do kompresji, zaciemniania i optymalizacji pliku binarnego, więc na razie nie musisz podejmować żadnych specjalnych działań.
Jeśli projekt został przeniesiony z wersji AGP 4.0 lub nowszej, AGP może wyświetlać te ostrzeżenia dotyczące usuwania plików:
- Użycie danych
useProguard true
w plikubuild.gradle
- Użycie danych
android.enableR8=false
w plikugradle.properties
Usunięcie tych linii zwykle rozwiązuje te problemy.
Migracja z Kotlin 1.6 na 1.9
Krok 1. Przejdź na wtyczkę Kotlin Gradle 1.9.0
Zaktualizuj wersję wtyczki Kotlin Gradle w pliku build.gradle modułu na najwyższym poziomie aplikacji. Jeśli brakuje go w bloku buildscript, dodaj go do zależności.org.jetbrains.kotlin:kotlin-gradle-plugin
buildscript {
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.0"
}
}
Jeśli korzystasz z wtyczki Kotlin Gradle 1.6.X lub 1.7.X, musisz przenieść aplikację z Kotlin-synthetics. Więcej informacji znajdziesz w oficjalnym przewodniku po migracji.
Krok 2. Zaktualizuj kotlin-stdlib do wersji 1.9.0
W pliku build.gradle aplikacji zmień wartość kotlin-stblib
na 1.9.0.
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:1.9.0"
}
Pamiętaj, aby usunąć wszelkie odniesienia do kotlin-stdlib-jdk7
lub kotlin-stdlib-jdk8
. Oba te zależności zostały scalone w kotlin-stdlib
od wersji Kotlin
1.8.0.
Wycofanie usługi StatusListener
Interfejs StatusListener
został wycofany (zostanie usunięty w wersji 6) na rzecz interfejsu DriverStatusListener
.
Główne zmiany to:
- Zmień interfejs
implements
zStatusListener
naDriverStatusListener
. - Dodaj parametr
Nullable
cause
doupdateStatus
. - Zadzwoń pod numer
DriverContextBuilder.setDriverStatusListener
zamiastsetStatusListener
.
DriverStatusListener
ma tę samą strukturę co 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ą uzyskać informacje o przyczynie aktualizacji wraz z poziomem stanu błędu.
Zwykle używasz parametru cause
, aby pobrać kod błędu zwrócony przez Fleet Engine w przypadku nieudanych aktualizacji lokalizacji.
Ten 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 przedstawiamy 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());
Implementacja funkcji DriverStatusListener
jako interfejsu funkcjonalnego
DriverStatusListener
obsługuje interfejsy funkcyjne Javy 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.
}
}
});