Plugin Android Gradle 8.0.0 (April 2023)

Plugin Android Gradle 8.0.0 merupakan rilis utama yang menyertakan berbagai peningkatan dan fitur baru.

Kompatibilitas

Versi minimum Versi default Catatan
Gradle 8.0 8.0 Untuk mempelajari lebih lanjut, lihat mengupdate Gradle.
SDK Build Tools 30.0.3 30.0.3 Instal atau konfigurasi SDK Build Tools.
NDK T/A 25.1.8937393 Instal atau konfigurasi versi lain dari NDK.
JDK 17 17 Untuk mempelajari lebih lanjut, lihat menyetel versi JDK.

Rilis patch

Berikut adalah daftar rilis patch untuk Plugin Android Gradle 8.0.

Plugin Android Gradle 8.0.2 (Mei 2023)

Untuk daftar bug yang diperbaiki di AGP 8.0.2, lihat masalah yang ditutup di Android Studio 2022.2.1.

Plugin Android Gradle 8.0.1 (Mei 2023)

Update minor ini mencakup perbaikan bug berikut:

Perbaikan masalah
Error: "No VersionRequirement with the given id in the table" setelah mengupgrade AGP 7.2.2 -> 7.4.0
R8 NullPointerException pada markTypeAsLive AGP 7.4.1
[R8 4.0.53] Kegagalan verifikasi class berat di Android 11

Perubahan yang menyebabkan gangguan: namespace diperlukan dalam skrip build level modul

Anda harus menetapkan namespace dalam file build.gradle.kts level modul, bukan file manifes. Anda dapat mulai menggunakan properti DSL namespace mulai AGP 7.3. Untuk mempelajari lebih lanjut, lihat Menetapkan namespace.

Saat bermigrasi ke DSL namespace, perhatikan masalah berikut:

  • AGP versi sebelumnya menyimpulkan namespace pengujian dari namespace utama, atau ID aplikasi, secara tidak benar dalam beberapa kasus. AGP Upgrade Assistant akan memblokir upgrade jika menemukan bahwa namespace utama dan namespace pengujian project Anda sama. Jika upgrade diblokir, Anda perlu mengubah testNamespace secara manual dan memodifikasi kode sumber Anda sebagaimana mestinya.
  • Setelah Anda mengubah namespace pengujian, kode Anda mungkin dikompilasi, tetapi pengujian berinstrumen gagal saat runtime. Hal ini dapat terjadi jika kode sumber pengujian berinstrumen mereferensikan resource yang ditentukan dalam androidTest dan sumber aplikasi Anda.

Untuk informasi selengkapnya, lihat masalah #191813691 komentar #19.

Perubahan yang dapat menyebabkan gangguan: nilai default opsi build

Mulai AGP 8.0, nilai default untuk flag ini telah berubah untuk meningkatkan performa build. Untuk mendapatkan bantuan dalam menyesuaikan kode Anda guna mendukung beberapa perubahan ini, gunakan Upgrade Assistant AGP (Tools > AGP Upgrade Assistant). Upgrade Assistant memandu Anda dalam memperbarui kode untuk mengakomodasi perilaku baru atau menetapkan tanda untuk mempertahankan perilaku sebelumnya.

Flag Nilai default baru Nilai default sebelumnya Catatan
android.defaults.buildfeatures.buildconfig false true AGP 8.0 tidak menghasilkan BuildConfig secara default. Anda harus menentukan opsi ini menggunakan DSL di project tempat Anda memerlukannya.
android.defaults.buildfeatures.aidl false true AGP 8.0 tidak mengaktifkan dukungan AIDL secara default. Anda harus menentukan opsi ini menggunakan DSL di project tempat Anda memerlukannya. Flag ini akan dihapus di AGP 9.0.
android.defaults.buildfeatures.renderscript false true AGP 8.0 tidak mengaktifkan dukungan RenderScript secara default. Anda harus menentukan opsi ini menggunakan DSL di project tempat Anda memerlukannya. Flag ini direncanakan akan dihapus di AGP 9.0.
android.nonFinalResIds true false AGP 8.0 menghasilkan class R dengan kolom non-final secara default.
android.nonTransitiveRClass true false AGP 8.0 menghasilkan class R untuk resource yang ditentukan hanya dalam modul saat ini.
android.enableR8.fullMode true false AGP 8.0 mengaktifkan mode penuh R8 secara default. Untuk mengetahui detail selengkapnya, lihat Mode penuh R8.

