Panduan ini menjelaskan perubahan yang diperlukan untuk bermigrasi ke versi 5.0.
Update Plugin Gradle dan Android Gradle
Mengupgrade versi Plugin Android dan Gradle
Pertama, upgrade versi Gradle dan Plugin Android Gradle Anda. Upgrade ini mencakup kompatibilitas yang lebih baik dengan dependensi SDK tertentu (termasuk Kotlin 1.9), serta beberapa perbaikan bug penting.
Rilis utama SDK ini memerlukan dependensi versi berikut untuk project aplikasi Android Anda:
- versi Gradle setidaknya v7.5.0 tetapi tidak lebih tinggi dari v7.6.0.
- versi Plugin Android Gradle (AGP) dalam rentang v7.4.x.
Anda dapat menargetkan versi plugin yang lebih tinggi; tetapi, Anda mungkin mendapati peringatan penghentian, atau beberapa fitur baru mungkin tidak berfungsi.
Untuk mengubah versi Gradle, ubah baris dalam file
/gradle/wrapper/gradle-wrapper.properties
project Anda
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-all.zip
Untuk mengubah versi Plugin Android Gradle, ubah file build.gradle
yang
berisi blok buildscript
. Contoh:
buildscript {
repositories {
google()
mavenCentral()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.4.1'
}
}
Migrasi dukungan library Java 7 ke Java 8
Langkah 1 - Aktifkan dukungan library Java 8
Karena level API min SDK adalah 23 dan versi AGP yang diperlukan adalah 7.4+, konfigurasinya sedikit berbeda dari dokumentasi sumber yang disebutkan.
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'
}
Langkah 2 - Bermigrasi dari Proguard atau Dexguard ke R8
AGP v7.4+ menggunakan R8 sebagai alat penyingkatan, obfuscation, dan pengoptimalan default untuk biner, sehingga tidak diperlukan tindakan khusus pada tahap ini.
Jika project dimigrasikan dari AGP 4.0+, AGP dapat mengeluarkan peringatan tentang penghapusan file berikut:
- Penggunaan
useProguard true
dalam filebuild.gradle
- Penggunaan
android.enableR8=false
dalam filegradle.properties
Masalah tersebut biasanya dapat diselesaikan dengan menghapus baris tersebut.
Migrasi Kotlin 1.6 ke 1.9
Langkah 1 - Bermigrasi ke Plugin Kotlin Gradle 1.9.0
Update versi Plugin Kotlin Gradle di file build.gradle modul
tingkat atas aplikasi Anda. Pastikan untuk menambahkan org.jetbrains.kotlin:kotlin-gradle-plugin
dalam dependensi dari blok buildscript jika tidak ada.
buildscript {
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.0"
}
}
Anda harus memigrasikan aplikasi dari sintetis Kotlin jika beralih dari Plugin Kotlin Gradle 1.6.X atau 1.7.X. Baca panduan migrasi resmi untuk mengetahui informasi selengkapnya.
Langkah 2 - Upgrade kotlin-stdlib ke 1.9.0
Upgrade kotlin-stblib
ke versi 1.9.0 di file build.gradle aplikasi Anda.
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:1.9.0"
}
Pastikan untuk menghapus referensi ke kotlin-stdlib-jdk7
atau
kotlin-stdlib-jdk8
. Kedua dependensi telah digabungkan ke dalam
kotlin-stdlib
mulai dari Kotlin
1.8.0.
Penghentian penggunaan StatusListener
Antarmuka StatusListener
kini tidak digunakan lagi (akan dihapus di v6), dan digantikan oleh
DriverStatusListener
.
Ada 3 perubahan utama:
- Ubah antarmuka
implements
dariStatusListener
menjadiDriverStatusListener
. - Tambahkan parameter
Nullable
cause
keupdateStatus
. - Panggil
DriverContextBuilder.setDriverStatusListener
, bukansetStatusListener
.
DriverStatusListener
memiliki struktur yang sama dengan StatusListener
. Perbedaan utama
di antara keduanya adalah DriverStatusListener.updateStatus()
mengambil
parameter tambahan bernama cause
. Hal ini memberikan insight kepada pengguna tentang penyebab
update dengan tingkat status error.
Biasanya, Anda akan menggunakan cause
untuk mengambil kode error yang ditampilkan oleh Fleet Engine untuk pembaruan lokasi yang gagal.
Contoh berikut mengilustrasikan cara mengimplementasikan 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());
Berikut ini contoh implementasi 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());
Mengimplementasikan DriverStatusListener
sebagai antarmuka fungsional
DriverStatusListener
mendukung antarmuka fungsional Java seperti
pendahulunya. Berikut adalah contohnya:
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.
}
}
});