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-alpha10, gunakan Asisten Upgrade plugin Android Gradle di Android Studio Otter | 2025.2.1.
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-alpha10 adalah level API 36.
Plugin Android Gradle 9.0.0-alpha10 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. |
Class DSL android
kini hanya mengimplementasikan antarmuka publik baru
Selama beberapa tahun terakhir, kami telah memperkenalkan antarmuka baru untuk DSL dan API kami agar dapat mengontrol dengan lebih baik API mana yang bersifat publik. AGP versi 7.x dan 8.x masih menggunakan jenis DSL lama (misalnya BaseExtension
) yang juga menerapkan antarmuka publik baru, untuk mempertahankan kompatibilitas seiring kemajuan pekerjaan pada antarmuka.
AGP 9.0 menggunakan antarmuka DSL baru kami secara eksklusif, dan implementasinya telah berubah menjadi jenis baru yang sepenuhnya tersembunyi. Perubahan ini juga menghapus akses ke API varian lama yang tidak digunakan lagi.
Untuk mengupdate ke AGP 9.0, Anda mungkin perlu melakukan hal berikut:
- Pastikan project Anda kompatibel dengan Kotlin bawaan: Plugin
org.jetbrains.kotlin.android
tidak kompatibel dengan DSL baru. Mengalihkan project KMP ke Plugin Library Android Gradle untuk KMP: Menggunakan plugin
org.jetbrains.kotlin.multiplatform
di subproject Gradle yang sama dengan plugincom.android.library
dancom.android.application
tidak kompatibel dengan DSL baru.Perbarui file build Anda: Meskipun perubahan antarmuka dimaksudkan untuk menjaga DSL tetap semirip mungkin, mungkin ada beberapa perubahan kecil.
Perbarui logika build kustom Anda untuk merujuk ke DSL dan API baru: Ganti semua referensi ke DSL internal dengan antarmuka DSL publik. Biasanya, ini akan menjadi penggantian satu-ke-satu. Ganti semua penggunaan
applicationVariants
dan API serupa denganandroidComponents
API baru. Hal ini mungkin lebih rumit, karena APIandroidComponents
dirancang agar lebih stabil untuk menjaga kompatibilitas plugin lebih lama. Lihat Resep Gradle kami untuk melihat contohnya.Update plugin pihak ketiga: Beberapa plugin pihak ketiga mungkin masih bergantung pada antarmuka atau API yang tidak lagi diekspos. Bermigrasi ke versi plugin yang kompatibel dengan AGP 9.0.
Pengalihan ke antarmuka DSL baru mencegah plugin dan skrip build Gradle menggunakan berbagai API yang tidak digunakan lagi, termasuk:
API yang tidak digunakan lagi di blok android |
Fungsi | Penggantian |
---|---|---|
applicationVariants ,libraryVariants ,testVariants , danunitTestVariants
|
Titik ekstensi untuk plugin guna menambahkan fungsi baru ke AGP. |
Ganti ini dengan
API androidComponents.onVariants , misalnya:
androidComponents { onVariants() { variant -> variant.signingConfig .enableV1Signing.set(false) } } |
variantFilter
|
Memungkinkan varian yang dipilih dinonaktifkan. |
Ganti ini dengan
API androidComponents.beforeVariants , misalnya:
androidComponents { beforeVariants( selector() .withBuildType("debug") .withFlavor("color", "blue") ) { variantBuilder -> variantBuilder.enable = false } } |
deviceProvider dantestServer
|
Pendaftaran lingkungan pengujian kustom untuk menjalankan pengujian terhadap perangkat dan emulator Android. | Beralih ke perangkat yang dikelola Gradle. |
sdkDirectory ,ndkDirectory ,bootClasspath ,adbExecutable , danadbExe
|
Menggunakan berbagai komponen Android SDK untuk tugas kustom. |
Beralih ke
androidComponents.sdkComponents .
|
registerArtifactType ,registerBuildTypeSourceProvider ,registerProductFlavorSourceProvider ,registerJavaArtifact ,registerMultiFlavorSourceProvider , danwrapJavaSourceSet |
Fungsi yang tidak digunakan lagi sebagian besar terkait dengan penanganan sumber yang dihasilkan di Android Studio, yang berhenti berfungsi di AGP 7.2.0. | Tidak ada pengganti langsung untuk API ini. |
Jika Anda mengupdate ke AGP 9.0 dan melihat pesan error berikut, artinya project Anda masih mereferensikan beberapa jenis lama:
java.lang.ClassCastException: class com.android.build.gradle.internal.dsl.ApplicationExtensionImpl$AgpDecorated_Decorated
cannot be cast to class com.android.build.gradle.BaseExtension
Jika diblokir oleh plugin pihak ketiga yang tidak kompatibel, Anda dapat memilih tidak menggunakan dan mendapatkan kembali implementasi lama untuk DSL, serta API varian lama.
Saat melakukannya, antarmuka baru juga tersedia, dan Anda tetap dapat
memperbarui logika build Anda sendiri ke API baru. Untuk memilih tidak ikut, sertakan baris ini di
file gradle.properties
Anda:
android.newDsl=false
Anda juga dapat mulai mengupgrade ke API baru sebelum mengupgrade ke AGP 9.0. Antarmuka baru telah ada di banyak versi AGP sehingga Anda dapat memiliki campuran antarmuka baru dan lama. Dokumen referensi AGP API menampilkan permukaan API untuk setiap versi AGP, dan kapan setiap class, metode, dan kolom ditambahkan.
Selama fase 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.
Jika Anda menemukan bahwa DSL atau Variant API baru tidak memiliki kemampuan atau fitur, segera ajukan masalah sesegera mungkin.
Kotlin bawaan
Plugin Android Gradle 9.0 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.0 memiliki dependensi runtime pada plugin Kotlin Gradle 2.2.10, yang merupakan versi minimum yang diperlukan untuk dukungan kotlin bawaan.
Kotlin bawaan di AGP 9.0 menghadirkan dukungan IDE Android Studio penuh untuk
test-fixtures.
Untuk mencobanya, gunakan AGP 9.0.0-alpha07
atau yang lebih baru.
Anda dapat menonaktifkan Kotlin bawaan dengan menyetel
android.builtInKotlin=false
.
Jika Anda telah memilih untuk tidak menggunakan Kotlin bawaan 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 tidak ikut serta 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.resvalues |
Mengaktifkan
resValues
di semua subproject
|
true → false |
Aktifkan resValues hanya di subproject yang memerlukannya
dengan menetapkan kode berikut di file build Gradle project tersebut:
android { buildFeatures { resValues = true } } |
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 } } |
android.r8.proguardAndroidTxt.disallowed |
Di AGP 9.0, getDefaultProguardFile() hanya akan mendukung proguard-android-optimize.txt , bukan proguard-android.txt . Hal ini untuk mencegah penggunaan tanda dontoptimize yang tidak disengaja, yang disertakan dalam proguard-android.txt .
|
false → true |
Anda dapat menentukan dontoptimize secara eksplisit dalam proguardFile kustom jika ingin menghindari pengoptimalan, sekaligus menggunakan proguard-android-optimize.txt . Pastikan untuk menghapus tanda dontoptimize dari file ini jika memungkinkan, karena akan mengurangi manfaat pengoptimalan R8. Jika tidak, batalkan keikutsertaan dengan menyetel android.r8.globalOptionsInConsumerRules.disallowed=false .
|
android.r8.globalOptionsInConsumerRules.disallowed |
Mulai AGP 9.0, publikasi modul fitur dan library Android akan gagal jika file keep konsumen berisi konfigurasi Proguard yang bermasalah. File keep konsumen yang menyertakan opsi global seperti dontoptimize atau dontobfuscate hanya boleh digunakan dalam modul aplikasi, dan dapat mengurangi manfaat pengoptimalan bagi pengguna library. Kompilasi modul Aplikasi Android akan mengabaikan opsi global tersebut secara diam-diam jika disematkan dalam dependensi yang telah dikompilasi sebelumnya (JAR atau AAR). Anda dapat melihat kapan hal ini terjadi dengan memeriksa configuration.txt (biasanya di jalur seperti <app_module>/build/outputs/mapping/<build_variant>/configuration.txt ) untuk menemukan komentar seperti: # REMOVED CONSUMER RULE: dontoptimize
|
false → true |
Library yang dipublikasikan harus menghapus aturan yang tidak kompatibel. Library internal harus memindahkan aturan yang tidak kompatibel tetapi diperlukan ke proguardFile di modul aplikasi. Batalkan keikutsertaan dengan menyetel android.r8.globalOptionsInConsumerRules.disallowed=false . Setelah semua file simpan konsumen Anda kompatibel, hapus penolakan.
|
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 hanya perubahan yang menyebabkan gangguan di tingkat sumber untuk membantu menghindari perubahan yang menyebabkan gangguan di tingkat sumber pada masa mendatang, tetapi juga berarti bahwa metode blok perlu dipindahkan dari
CommonExtension
keApplicationExtension
,LibraryExension
,DynamicFeatureExtension
, danTestExtension
.Saat mengupgrade project ke AGP 9.0, refaktorkan kode plugin Gradle yang menggunakan parameter tersebut atau metode blok. Misalnya, plugin berikut diupdate untuk menghapus parameter jenis dan tidak bergantung pada metode blok yang dihapus:
AGP 8.13
val commonExtension: CommonExtension<*, *, *, *, *, *> = extensions.getByType(CommonExtension::class) commonExtension.apply { defaultConfig { minSdk { version = release(28) } } }
AGP 9.0
val commonExtension: CommonExtension = extensions.getByType(CommonExtension::class) commonExtension.apply { defaultConfig.apply { minSdk { version = release(28) } } }
Untuk plugin yang menargetkan berbagai versi AGP, penggunaan getter secara langsung kompatibel secara biner dengan versi AGP yang lebih rendah dari 9.0.
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.DependencyVariantSelection
. Diganti denganDependencySelection
, yang diekspos sebagaikotlin.android.localDependencySelection
Installation.installOptions(String)
. Digantikan oleh properti yang dapat diubah dariInstallation.installOptions
.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.
API yang Dihapus
Plugin Android Gradle 9.0 menghapus:
AndroidComponentsExtension.finalizeDSl
. Diganti denganfinalizeDsl
Component.transformClassesWith
. Diganti denganInstrumentation.transformClassesWith
Component.setAsmFramesComputationMode
. Diganti denganInstrumentation.setAsmFramesComputationMode
ComponentBuilder.enabled
. Diganti denganComponentBuilder.enable
.DependenciesInfoBuilder.includedInApk
. Digantikan denganincludeInApk
DependenciesInfoBuilder.includedInBundle
. Digantikan denganincludeInBundle
GeneratesApk.targetSdkVersion
. Digantikan dengantargetSdk
Variant.minSdkVersion
. Digantikan denganminSdk
Variant.maxSdkVersion
. Digantikan denganmaxSdk
Variant.targetSdkVersion
. Digantikan dengantargetSdk
Variant.unitTest
, karena tidak berlaku untuk plugincom.android.test
.unitTest
tersedia di subjenisVariantBuilder
yang memperluasHasUnitTest
.VariantBuilder.targetSdk
dantargetSdkPreview
, karena tidak bermakna dalam library. Sebagai gantinya, gunakanGeneratesApkBuilder.targetSdk
atauGeneratesApkBuilder.targetSdkPreview
.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
.VariantOutput.enable
. Digantikan denganenabled
FeaturePlugin
danFeatureExtension
yang tidak digunakan lagi dan dinonaktifkan.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.
Menghapus properti Gradle
Properti Gradle berikut awalnya ditambahkan sebagai cara untuk menonaktifkan fitur yang diaktifkan secara default secara global.
Fitur ini 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 } } |
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. |
Perbaikan masalah
Plugin Android Gradle 9.0.0-alpha10
Perbaikan Masalah | ||||
---|---|---|---|---|
Plugin Android Gradle |
|
|||
Lint |
|
Plugin Android Gradle 9.0.0-alpha09
Perbaikan Masalah | ||||
---|---|---|---|---|
Plugin Android Gradle |
|
Plugin Android Gradle 9.0.0-alpha08
Perbaikan Masalah | |
---|---|
Tidak ada masalah publik yang ditandai sebagai telah diperbaiki di AGP 9.0.0-alpha08 |
Plugin Android Gradle 9.0.0-alpha07
Perbaikan Masalah | |||||||||
---|---|---|---|---|---|---|---|---|---|
Plugin Android Gradle |
|
Plugin Android Gradle 9.0.0-alpha06
Perbaikan Masalah | |||||
---|---|---|---|---|---|
Plugin Android Gradle |
|
||||
Lint |
|
Plugin Android Gradle 9.0.0-alpha05
Perbaikan Masalah | |||||
---|---|---|---|---|---|
Plugin Android Gradle |
|
||||
Lint |
|
Plugin Android Gradle 9.0.0-alpha04
Perbaikan Masalah | ||||
---|---|---|---|---|
Plugin Android Gradle |
|
|||
Lint |
|
Plugin Android Gradle 9.0.0-alpha03
Perbaikan Masalah | ||||
---|---|---|---|---|
Plugin Android Gradle |
|
|||
Lint |
|
Plugin Android Gradle 9.0.0-alpha02
Perbaikan Masalah | ||||
---|---|---|---|---|
Plugin Android Gradle |
|
Plugin Android Gradle 9.0.0-alpha01
Perbaikan Masalah | |||||||
---|---|---|---|---|---|---|---|
Plugin Android Gradle |
|