Perubahan yang dapat menyebabkan gangguan: nilai opsi build yang diterapkan

Mulai AGP 8.0, Anda tidak dapat lagi mengubah nilai untuk tanda ini. Jika Anda menentukannya dalam file gradle.properties, nilai akan diabaikan dan AGP akan mencetak peringatan.

Flag Nilai yang diterapkan Catatan
android.dependencyResolutionAtConfigurationTime.warn true AGP 8.0 memunculkan peringatan jika mendeteksi resolusi konfigurasi selama fase konfigurasi karena berdampak negatif pada waktu konfigurasi Gradle.
android.r8.failOnMissingClasses true AGP 8.0 gagal membuat build yang menggunakan R8 jika ada class yang hilang untuk memastikan pengoptimalan DEX yang lebih baik. Untuk mengatasi hal ini, Anda perlu menambahkan library yang hilang atau aturan simpan -dontwarn. Untuk mengetahui detail selengkapnya, lihat Peringatan class yang tidak ada dalam shrinker R8.
android.testConfig.useRelativePath true Jika dukungan untuk menggunakan resource, aset, dan manifes Android dalam pengujian unit diaktifkan, AGP 8.0 akan menghasilkan file test_config.properties yang hanya berisi jalur relatif. Hal ini memastikan bahwa pengujian unit Android selalu dapat menggunakan cache build Gradle.
android.useNewJarCreator true AGP menggunakan library Zipflinger saat membuat file JAR untuk meningkatkan performa build.
android.bundletool.includeRepositoriesInDependencyReport true Saat menambahkan informasi dependensi SDK di AAB dan APK diaktifkan, AGP 8.0 juga menambahkan daftar repositori project ke informasi ini. Untuk mempelajari lebih lanjut, lihat Informasi dependensi untuk Konsol Play.
android.enableArtProfiles true Profil dasar pengukuran kini selalu dibuat. Lihat Profil Dasar Pengukuran untuk mengetahui detailnya.
android.enableNewResourceShrinker true Menggunakan implementasi shinker resource baru secara default. Penyingkat resource baru menyertakan dukungan untuk fitur dinamis.
android.enableSourceSetPathsMap true Digunakan untuk menghitung pemetaan jalur resource relatif, sehingga build Gradle lebih sering diperbarui.
android.cacheCompileLibResources true Resource library yang dikompilasi kini dapat di-cache secara default karena Gradle melacak file resource yang relatif terhadap lokasi project. Memerlukan android.enableSourceSetPathsMap untuk diaktifkan.
android.disableAutomaticComponentCreation true AGP 8.0 tidak membuat SoftwareComponent secara default. Sebagai gantinya, AGP membuat SoftwareComponents hanya untuk varian yang dikonfigurasi untuk dipublikasikan menggunakan DSL publikasi.

Flag stabil baru untuk profil eksekusi

AGP menyertakan flag baru android.settings.executionProfile. Gunakan tanda ini untuk mengganti profil eksekusi default dari SettingsExtension. Untuk mempelajari lebih lanjut, lihat dokumentasi plugin setelan.

Untuk melihat pratinjau flag eksperimental, lihat catatan rilis pratinjau.

Penetapan properti lambat Kotlin tidak didukung

Jika Anda menggunakan DSL Kotlin Gradle untuk skrip build, perhatikan bahwa Android Studio dan AGP 8.0 tidak mendukung penetapan properti eksperimental menggunakan operator =. Untuk informasi selengkapnya tentang fitur ini, lihat catatan rilis dan dokumentasi.

Kategori tugas Build Analyzer

Mulai Android Studio Flamingo, Build Analyzer memiliki tampilan default baru untuk tugas yang memengaruhi durasi build. Jika project Anda menggunakan AGP 8.0 atau yang lebih tinggi, Build Analyzer akan mengelompokkan tugas menurut kategori, bukan menampilkannya satu per satu. Misalnya, tugas khusus untuk Resource Android, Kotlin, atau Dexing digabungkan, lalu diurutkan berdasarkan durasi build. Hal ini memudahkan Anda mengetahui kategori yang paling memengaruhi waktu build. Memperluas setiap kategori akan menampilkan daftar tugas yang sesuai. Untuk menampilkan tugas satu per satu, tanpa pengelompokan, gunakan drop-down Kelompokkan menurut.

Kategori tugas Build Analyzer.

Plugin setelan baru

