Catatan rilis untuk pratinjau plugin Android Gradle

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 plugin com.android.library dan com.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 dengan androidComponents API baru. Hal ini mungkin lebih rumit, karena API androidComponents 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, dan
unitTestVariants
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)
    }
}
Mungkin tidak ada pengganti langsung untuk semua API sebelumnya. Ajukan masalah jika ada kasus penggunaan yang tidak tercakup oleh API varian baru.
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 dan
testServer
Pendaftaran lingkungan pengujian kustom untuk menjalankan pengujian terhadap perangkat dan emulator Android. Beralih ke perangkat yang dikelola Gradle.
sdkDirectory,
ndkDirectory,
bootClasspath,
adbExecutable, dan
adbExe
Menggunakan berbagai komponen Android SDK untuk tugas kustom. Beralih ke androidComponents.sdkComponents.
registerArtifactType,
registerBuildTypeSourceProvider,
registerProductFlavorSourceProvider,
registerJavaArtifact,
registerMultiFlavorSourceProvider, dan
wrapJavaSourceSet
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.
falsetrue 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. falsetrue 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. falsetrue 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.
truefalse 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.
falsetrue 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.
falsetrue 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.
falsetrue 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. falsetrue 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. falsetrue 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>(); }
falsetrue 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 truefalse 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 truefalse 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. falsetrue 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 falsetrue 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:

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 ke ApplicationExtension, LibraryExension, DynamicFeatureExtension, dan TestExtension.

    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:

API yang Dihapus

Plugin Android Gradle 9.0 menghapus:

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
  }
}
dalam file build Gradle setiap subproject yang berisi sumber AIDL
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
extractNativeLibs dan useEmbeddedDex tidak boleh berasal dari manifes
Peringatan dari R8 di AGP 9.0.0-alpha09
Lint
Kotlin bawaan tidak menambahkan .kotlin_module ke META-INF
Lint classpath berisi class duplikat pada versi yang berbeda
Solusi mengganti resource pribadi tidak berfungsi (tools:override = "true")

Plugin Android Gradle 9.0.0-alpha09

Perbaikan Masalah
Plugin Android Gradle
Plugin `legacy-kapt` melewati pemrosesan anotasi, tidak seperti `kotlin-kapt`
compileSdkSpec.minorApiLevel tidak berfungsi dengan SettingsExtension
[fused lib - public] Library gabungan yang dihasilkan tidak menyertakan sumber

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
Build akan gagal jika ada tugas pembuatan kode
Dengan `android.builtInKotlin=false`, `android.newDsl=false`, dan `android.enableLegacyVariantApi=false`, penggunaan plugin `kotlin-android` akan gagal dengan "API 'applicationVariants' sudah tidak digunakan lagi"
Kotlin bawaan gagal menyelesaikan kotlin-stdlib tanpa versi saat kotlin.stdlib.default.dependency=false
DexData membuka file tanpa menutupnya, sehingga mencegah pembersihan
AndroidSourceDirectorySet harus berhenti memperluas PatternFilterable di AGP 9.0
Error Peralatan Pengujian di modul khusus pengujian
Error yang salah saat menggunakan penerima konteks dalam fixture pengujian
Error IDE yang salah untuk kode Kotlin di testFixtures

Plugin Android Gradle 9.0.0-alpha06

Perbaikan Masalah
Plugin Android Gradle
DSL pengoptimalan baru tidak membuat configuration.txt secara default
AGP 8.13.0 gagal memverifikasi grafik nav dalam modul
AGP menggunakan Gradle API yang tidak digunakan lagi: notasi multi-string
Memberikan peringatan kepada pengguna yang mencoba menggunakan library multidex lama dengan minSdkVersion >=21
Lint
Pemeriksaan Lint ChecksSdkIntAtLeast tidak memeriksa apakah nilai yang diberi anotasi sudah benar

Plugin Android Gradle 9.0.0-alpha05

Perbaikan Masalah
Plugin Android Gradle
android.proguard.failOnMissingFiles tidak berfungsi untuk consumerProguardFiles
Memperbarui dependensi plugin Kotlin Gradle ke 2.2.10
Membuat KotlinJvmAndroidCompilation menggunakan KGP API
Mode API eksplisit Kotlin diterapkan ke sumber pengujian
Lint
Lint menampilkan peringatan "Could not clean up K2 caches"

Plugin Android Gradle 9.0.0-alpha04

Perbaikan Masalah
Plugin Android Gradle
Mengalihkan versi Java sumber/target default dari Java 8 ke Java 11 di AGP 9.0
Mengubah nilai default android.useAndroidX menjadi benar (true)
Pengecualian yang lebih baik saat menerapkan plugin kapt dengan Kotlin bawaan.
Lint
Lint menampilkan peringatan "Could not clean up K2 caches"

Plugin Android Gradle 9.0.0-alpha03

Perbaikan Masalah
Plugin Android Gradle
Jika `isIncludeAndroidResources` diaktifkan, `process{Variant}UnitTestManifest` gagal menggabungkan penggunaan tools:overrideLibrary di AGP 8.12.0
AGP menyebabkan peringatan penghentian penggunaan di Gradle untuk tugas pengujian JVM
DependencyReportTask tidak kompatibel dengan cache konfigurasi
Lint
Bug: penghapusan resource yang tidak digunakan tidak menghapus terjemahannya, dan tidak menanyakannya juga

Plugin Android Gradle 9.0.0-alpha02

Perbaikan Masalah
Plugin Android Gradle
Gagal membangun saat file proguard tidak ada
menghapus tanda gradle.properties default buildconfig
Mengubah nilai default targetSdk aplikasi agar didasarkan pada compileSdk, bukan minSdk

Plugin Android Gradle 9.0.0-alpha01

Perbaikan Masalah
Plugin Android Gradle
Menghapus AndroidSourceSet.jni yang tidak digunakan lagi di AGP 9.0
Menghapus Installation.installOptions() di AGP 9.0
Menghapus BuildType.isRenderscriptDebuggable di AGP 9.0.
Hapus android.defaults.buildfeatures.renderscript
`com.android.kotlin.multiplatform.library` error dengan Perangkat yang Dikelola Gradle
Menghapus tanda gradle.properties default `android.defaults.buildfeatures.aidl`