Plugin Android Gradle 7.0.0 (Juli 2021)
Plugin Android Gradle 7.0.0 merupakan rilis utama yang menyertakan berbagai peningkatan dan fitur baru.
7.0.1 (Agustus 2021)
Update minor ini menyertakan berbagai perbaikan bug. Untuk melihat daftar perbaikan bug penting, baca postingan terkait di blog Update Rilis.
Kompatibilitas
Versi minimum | Versi default | Catatan | |
---|---|---|---|
Gradle | 7.0.2 | 7.0.2 | Untuk mempelajari lebih lanjut, lihat mengupdate Gradle. |
SDK Build Tools | 30.0.2 | 30.0.2 | Instal atau konfigurasi SDK Build Tools. |
NDK | T/A | 21.4.7075529 | Instal atau konfigurasi versi lain dari NDK. |
JDK | 11 | 11 | Untuk mempelajari lebih lanjut, lihat menyetel versi JDK. |
JDK 11 diperlukan untuk menjalankan AGP 7.0
Saat menggunakan plugin Android Gradle 7.0 untuk mem-build aplikasi, JDK 11 kini diperlukan untuk menjalankan Gradle. Android Studio Arctic Fox memaketkan JDK 11 dan mengonfigurasi Gradle untuk menggunakannya secara default, sehingga sebagian besar pengguna Android Studio tidak perlu melakukan perubahan konfigurasi apa pun ke project mereka.
Jika Anda perlu menetapkan versi JDK yang digunakan oleh AGP di dalam Android Studio secara manual, Anda harus menggunakan JDK 11 atau yang lebih tinggi.
Saat menggunakan AGP yang tidak bergantung pada Android Studio, upgrade versi JDK dengan
menyetel Variabel lingkungan JAVA_HOME
atau opsi command line -Dorg.gradle.java.home
ke direktori penginstalan JDK 11 Anda.
Perhatikan bahwa SDK Manager dan AVD Manager dalam paket SDK Tools yang tidak digunakan lagi tidak berfungsi dengan JDK 11. Untuk terus menggunakan SDK Manager dan AVD Manager dengan AGP 7.0 dan yang lebih tinggi, Anda harus beralih ke versi baru alat di paket Alat Command Line Android SDK saat ini.
Variant API stabil
Variant API yang baru sekarang menjadi stabil. Lihat antarmuka baru dalam paket com.android.build.api.variant dan contoh dalam project GitHub gradle-recipes. Sebagai bagian dari Variant API baru, kami telah menyediakan sejumlah file perantara, yang disebut artefak, melalui antarmuka Artefak. Artefak ini, seperti manifes gabungan, bisa didapatkan dan disesuaikan dengan aman menggunakan plugin dan kode pihak ketiga.
Kami akan terus memperluas Variant API dengan menambahkan fungsi baru dan menambah jumlah artefak perantara yang kami sediakan untuk penyesuaian.
Perubahan perilaku untuk Lint
Bagian ini menjelaskan beberapa perubahan perilaku Lint di plugin Android Gradle 7.0.0.
Memperbaiki lint untuk dependensi library
Menjalankan lint dengan checkDependencies = true
sekarang lebih cepat
dari sebelumnya. Untuk project Android yang terdiri dari aplikasi dengan dependensi
library, sebaiknya tetapkan checkDependencies
ke
true
seperti yang ditunjukkan di bawah ini, dan jalankan lint melalui
./gradlew :app:lint
, yang akan menganalisis semua modul
dependensi secara paralel dan menghasilkan satu laporan, termasuk masalah dari
aplikasi dan semua dependensinya.
Groovy
// build.gradle
android {
...
lintOptions {
checkDependencies true
}
}
Kotlin
// build.gradle.kts
android {
...
lint {
isCheckDependencies = true
}
}
Tugas Lint sekarang dapat menjadi UP-TO-DATE
Jika sumber dan resource modul tidak berubah, tugas analisis lint
untuk modul tidak perlu dijalankan lagi. Jika hal ini terjadi, eksekusi tugas akan muncul sebagai "UP-TO-DATE" dalam output
Gradle. Dengan perubahan ini, saat menjalankan lint pada modul aplikasi dengan checkDependencies = true
, hanya modul yang telah berubah yang
perlu menjalankan analisisnya. Hasilnya, Lint dapat berjalan lebih cepat lagi.
Tugas laporan Lint juga tidak perlu dijalankan jika inputnya tidak berubah. Masalah umum yang terkait adalah tidak ada output teks lint yang dicetak ke stdout saat tugas lint UP-TO-DATE (masalah #191897708).
Menjalankan lint pada modul fitur dinamis
AGP tidak lagi mendukung pengoperasian lint dari modul fitur dinamis.
Menjalankan lint dari modul aplikasi yang sesuai akan menjalankan lint pada
modul fitur dinamisnya dan menyertakan semua masalah dalam laporan lint
aplikasi. Masalah umum yang terkait adalah saat menjalankan lint
dengan checkDependencies = true
dari modul aplikasi,
dependensi library fitur dinamis tidak diperiksa kecuali juga merupakan dependensi
aplikasi (masalah
#191977888).
Menjalankan lint hanya pada varian default
Menjalankan ./gradlew :app:lint
sekarang akan menjalankan lint hanya untuk
varian default. Di versi AGP sebelumnya, lint dijalankan untuk semua
varian.
Peringatan class yang tidak ada dalam shrinker R8
R8 secara lebih akurat dan
konsisten menangani class yang tidak ada dan opsi -dontwarn
.
Oleh karena itu, Anda harus mulai mengevaluasi peringatan class yang tidak ada yang dimunculkan
oleh R8.
Saat menemukan referensi class yang tidak ditentukan di aplikasi Anda atau salah satu dependensinya, R8 akan mengeluarkan peringatan yang muncul dalam output build Anda. Contoh:
R8: Missing class: java.lang.instrument.ClassFileTransformer
Peringatan ini berarti bahwa definisi class
java.lang.instrument.ClassFileTransformer
tidak dapat ditemukan
saat menganalisis kode aplikasi Anda. Meskipun ini biasanya berarti terjadi error,
ada kemungkinan Anda ingin mengabaikan peringatan ini. Dua alasan umum
untuk mengabaikan peringatan adalah:
-
Library yang menargetkan JVM dan class yang tidak ada adalah jenis library JVM (seperti dalam contoh di atas).
-
Salah satu dependensi Anda menggunakan API khusus waktu kompilasi.
Anda dapat mengabaikan peringatan class yang tidak ada dengan menambahkan aturan -dontwarn
ke file proguard-rules.pro
. Contoh:
-dontwarn java.lang.instrument.ClassFileTransformer
Untuk memudahkan, AGP akan membuat file yang berisi semua aturan yang berpotensi
hilang, yang menulisnya ke jalur file seperti berikut:
app/build/outputs/mapping/release/missing_rules.txt
. Tambahkan
aturan ke file proguard-rules.pro
untuk mengabaikan peringatan.
Di AGP 7.0, pesan class yang tidak ada akan muncul sebagai peringatan, dan Anda dapat
mengubahnya menjadi error dengan menetapkan
android.r8.failOnMissingClasses = true
di
gradle.properties
. Di AGP 8.0, peringatan ini akan menjadi
error yang merusak build Anda. Perilaku AGP 7.0 dapat dipertahankan dengan
menambahkan opsi -ignorewarnings
ke
file proguard-rules.pro
, tetapi tindakan itu tidak direkomendasikan.
Cache build plugin Android Gradle dihapus
Cache build AGP telah dihapus di AGP 4.1. Sebelumnya diperkenalkan di AGP 2.3 untuk melengkapi cache build Gradle, cache build AGP digantikan sepenuhnya oleh cache build Gradle di AGP 4.1. Perubahan ini tidak memengaruhi waktu build.
Di AGP 7.0, properti android.enableBuildCache
,
properti android.buildCacheDir
, dan
tugas cleanBuildCache
telah dihapus.
Menggunakan kode sumber Java 11 dalam project Anda
Sekarang Anda dapat mengompilasi hingga kode sumber Java 11 di project aplikasi, sehingga Anda dapat menggunakan fitur bahasa yang lebih baru seperti metode antarmuka pribadi, operator diamond untuk class anonim, dan sintaksis variabel lokal untuk parameter lambda.
Untuk mengaktifkan fitur ini, tetapkan compileOptions
ke versi Java yang diinginkan
dan tetapkan compileSdkVersion
ke 30 atau lebih tinggi:
// build.gradle
android {
compileSdkVersion 30
compileOptions {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
}
// For Kotlin projects
kotlinOptions {
jvmTarget = "11"
}
}
// build.gradle.kts
android {
compileSdkVersion(30)
compileOptions {
sourceCompatibility(JavaVersion.VERSION_11)
targetCompatibility(JavaVersion.VERSION_11)
}
kotlinOptions {
jvmTarget = "11"
}
}
Konfigurasi dependensi dihapus
Pada AGP 7.0, konfigurasi (atau cakupan dependensi) berikut telah dihapus:
-
compile
Bergantung pada kasus penggunaan, konfigurasi ini telah diganti denganapi
atauimplementation
.
Juga berlaku untuk varian *Compile, misalnya:debugCompile
. -
provided
Ini telah diganti dengancompileOnly
.
Juga berlaku untuk varian *Provided, misalnya:releaseProvided
. -
apk
Ini telah diganti denganruntimeOnly
. -
publish
Ini telah diganti denganruntimeOnly
.
Biasanya, AGP Upgrade Assistant akan otomatis memigrasikan project Anda ke konfigurasi baru.
Classpath berubah saat dikompilasi dengan plugin Android Gradle
Jika Anda mengompilasi dengan plugin Android Gradle, classpath
kompilasi dapat berubah. Karena AGP kini menggunakan konfigurasi
api/implementation
secara internal, beberapa artefak dapat dihapus dari classpath
kompilasi Anda. Jika Anda bergantung pada dependensi AGP pada waktu kompilasi, pastikan untuk
menambahkannya sebagai dependensi eksplisit.
Penambahan library native di folder resource Java tidak didukung
Sebelumnya, Anda dapat menambahkan library native dalam folder resource Java, dan
mendaftarkan folder tersebut menggunakan android.sourceSets.main.resources.srcDirs
sehingga library native akan diekstrak dan ditambahkan ke APK
akhir. Mulai dari AGP 7.0, library ini tidak didukung dan library native di
folder resource Java akan diabaikan. Sebagai gantinya, gunakan metode DSL yang ditujukan untuk
library native, android.sourceSets.main.jniLibs.srcDirs
. Untuk
informasi selengkapnya, lihat
cara mengonfigurasi
set sumber.
Masalah umum
Bagian ini menjelaskan masalah umum yang ada di plugin Android Gradle 7.0.0.
Tidak kompatibel dengan plugin Multiplatform Kotlin 1.4.x
Plugin Android Gradle 7.0.0 kompatibel dengan plugin Multiplatform Kotlin 1.5.0 dan yang lebih tinggi. Project yang menggunakan dukungan Multiplatform Kotlin perlu diupdate ke Kotlin 1.5.0 untuk menggunakan Plugin Android Gradle 7.0.0. Sebagai solusinya, Anda dapat melakukan downgrade plugin Android Gradle ke 4.2.x, meskipun tindakan ini tidak direkomendasikan.
Untuk mengetahui informasi selengkapnya, lihat KT-43944.
Output lint tidak ada
Tidak ada output teks lint yang dicetak ke stdout jika tugas lint sudah yang terbaru (masalah #191897708). Untuk konteks selengkapnya, lihat Perubahan perilaku untuk lint. Masalah ini akan diperbaiki di plugin Android Gradle 7.1.
Tidak semua dependensi library fitur dinamis diperiksa lint
Saat menjalankan lint dengan checkDependencies = true
dari
modul aplikasi, dependensi library fitur dinamis tidak diperiksa kecuali
juga merupakan dependensi aplikasi
(masalah #191977888).
Sebagai solusinya, tugas lint dapat dijalankan pada library tersebut. Untuk konteks selengkapnya,
lihat Perubahan perilaku untuk lint.