AGP 8.0.0-alpha09 memperkenalkan plugin setelan baru. Plugin setelan memungkinkan Anda memusatkan konfigurasi global—konfigurasi yang berlaku untuk semua modul—di satu tempat sehingga Anda tidak perlu menyalin dan menempelkan konfigurasi di beberapa modul. Selain itu, Anda dapat menggunakan plugin setelan untuk membuat profil eksekusi alat, atau petunjuk yang berbeda tentang cara menjalankan alat, dan beralih di antara alat tersebut.

Untuk menggunakan plugin setelan, terapkan plugin dalam file settings.gradle:

apply plugin 'com.android.settings'

Memusatkan konfigurasi global

Untuk mengonfigurasi konfigurasi global, gunakan blok android baru dalam file settings.gradle. Berikut contohnya:

android {
  compileSdk 31
  minSdk 28
  ...
}

Profil eksekusi alat

Plugin setelan juga memungkinkan Anda membuat profil eksekusi untuk beberapa alat. Profil eksekusi menentukan cara alat dijalankan; Anda dapat memilih profil eksekusi yang berbeda bergantung pada lingkungan. Dalam profil eksekusi, Anda dapat menetapkan argumen JVM untuk alat dan mengonfigurasinya agar berjalan dalam proses terpisah. Saat ini, hanya alat R8 yang didukung.

Buat profil eksekusi dan tetapkan profil eksekusi default dalam file settings.gradle, seperti yang ditunjukkan dalam contoh berikut:

android {
  execution {
    profiles {
      high {
        r8 {
          jvmOptions += ["-Xms2048m", "-Xmx8192m", "-XX:+HeapDumpOnOutOfMemoryError"]
          runInSeparateProcess true
        }
      }
      low {
        r8 {
          jvmOptions += ["-Xms256m", "-Xmx2048m", "-XX:+HeapDumpOnOutOfMemoryError"]
          runInSeparateProcess true
        }
      }
      ci {
        r8.runInSeparateProcess false
      }
    }
    defaultProfile "low"
  }
}

Untuk mengganti profil default, pilih profil lain menggunakan properti android.experimental.settings.executionProfile dalam file gradle.properties:

android.experimental.settings.executionProfile=high

Anda juga dapat menetapkan properti ini menggunakan command line, yang memungkinkan Anda menyiapkan alur kerja yang berbeda. Misalnya, jika memiliki alur kerja integrasi berkelanjutan, Anda dapat menggunakan command line untuk mengubah profil eksekusi tanpa harus mengubah file settings.gradle:

./gradlew assembleRelease \
  -Pandroid.experimental.settings.executionProfile=ci

JDK 17 diperlukan untuk menjalankan AGP 8.0

Saat menggunakan Plugin Android Gradle 8.0 untuk mem-build aplikasi, JDK 17 kini diperlukan untuk menjalankan Gradle. Android Studio Flamingo memaketkan JDK 17 dan mengonfigurasi Gradle untuk menggunakannya secara default, sehingga sebagian besar pengguna Android Studio tidak perlu melakukan perubahan konfigurasi apa pun ke project mereka.

Jika Anda perlu menetapkan versi JDK yang digunakan oleh AGP di dalam Android Studio secara manual, Anda harus menggunakan JDK 17 atau yang lebih tinggi.

Saat menggunakan AGP yang tidak bergantung pada Android Studio, upgrade versi JDK dengan menetapkan JAVA_HOME variabel lingkungan atau -Dorg.gradle.java.home opsi command line ke direktori penginstalan JDK 17 Anda.

Perbaikan masalah

Plugin Android Gradle 8.0.0

