Halaman ini berisi catatan rilis untuk rilis pratinjau plugin Android Gradle (AGP).
Plugin Android Gradle 9.0
Plugin Android Gradle 9.0 adalah rilis utama baru AGP, dan menghadirkan perubahan API dan perilaku.
Untuk mengupdate ke plugin Android Gradle 9.0.0-alpha04, gunakan Asisten Upgrade plugin Android Gradle di Android Studio Narwhal 4 Feature Drop | 2025.1.4.
Upgrade Assistant AGP membantu mempertahankan perilaku yang ada saat mengupgrade project Anda jika sesuai, sehingga Anda dapat mengupgrade project untuk menggunakan AGP 9.0, meskipun Anda belum siap mengadopsi semua default baru di AGP 9.0.
Kompatibilitas
Level API Android maksimum yang didukung oleh plugin Android Gradle 9.0.0-alpha04 adalah level API 36.
Plugin Android Gradle 9.0.0-alpha04 memerlukan Gradle 9.0.0.
Versi minimum | Versi default | Catatan | |
---|---|---|---|
Gradle | 9.0.0 | 9.0.0 | Untuk mempelajari lebih lanjut, lihat mengupdate Gradle. |
SDK Build Tools | 36.0.0 | 36.0.0 | Instal atau konfigurasi SDK Build Tools. |
NDK | T/A | 28.2.13676358 | Instal atau konfigurasi versi lain dari NDK. |
JDK | 17 | 17 | Untuk mempelajari lebih lanjut, lihat menyetel versi JDK. |
Penerapan DSL internal dan Variant API yang tidak digunakan lagi kini memerlukan keikutsertaan eksplisit
Plugin Android Gradle kini memiliki platform API yang ditentukan, dengan API yang didukung ditentukan dalam artefak maven com.android.tools.build:gradle-api
.
Untuk kompatibilitas dengan plugin biner dan skrip build yang ada, implementasi
DSL sebelumnya yang mendahului platform API yang ditentukan tersebut masih diekspos secara
default di AGP 8.13 dan yang lebih rendah. Hal ini memungkinkan kode di plugin Gradle dan skrip build mengakses detail implementasi internal DSL serta API android.applicationVariants
, android.libraryVariants
, android.testVariants
, dan android.unitTestVariants
yang tidak digunakan lagi, yang akan dihapus pada tahun 2026 di AGP 10.
Untuk membuat transisi ini lebih terlihat, API varian lama dan DSL internal tidak dapat diakses secara default oleh plugin Android Gradle 9.0.0-alpha04.
Anda dapat mengaktifkan kembali penggunaan API yang tidak digunakan lagi dengan menetapkan
android.newDsl=false
di gradle.properties
.
Selama seri alfa 9.0, kami menghubungi penulis plugin untuk membantu mereka mengadaptasi dan merilis plugin yang sepenuhnya kompatibel dengan mode baru, dan akan meningkatkan kualitas Upgrade Assistant AGP di Android Studio untuk memandu Anda melakukan migrasi.
Kotlin bawaan
Plugin Android Gradle 9 menyertakan dukungan bawaan untuk mengompilasi Kotlin, menggantikan plugin Kotlin yang diterapkan secara terpisah. Hal ini menyederhanakan integrasi dengan AGP, menghindari penggunaan API yang tidak digunakan lagi dan meningkatkan performa dalam beberapa kasus.
Plugin Android Gradle 9 memiliki dependensi runtime pada plugin Kotlin Gradle 2.2.0, yang merupakan versi minimum yang diperlukan untuk dukungan kotlin bawaan.
Anda dapat menonaktifkan Kotlin bawaan dengan menyetel
android.builtInKotlin=false
.
Jika Anda telah memilih tidak menggunakan dan juga perlu menggunakan plugin Gradle kotlin versi lama, Anda dapat memaksa downgrade
buildscript {
dependencies {
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") {
version { strictly("2.0.0") } // or another version that you want to use
}
}
}
Perubahan perilaku
Plugin Android Gradle 9.0 memiliki perilaku baru berikut:
Perilaku | Rekomendasi |
---|---|
Plugin Android Gradle 9.0 menggunakan versi NDK r28c secara default.
|
Pertimbangkan untuk menentukan versi NDK yang ingin Anda gunakan secara eksplisit. |
Plugin Android Gradle 9.0 secara default mewajibkan konsumen library untuk menggunakan versi SDK kompilasi yang sama atau lebih tinggi. |
Gunakan SDK kompilasi yang sama atau lebih tinggi saat menggunakan library.
Jika hal ini tidak memungkinkan, atau Anda ingin memberi konsumen library yang Anda
publikasikan lebih banyak waktu untuk beralih, tetapkan
AarMetadata.minCompileSdk
secara eksplisit.
|
AGP 9.0 menyertakan update pada default properti Gradle berikut. Dengan demikian, Anda dapat memilih untuk mempertahankan perilaku AGP 8.13 saat melakukan upgrade:
Properti | Fungsi | Perubahan dari AGP 8.13 ke AGP 9.0 | Rekomendasi |
---|---|---|---|
android.newDsl |
Gunakan antarmuka DSL baru, tanpa mengekspos implementasi lama
blok android .Artinya, API varian lama, seperti android.applicationVariants
tidak dapat diakses lagi.
|
false → true |
Anda dapat memilih untuk tidak mengikutinya dengan menyetel
android.newDsl=false .Setelah semua plugin dan logika build yang digunakan project Anda kompatibel, hapus penolakan. |
android.builtInKotlin |
Mengaktifkan dukungan untuk mengompilasi kode Kotlin secara langsung di plugin Android Gradle, tanpa plugin org.jetbrains.kotlin.android .
|
false → true |
Gunakan Kotlin bawaan dengan menghapus penggunaan
plugin org.jetbrains.kotlin.android jika memungkinkan.
Jika tidak, batalkan keikutsertaan dengan menyetel android.builtInKotlin=false
|
android.uniquePackageNames |
Memastikan bahwa setiap library memiliki nama paket yang berbeda. | false → true |
Tentukan nama paket unik untuk semua library dalam project Anda. Jika tidak memungkinkan, Anda dapat menonaktifkan tanda ini saat melakukan migrasi. |
android.dependency.useConstraints |
Mengontrol penggunaan batasan dependensi antar-konfigurasi. Nilai default di AGP 9.0 adalah false yang hanya menggunakan batasan dalam pengujian perangkat aplikasi (AndroidTest).
Menyetelnya ke true akan mengembalikan perilaku ke 8.13.
|
true → false |
Jangan gunakan batasan dependensi di mana pun kecuali jika Anda membutuhkannya. Menerima default baru tanda ini juga mengaktifkan pengoptimalan dalam proses impor project yang akan mengurangi waktu impor untuk build dengan banyak subproject library Android. |
aandroid.enableAppCompileTimeRClass |
Mengompilasi kode dalam aplikasi terhadap class R non-final, sehingga
kompilasi aplikasi sejalan dengan kompilasi library. Hal ini meningkatkan inkrementalitas dan membuka jalan bagi pengoptimalan performa pada alur pemrosesan resource di masa mendatang. |
false → true |
Banyak project yang dapat mengadopsi perilaku baru tanpa perubahan sumber. Jika kolom class R digunakan di mana pun yang memerlukan konstanta, seperti kasus switch, lakukan refaktor untuk menggunakan pernyataan if berantai. |
android.sdk.defaultTargetSdkToCompileSdkIfUnset |
Menggunakan versi SDK kompilasi sebagai nilai default untuk versi SDK target di aplikasi dan pengujian. Sebelum perubahan ini, versi SDK target akan ditetapkan secara default ke versi SDK minimum. |
false → true |
Tentukan versi SDK target secara eksplisit untuk aplikasi dan pengujian. |
android.onlyEnableUnitTestForTheTestedBuildType |
Hanya membuat komponen pengujian unit untuk jenis build yang diuji. Dalam project default, hal ini menghasilkan satu pengujian unit untuk proses debug, dengan perilaku sebelumnya adalah menjalankan pengujian unit untuk proses debug atau rilis. |
false → true |
Jika project Anda tidak memerlukan pengujian untuk dijalankan untuk debug dan rilis, tidak ada perubahan yang diperlukan. |
android.proguard.failOnMissingFiles |
Menggagalkan build dengan error jika salah satu file keep yang ditentukan dalam DSL AGP tidak ada di disk. Sebelum perubahan ini, salah ketik dalam nama file akan menyebabkan file diabaikan tanpa pemberitahuan. | false → true |
Menghapus deklarasi file proguard yang tidak valid |
android.r8.optimizedResourceShrinking |
Memungkinkan R8 menyimpan lebih sedikit resource Android dengan mempertimbangkan class dan resource Android secara bersamaan. | false → true |
Jika aturan penyimpanan project Anda sudah selesai, tidak ada perubahan yang diperlukan. |
android.r8.strictFullModeForKeepRules |
Memungkinkan R8 menyimpan lebih sedikit dengan tidak secara implisit menyimpan konstruktor default
saat class disimpan.
Artinya, -keep class A tidak lagi menyiratkan
-keep class A { <init>(); } |
false → true |
Jika aturan penyimpanan project Anda sudah selesai, tidak ada perubahan yang diperlukan.
Ganti -keep class A
dengan
-keep class A { <init>(); }
dalam aturan penyimpanan project Anda untuk kasus apa pun yang memerlukan konstruktor
default agar tetap ada.
|
android.defaults.buildfeatures.shaders |
Mengaktifkan kompilasi shader di semua subproject | true → false |
Aktifkan kompilasi shader hanya di subproject yang berisi shader yang akan dikompilasi dengan menetapkan kode berikut di file build Gradle project tersebut:
android { buildFeatures { shaders = true } } |
Fitur yang dihapus
Plugin Android Gradle 9.0 menghapus fungsi berikut:
- Dukungan aplikasi Wear OS yang disematkan
AGP 9.0 menghapus dukungan untuk menyematkan aplikasi Wear OS, yang tidak lagi didukung di Play. Hal ini mencakup penghapusan konfigurasiwearApp
dan DSLAndroidSourceSet.wearAppConfigurationName
. Lihat Mendistribusikan ke Wear OS untuk mengetahui cara memublikasikan aplikasi Anda ke Wear OS. - Tugas pelaporan
androidDependencies
dansourceSets
DSL yang Diubah
Plugin Android Gradle 9.0 memiliki perubahan DSL yang dapat menyebabkan gangguan berikut:
- Parameterisasi
CommonExtension
telah dihapus. Dengan sendirinya, ini hanyalah perubahan yang merusak tingkat sumber untuk membantu menghindari perubahan yang merusak tingkat sumber di masa mendatang, tetapi juga berarti bahwa metode blok DSL perlu dipindahkan dariCommonExtension
keApplicationExtension
,LibraryExension
,DynamicFeatureExtension
, danTestExtension
.
DSL yang dihapus
Plugin Android Gradle 9.0 menghapus:
AndroidSourceSet.jni
, karena tidak berfungsi.AndroidSourceSet.wearAppConfigurationName
, karena terkait dengan dukungan aplikasi Wear OS sematan yang dihapus.BuildType.isRenderscriptDebuggable
, karena tidak berfungsi.ComponentBuilder.enabled
. Diganti denganComponentBuilder.enable
.DependencyVariantSelection
. Digantikan olehDependencySelection
, yang diekspos sebagaikotlin.android
Installation.installOptions(String)
. Digantikan oleh properti yang dapat diubah dariInstallation.installOptions
.VariantBuilder.targetSdk
dantargetSdkPreview
, karena tidak bermakna dalam library. Sebagai gantinya, gunakanGeneratesApkBuilder.targetSdk
atauGeneratesApkBuilder.targetSdkPreview
.Blok
PostProcessing
eksperimental, tetapi tidak pernah stabil.ProductFlavor.setDimension
, yang digantikan oleh propertidimension
LanguageSplitOptions
, yang hanya berguna untuk Google Play Instan, yang sudah tidak digunakan lagi.Variant.unitTest
, karena tidak berlaku untuk plugincom.android.test
.unitTest
tersedia di subjenisVariantBuilder
yang memperluasHasUnitTest
.VariantBuilder.enableUnitTest
, karena tidak berlaku untuk plugincom.android.test
.enableUnitTest
tersedia di subjenisVariantBuilder
yang memperluasHasUnitTestBuilder
.VariantBuilder.unitTestEnabled
dihapus dan diganti denganenableUnitTest
yang namanya lebih konsisten pada subtipeVariantBuilder
yang memperluasHasUnitTestBuilder
.
Menghapus properti Gradle
Properti Gradle berikut awalnya ditambahkan sebagai cara untuk menonaktifkan fitur yang diaktifkan secara default secara global.
Fitur ini telah dinonaktifkan secara default sejak AGP 8.0 atau yang lebih rendah. Aktifkan fitur ini hanya di subproject yang menggunakannya untuk build yang lebih efisien.
Properti | Fungsi | Penggantian |
---|---|---|
android.defaults.buildfeatures.aidl |
Mengaktifkan kompilasi AIDL di semua subproject |
Aktifkan kompilasi AIDL hanya di subproject yang memiliki
sumber AIDL
dengan menyetel properti berikut dalam file build Gradle project tersebut:
android { buildFeatures { aidl = true } } |
android.defaults.buildfeatures.renderscript |
Mengaktifkan kompilasi RenderScript di semua subproject |
Aktifkan kompilasi renderscript hanya di subproject yang memiliki sumber renderscript dengan menetapkan properti berikut di file build Gradle project tersebut:
android { buildFeatures { renderScript = true } } |
API yang Dihapus
Plugin Android Gradle 9.0 menghapus:
- API
BaseExtension.registerTransform
yang tidak digunakan lagi dan dinonaktifkan, yang hanya tetap ada untuk memungkinkan kompilasi terhadap versi AGP terbaru saat menargetkan agar berjalan di AGP 4.2 atau yang lebih rendah.
Properti Gradle yang diterapkan
AGP 9.0 akan menampilkan error jika Anda menetapkan properti Gradle berikut.
Upgrade Assistant plugin Android Gradle tidak akan mengupgrade project ke AGP 9.0 yang menggunakan properti ini.
Properti | Fungsi |
---|---|
android.r8.integratedResourceShrinking |
Pengecilan resource kini selalu dijalankan sebagai bagian dari R8, implementasi sebelumnya telah dihapus. |