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-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.
falsetrue 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. 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.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
  }
}

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:

DSL 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 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
  }
}
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
  }
}

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.