Perbaikan Masalah
Plugin Android Gradle
Kegagalan build yang tidak stabil dalam tugas MergeResources
JavaPluginConvention dan HasConvention tidak digunakan lagi
Lokasi file salah dan tidak konsisten untuk transform API baru
Plugin Android Gradle tidak boleh menggunakan fungsi GUtil.toWords(string) yang tidak digunakan lagi
Plugin Android Gradle tidak boleh menggunakan fungsi ConfigureUtil.configure(closure, target) yang tidak digunakan lagi
Mengupdate pengujian AGP untuk menggunakan KGP 1.7.20-Beta
Gradle 7.4 gagal (tidak dapat membuat instance AnalyticsService)
"unknown enum constant" baru dari javac pada AGP 7.4.0-alpha09
Konfigurasi MergeGeneratedProguardFilesCreationAction lambat meskipun cache konfigurasi aktif
[AGP] Menambahkan direktori sumber yang dihasilkan ke model IDE (Variant API)
JavaPluginConvention dan HasConvention tidak digunakan lagi
Jangan tambahkan ignorewarnings ke R8 secara default
Peringatkan saat file proguard tidak ada
AGP 7.3.0 merusak sinkronisasi gradle untuk project platform gradle
library apksig: ApkVerifier$Result.getV4SchemeSigners() ditandai sebagai pribadi
Berhenti membuat konfigurasi androidJacocoAnt jika cakupan tidak diaktifkan
Menggunakan @IntDef dalam komponen library tidak menghasilkan annotation.zip di aar
Tidak dapat menemukan jenis super yang sama untuk dan
Menambahkan versi properti gradle LINT_PRINT_STACKTRACE=true
Artefak prefab usang yang dikemas ke dalam AAR
Bermigrasi dari properti tujuan ke properti outputLocation untuk mengatasi peringatan penghentian penggunaan dan mempersiapkan Gradle 9.0
Pertimbangkan flag `--release` saat menyiapkan tugas JavaCompile
[AGP-7.3.0-beta03] ShrinkResourcesNewShrinkerTask gagal saat ada baris kosong setelah deklarasi xml
Target lintVital dijalankan secara default dalam varian debug
Peringatkan saat file proguard tidak ada
AGP mencoba menambahkan kotlinOptions.freeCompilerArgs pada fase eksekusi tugas
Sinkronisasi Gradle gagal: Sinkronisasi gagal: alasan tidak diketahui
DependencyReportTask tidak kompatibel dengan cache konfigurasi
Mengganti resource dengan resValue di build.gradle menyebabkan Error: Resource duplikat
Jenis build 'debug' memiliki kunci penandatanganan default, sedangkan yang lain tidak
Menggunakan fitur dinamis dan penyingkatan resource menyebabkan error runtime
Jenis build 'debug' memiliki kunci penandatanganan default, sedangkan yang lain tidak
Direktori sumber yang dihasilkan dicantumkan sebagai direktori Java dalam penyedia sumber utama model lint
Gradle 8.0-milestone-2 menyebabkan pengecualian di AGP
Mengoptimalkan penggabungan manifes untuk aplikasi dan library
Menambahkan gradle-settings-api ke pembuatan javadoc
"unknown enum constant" baru dari javac pada AGP 7.4.0-alpha09
AGP 7.4.0-alpha09 menghasilkan build yang tidak dapat diupload ke Firebase App Distribution
lint.xml dalam modul tidak dipertimbangkan untuk pemeriksaan UP-TO-DATE tugas lint
Masalah Plugin Android Gradle 7.0+ dan Android Tests: Tidak dapat menemukan resource: id
configureCMakeDebug tidak berfungsi dengan pengecualian pointer null
Mengupgrade project IllegalAccessError ke AS2022.2.1.5, FireBasePerfPlugin
Sinkronisasi gagal dengan error samar "Koleksi tidak berisi elemen yang cocok dengan predikat".
Instrumentation API tidak mengubah dependensi file lokal
Error `AnnotationProcessorOptions.arguments are queried` saat mengupdate ke 7.4 Beta 1
Memindahkan plugin publik Gradle ke gradle-api dan menghapus BasePlugin.getExtension
r8.jvmArgs tidak digunakan
JDK17 sebagai versi minimum yang diperlukan untuk AGP
AGP 8.0.0 A8 merusak profil dasar pengukuran
Mengubah 'compileSdkVersion' ke 'compileSdk' dalam pesan CheckAarMetadataTask di AGP 8.0
AGP 7.4.0-rc01 merusak Variant API dengan "Querying the mapped value of map(provider(java.util.Set)) before task '...' has completed is not supported"
Masalah `com.android.build.gradle.tasks.ShaderCompile` dengan cache konfigurasi
Menambahkan ke resource Java menggunakan AGP API akan merusak cache konfigurasi
Plugin Lint bukan bagian dari gradle-api
DexingFileDependenciesTask.outputKeepRules adalah direktori, tetapi ditandai sebagai OutputFile
Mengupgrade ke AGP 7.4 menyebabkan StackOverflowError
processDebugUnitTestManifest gagal dengan placeholder manifes untuk varian pengujian
Lint mengakses informasi set sumber tanpa dependensi
Error build merujuk pada API level 34, yang tidak ada
Muncul pesan "We recommend using a newer Android Gradle plugin" jika tidak ada plugin yang lebih baru
android.injected.testOnly=false tidak berfungsi
Dexer (D8)
Error penggabungan dex sesuai dengan sintetis global setelah mengupgrade AS Canary 6 ke 7
Mengupdate library metadata Kotlin ke versi 0.6.0
Solusi untuk JDK-8272564 tampaknya diperlukan di API level 28-30
Lint
Pemeriksaan lint ResourceType tidak berfungsi untuk sumber kotlin
VersionChecks tidak menangani pemeriksaan rentang Kotlin
Positif palsu untuk InlinedApi saat digabungkan
Recycle Lint bernilai positif palsu terkait openInputStream
[BuildTool/Lint] Properti konstruktor ChecksSdkIntAtLeast
Lint: Penggabungan PartialResults bekerja dengan tidak benar
Android Studio salah menandai versi yang ditentukan sebagai versi usang.
AndroidDeprecationInspection.DeprecationFilter EP tidak pernah terdaftar di file android-plugin.xml
Penjelasan pemeriksaan lint AccessibilityDetector sudah tidak berlaku
Pemeriksaan Lint SDK_INT harus memahami variabel lokal sementara
Error saat TestMode.TYPE_ALIAS mengganti jenis Fungsi dengan typealias
Bug: saat ObjectAnimator dibuat di luar blok kode saat ini, ada peringatan positif palsu untuk tidak memulainya #38
Lint: NPE karena membuat kueri instance Aplikasi dalam mode mergeOnly
Aturan lint NonConstantResourceId tidak dapat mendeteksi untuk menetapkan nilai konstanta dari ID resource
Tidak menampilkan error pada ID tampilan
Kegagalan untuk melakukan deserialisasi cache resource lint akan mengakibatkan error lint (tetapi harus menjadi peringatan)
Regresi Desugar NewApi AGP Flamingo Alpha 8 Lint
TypedArray#close (API 31) tidak di-desugaring, tetapi AS tidak menampilkan peringatan saat digunakan di try-with-resources
Lint tidak memeriksa transmisi yang valid untuk penerima panggilan
Lint hanya memeriksa transmisi yang aman untuk antarmuka yang diterapkan secara langsung, bukan yang diwarisi
Integrasi Lint
File dasar pengukuran saat ini adalah Input dan Output dari tugas Lint
Penyingkat (R8)
Error NPE/pernyataan dalam pemverifikasi frame CF
Regresi setelah penghapusan cache pencarian kolom
`:app:minifyVariantWithR8` menampilkan NullPointerException di AGP 7.4.0-beta02
R8: ClassNotFoundException saat -allowaccessmodification
Menambahkan dukungan untuk penerima konteks dalam metadata
java.lang.VerifyError: class Verifier ditolak androidx.compose.ui.graphics.colorspace.o: void androidx.compose.ui.graphics.colorspace.o.(java.lang.Object) gagal memverifikasi: void androidx.compose.ui.graphics.colorspace.o.(java.lang.Object): [0x0] tidak dapat mengakses kolom instance java.lang.Object androidx.compose.ui.graphics.colorspace.n.a dari objek jenis Precise Reference: androidx.compose.ui.graphics.colorspace.o
AGP 7.4.0/7.3.1 - Mencoba untuk mengantrekan tindakan dalam daftar kerja antrean yang tidak dapat didorong
Meminifikasi kode Renderscript: penurunan performa yang besar saat mengupgrade AGP dari 7.3.1 ke 7.4.0

Plugin Android Gradle 8.0.1

Perbaikan Masalah
Penyingkat (R8)
Error: "No VersionRequirement with the given id in the table" setelah mengupgrade AGP 7.2.2 -> 7.4.0
R8 NullPointerException pada markTypeAsLive AGP 7.4.1
[R8 4.0.53] Kegagalan verifikasi class berat di Android 11

Plugin Android Gradle 8.0.2

Perbaikan Masalah
Penyingkat (R8)
R8 gagal selama build Compose dengan ArrayIndexOutOfBoundsException
VerifyError: Pemverifikasi menolak class saat menggunakan R8 dengan Kotlin 1.8.20
R8 di AGP 8 merusak layanan Google Fit
Penyertaan informasi file sumber dengan nama residu yang membuat nama input tumpang-tindih tidak direpresentasikan dengan benar