Plugin Android Gradle 7.0.0 (Juli 2021)
Plugin Android Gradle 7.0.0 merupakan rilis utama yang menyertakan berbagai fitur dan peningkatan fitur.
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 membangun aplikasi Anda, JDK 11 sekarang menjadi yang diperlukan untuk menjalankan Gradle. Android Studio Arctic Fox memaketkan JDK 11 dan mengonfigurasi Gradle untuk menggunakannya secara default, yang berarti bahwa sebagian besar pengguna tidak perlu membuat perubahan konfigurasi apa pun pada proyek mereka.
Jika Anda perlu menyetel secara manual Versi JDK yang digunakan oleh AGP di dalam Android Studio, Anda harus menggunakan JDK 11 atau yang lebih tinggi.
Saat menggunakan AGP yang terpisah dari Android Studio, upgrade versi JDK dengan
menetapkan variabel lingkungan JAVA_HOME
atau opsi command line -Dorg.gradle.java.home
ke direktori instalasi JDK 11 Anda.
Perhatikan bahwa SDK Manager dan AVD Manager dalam paket SDK Tools yang sudah 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 perlu beralih ke versi baru alat ini di saat ini Alat Command Line Android SDK paket Google.
Variant API stabil
Variant API yang baru sekarang menjadi stabil. Lihat antarmuka baru di com.android.build.api.variant paket, dan contoh dalam Project GitHub gradle-recipes. Sebagai bagian dari Variant API, kami telah menyediakan sejumlah file perantara, yang disebut artefak, melalui Artefak dalam antarmuka berbasis web yang sederhana. Artefak ini, seperti manifes gabungan, bisa diperoleh dengan aman dan disesuaikan 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 dan penyesuaian.
Perubahan perilaku untuk Lint
Bagian ini menjelaskan beberapa perubahan perilaku Lint di Android Gradle plugin 7.0.0.
Memperbaiki lint untuk dependensi library
Menjalankan lint dengan checkDependencies = true
kini lebih cepat
dari sebelumnya. Untuk project Android yang terdiri dari aplikasi dengan library
dependensi, sebaiknya setel checkDependencies
ke
true
seperti yang ditampilkan di bawah ini, dan untuk menjalankan lint melalui
./gradlew :app:lint
, yang akan menganalisis semua dependensi
modul 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, analisis lint
untuk modul ini tidak perlu dijalankan lagi. Jika ini terjadi,
eksekusi tugas akan muncul sebagai "UP-TO-DATE" di Gradle
{i>output<i} tersebut. Dengan perubahan ini, saat menjalankan lint pada modul aplikasi dengan checkDependencies = true
, hanya modul yang telah berubah yang akan
butuhkan untuk menjalankan
analisis mereka. Hasilnya, Lint dapat berjalan lebih cepat lagi.
Tugas laporan Lint juga tidak perlu dijalankan jika inputnya belum ubah. Masalah umum terkait adalah tidak ada lint output teks yang dicetak ke stdout jika 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
modul fitur dinamisnya dan menyertakan semua masalah dalam lint aplikasi
laporan. Masalah umum terkait adalah saat menjalankan lint
dengan checkDependencies = true
dari modul aplikasi,
dependensi library fitur dinamis tidak diperiksa, kecuali jika dependensi
dependensi (masalah)
#191977888).
Menjalankan lint hanya pada varian default
Menjalankan ./gradlew :app:lint
kini akan menjalankan lint hanya untuk
varian default. Di versi AGP sebelumnya, lint dijalankan untuk semua
pada semua varian.
Peringatan class yang tidak ada dalam shrinker R8
R8 dengan lebih tepat dan
secara 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 R8 menemukan referensi class yang tidak didefinisikan dalam aplikasi Anda atau salah satu dependensinya, ia akan mengeluarkan peringatan yang muncul di build Anda {i>output<i} tersebut. 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. Meskipun ini biasanya berarti
terjadi kesalahan,
mungkin Anda ingin mengabaikan peringatan ini. Dua alasan umum
untuk mengabaikan peringatan tersebut adalah:
-
Library yang menargetkan JVM dan class yang tidak ada adalah JVM jenis library (seperti dalam contoh di atas).
-
Salah satu dependensi Anda menggunakan API khusus waktu kompilasi.
Anda dapat mengabaikan peringatan kelas yang tidak ada dengan menambahkan -dontwarn
aturan ke file proguard-rules.pro
Anda. Contoh:
-dontwarn java.lang.instrument.ClassFileTransformer
Untuk memudahkan, AGP akan membuat file yang berisi semua data
aturan yang hilang, 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 {i>error<i}
dengan mengatur
android.r8.failOnMissingClasses = true
inci
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
proguard-rules.pro
, tetapi 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 berdampak waktu build.
Di AGP 7.0, properti android.enableBuildCache
,
android.buildCacheDir
, dan
Tugas cleanBuildCache
telah dihapus.
Menggunakan kode sumber Java 11 dalam project Anda
Kini Anda dapat mengompilasi hingga kode sumber Java 11 di project aplikasi Anda, sehingga Anda menggunakan fitur bahasa yang lebih baru seperti metode antarmuka pribadi, model operator untuk class anonim, dan sintaksis variabel lokal untuk parameter lambda.
Untuk mengaktifkan fitur ini, setel compileOptions
ke properti yang diinginkan
Versi Java dan tetapkan compileSdkVersion
ke 30 atau yang 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
Di AGP 7.0, konfigurasi (atau cakupan dependensi) berikut telah dihapus:
-
compile
Bergantung pada kasus penggunaannya, string 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
.
Dalam kebanyakan kasus, AGP Upgrade Assistant akan otomatis memigrasikan project Anda ke versi baru konfigurasi standar.
Classpath berubah saat dikompilasi dengan Android Plugin Gradle
Jika Anda mengompilasi dengan plugin Android Gradle, kompilasi Anda
classpath dapat berubah. Karena AGP sekarang menggunakan api/implementation
secara internal, beberapa artefak dapat dihapus dari kompilasi Anda
Classpath. Jika Anda bergantung pada dependensi AGP pada waktu kompilasi, pastikan untuk
menambahkannya sebagai dependensi eksplisit.
Penambahan library native dalam resource Java folder tidak didukung
Sebelumnya, Anda bisa menambahkan library native dalam folder resource Java, dan
daftarkan folder menggunakan android.sourceSets.main.resources.srcDirs
sehingga library native akan diekstrak dan ditambahkan ke
APK lainnya. Mulai dari AGP 7.0, library ini tidak didukung dan library native di
Folder resource Java diabaikan. Sebagai gantinya, gunakan metode DSL
yang ditujukan untuk
library native, android.sourceSets.main.jniLibs.srcDirs
. Sebagai
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 Kotlin Plugin multiplatform 1.5.0 dan yang lebih tinggi. Project yang menggunakan Kotlin Dukungan multiplatform perlu diupdate ke Kotlin 1.5.0 untuk menggunakan Android Gradle {i>Plugin<i} 7.0.0. Sebagai solusinya, Anda dapat mendowngrade plugin Android Gradle ke 4.2.x, meskipun hal ini tidak disarankan.
Untuk informasi selengkapnya, lihat KT-43944.
Output lint tidak ada
Tidak ada output teks lint yang dicetak ke stdout jika tugas lint terbaru (masalah #191897708). Untuk konteks selengkapnya, lihat Perubahan perilaku untuk lint. Terbitan 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.