Plugin Android Gradle 8.1.0 (Juli 2023)

Plugin Android Gradle 8.1.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 33.0.1 33.0.1 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.

DSL Kotlin adalah default untuk konfigurasi build

Project baru kini menggunakan DSL Kotlin (build.gradle.kts) secara default untuk konfigurasi build. Hal ini menawarkan pengalaman pengeditan yang lebih baik daripada Groovy DSL (build.gradle) dengan sorotan sintaksis, penyelesaian kode, dan navigasi ke deklarasi. Perhatikan bahwa jika Anda menggunakan AGP 8.1 dan DSL Kotlin untuk konfigurasi build, Anda harus menggunakan Gradle 8.1 untuk mendapatkan pengalaman terbaik. Untuk mempelajari lebih lanjut, lihat panduan migrasi Kotlin DSL.

Dukungan bahasa per aplikasi otomatis

Mulai dari Android Studio Giraffe Canary 7 dan AGP 8.1.0-alpha07, Anda dapat mengonfigurasi aplikasi untuk mendukung preferensi bahasa per aplikasi secara otomatis. Berdasarkan resource project, plugin Android Gradle menghasilkan file LocaleConfig dan menambahkan referensi ke file tersebut dalam file manifes akhir, sehingga Anda tidak perlu lagi melakukannya secara manual. AGP menggunakan resource dalam folder res modul aplikasi Anda dan dependensi modul library apa pun untuk menentukan lokalitas yang akan disertakan dalam file LocaleConfig.

Perhatikan bahwa fitur bahasa per aplikasi otomatis mendukung aplikasi yang menjalankan Android 13 (level API 33) atau yang lebih baru. Untuk menggunakan fitur ini, Anda harus menetapkan compileSdkVersion ke versi 33 atau lebih tinggi. Untuk mengonfigurasi preferensi bahasa per aplikasi untuk Android versi sebelumnya, Anda masih harus menggunakan API dan pemilih bahasa dalam aplikasi.

Untuk mengaktifkan dukungan bahasa per aplikasi otomatis, tentukan lokalitas default:

  1. Dalam folder res modul aplikasi, buat file baru bernama resources.properties.
  2. Dalam file resources.properties, tetapkan lokalitas default dengan label unqualifiedResLocale. Untuk membentuk nama lokalitas, gabungkan kode bahasa dengan skrip opsional dan kode wilayah, yang memisahkan keduanya dengan tanda hubung:

    Misalnya, jika lokalitas default Anda adalah bahasa Inggris Amerika:

        unqualifiedResLocale=en-US
        

AGP menambahkan lokalitas default ini dan lokalitas alternatif yang telah Anda tentukan, menggunakan direktori values-* dalam folder res, ke file LocaleConfig yang dibuat secara otomatis.

Dukungan bahasa per aplikasi otomatis dinonaktifkan secara default. Untuk mengaktifkan fitur ini, gunakan setelan generateLocaleConfig di blok androidResources {} file build.gradle.kts level modul (file build.gradle jika Anda menggunakan Groovy):

Kotlin

android {
  androidResources {
    generateLocaleConfig = true
  }
}

Groovy

android {
  androidResources {
    generateLocaleConfig true
  }
}

Android Lint berisi bytecode yang menargetkan JVM 17

Mulai AGP 8.1.0-alpha04, Android Lint berisi bytecode yang menargetkan JVM 17. Jika menulis pemeriksaan lint kustom, Anda harus mengompilasi dengan JDK 17 atau yang lebih tinggi dan menentukan jvmTarget = '17' di opsi compiler Kotlin.

Untuk mempelajari alat lint lebih lanjut, lihat Meningkatkan kode dengan pemeriksaan lint.

Setelan kompresi library native dipindahkan ke DSL

Mulai dari AGP 8.1.0-alpha10, Anda akan mendapatkan peringatan jika tidak mengonfigurasi kompresi library native menggunakan DSL, bukan manifes. Panduan berikut menjelaskan cara memperbarui konfigurasi untuk menggunakan DSL. Untuk mendapatkan bantuan dalam melakukan update ini, gunakan Upgrade Assistant AGP (Tools > AGP Upgrade Assistant).

Untuk menggunakan library native yang tidak dikompresi, hapus atribut android::extractNativeLibs dari manifes dan tambahkan kode berikut ke file build.gradle.kts level modul (file build.gradle jika Anda menggunakan Groovy):

Kotlin

android {
  packagingOptions {
    jniLibs {
      useLegacyPackaging = false
    }
  }
}

Groovy

android {
  packagingOptions {
    jniLibs {
      useLegacyPackaging false
    }
  }
}

Flag build eksperimental

Ini adalah flag eksperimental untuk mengonfigurasi build yang tersedia di AGP 8.1.

Flag Ditambahkan di Nilai default Catatan
android.experimental.useDefaultDebugSigningConfigForProfileableBuildtypes AGP 8.0 false Mengaktifkannya tanpa konfigurasi penandatanganan yang ditentukan akan menyebabkan AGP menggunakan konfigurasi penandatanganan debug default saat menjalankan build yang dapat dibuat profil atau di-debug. Flag ini dinonaktifkan secara default untuk mendorong penulis build mendeklarasikan konfigurasi penandatanganan pembuatan profil tertentu.
android.experimental.library.desugarAndroidTest AGP 8.0 false Flag ini memungkinkan builder library mengaktifkan desugaring library inti untuk APK pengujian tanpa memengaruhi AAR yang dihasilkan, misalnya melalui linting. Kami berencana untuk mendukung perilaku ini di Variant API pada akhirnya.
android.experimental.testOptions.managedDevices.customDevice AGP 8.0 false Jika diaktifkan, Perangkat yang Dikelola Gradle memungkinkan jenis perangkat kustom yang ditentukan pengguna yang dapat disediakan oleh plugin. Flag ini harus diaktifkan jika Anda ingin menggunakan plugin Firebase Test Lab.
android.lint.printStackTrace AGP 8.0 false Jika diaktifkan, Android lint akan mencetak stacktrace jika mengalami error. Flag ini memiliki kemampuan yang sama dengan variabel lingkungan LINT_PRINT_STACKTRACE.
android.experimental.testOptions.managedDevices.maxConcurrentDevices AGP 8.0 Tidak ada Menentukan jumlah maksimum Perangkat yang Dikelola Gradle serentak (AVD) yang akan aktif pada satu titik waktu. Jika nilainya 0 atau negatif, tidak ada jumlah maksimum perangkat.
android.experimental.testOptions.installApkTimeout AGP 8.0 Tidak ada Durasi waktu tunggu dalam detik untuk menginstal APK. Jika nilainya 0 atau negatif, nilai tersebut akan ditetapkan ke nilai default oleh UTP.

Perbaikan masalah

Plugin Android Gradle 8.1.0

Perbaikan Masalah
Plugin Android Gradle
Masalah `com.android.build.gradle.tasks.ShaderCompile` dengan cache konfigurasi
Menambahkan ke resource Java menggunakan AGP API akan merusak cache konfigurasi
[Android Studio : Flamingo | 2022.2.1 Canary 8] liblog.so dikemas di dalam APK
KGP membaca manifes selama konfigurasi, membatalkan validasi konfigurasi dalam cache pada perubahan manifes
Pesan peringatan build tidak jelas saat masalah berada di manifes gabungan
Mengupgrade ke AGP 7.4 menyebabkan StackOverflowError
ClassNotFoundException dalam fitur dinamis yang bergantung langsung pada subproject library Kotlin
processDebugUnitTestManifest gagal dengan placeholder manifes untuk varian pengujian
processDebugUnitTestManifest gagal dengan placeholder manifes untuk varian pengujian
properti namespace mungkin milik HasAndroidResources
Tidak dapat menonaktifkan pesan "Gradle files have changed before last project sync"
Muncul pesan "We recommend using a newer Android Gradle plugin" jika tidak ada plugin yang lebih baru
processDebugUnitTestManifest gagal dengan placeholder manifes untuk varian pengujian
Flag Boolean untuk menonaktifkan pemeriksaan SDK kompilasi di CheckAarMetadataTask
Error build merujuk pada API level 34, yang tidak ada
Menyetel toolchain JVM tidak memengaruhi nilai targetCompatibility JavaCompile
Entri deepLink navigasi dengan domain karakter pengganti tidak memiliki atribut `android:host` di manifes gabungan
Tugas processDebugMainManifest gagal sejak Plugin Android Gradle 8.1
Dapatkah kami menghapus AnalyticsRecordingTask?
Konten output-metadata.json tidak konsisten
Dapatkah kami menghapus AnalyticsRecordingTask?
Konten output-metadata.json tidak konsisten
Menyetel toolchain JVM tidak memengaruhi nilai targetCompatibility JavaCompile
Entri deepLink navigasi dengan domain karakter pengganti tidak memiliki atribut `android:host` di manifes gabungan
Tugas processDebugMainManifest gagal sejak Plugin Android Gradle 8.1
Android Studio tidak mematuhi variabel lingkungan STUDIO_GRADLE_JDK
Jenis sumber kustom harus membuat set sumber multi-ragam
DependenciesInfoBuilder memerlukan update API + dokumen
DexingNoClasspathTransform (minSdk >= 24) dengan target Java 11 gagal karena anggota nest tidak ada
DslExtension.Builder.extendProjectWith() tidak berfungsi seperti yang dijelaskan di Groovy
Menambahkan VariantSelector.withFlavor API yang tidak menggunakan kotlin.Pair
AndroidLintAnalysisTask (:lintAnalyzeExternalRelease) memiliki cache yang tidak ditemukan karena `proguard.txt` telah berubah
Manifes gabungan aplikasi berisi atribut extractNativeLibs dan useEmbeddedDex dari dependensi
AGP: Mengekspos jalur ke alat AIDL dan file AIDL framework sebagai API publik
Permintaan: membiarkan IDE menawarkan perbaikan untuk "PermittedSubclasses requires ASM9"
Bug: "Enable KSP and use the KSP processor for this dependency instead" hanya membuka situs
Gradle 8.1 merusak cache konfigurasi karena .gradle/.android/analytics.settings
generateLocaleConfig di agp 8.1.0 menggunakan pengurutan non-deterministik, merusak build yang dapat direproduksi
Dexer (D8)
Desugaring library inti membuat aplikasi error setelah update terbaru.
regresi agp 8.1.0 dengan API 21 - F/dex2oat ( 4176): art/compiler/driver/compiler_driver.cc:1181] Pemeriksaan gagal: !method->IsAbstract()
Lint
Lint hanya memeriksa transmisi yang aman untuk antarmuka yang diterapkan secara langsung, bukan yang diwarisi
Lint tidak memeriksa transmisi yang valid untuk penerima panggilan
TypedArray#close (API 31) tidak di-desugaring, tetapi AS tidak menampilkan peringatan saat digunakan di try-with-resources
Bug: peringatan positif palsu untuk "The 'BC' provider is deprecated and as of Android P..."
Lint bernilai positif palsu terkait mengingat setelah Kotlin diupgrade ke 1.8.0
Peringatan Lint bernilai positif palsu untuk pemeriksaan SDK_INT yang dilakukan dalam metode dengan parameter enum
Pemeriksaan lint TypographyQuotes tidak berfungsi pada tanda petik yang di-escape
Pemeriksaan lint TrustAllX509TrustManager salah menandai antarmuka yang memperluas X509TrustManager
Hanya memformat ulang kode yang dimasukkan untuk perbaikan penggantian
Lint: pratinjau intent menampilkan pengecualian untuk ReplaceStringQuickFix
Penyingkat (R8)
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
R8 gagal selama build Compose dengan ArrayIndexOutOfBoundsException
Kode terkait StringBuilder sederhana melewatkan panggilan ekor untuk ditambahkan dalam mode rilis atau debuggable=false
Corner case dalam metode VirtualDispatchMethodArgumentPropagator.shouldActivateMethodStateGuardedByBounds()
Hasil dex-startup-optimization di java.lang.VerifyError: Menolak class
Terjadi error pada Verifikasi di Android 12+

Plugin Android Gradle 8.1.1

Perbaikan Masalah
Dexer (D8)
Data Java 16: equals(null) menampilkan NullPointerException
Penyingkat (R8)
java.lang.VerifyError: Pemverifikasi menolak class
Build macet di :minifyReleaseWithR8 saat menggunakan library Apache POI
Menolak pemanggilan saat mengaktifkan pengoptimalan r8
NoClassDefFoundError untuk java.lang.reflect.Executable

Plugin Android Gradle 8.1.2

Perbaikan Masalah
Plugin Android Gradle
androidResources tidak tersedia di modul library android
[AGP 8.1.0] Pengujian ./gradlew gagal dengan pesan "Unable to find manifest output" jika splits.abi.isEnable dan testOptions.unitTests.isIncludeAndroidResources bernilai benar (true)
Penyingkat (R8)
Kotlin 1.9 menyebabkan lambda Kotlin dihancurkan oleh R8 jika nullcheck dihilangkan
R8 gagal dengan "Nilai yang tidak ditentukan ditemukan selama kompilasi" untuk play-services-measurement-21.3.0-runtime.jar

Plugin Android Gradle 8.1.3

Perbaikan Masalah
Plugin Android Gradle
[AGP 8.1.0] Pengujian ./gradlew gagal dengan pesan "Unable to find manifest output" jika splits.abi.isEnable dan testOptions.unitTests.isIncludeAndroidResources bernilai benar (true)
Kegagalan build setelah mengupdate ke AGP 8.1

Plugin Android Gradle 8.1.4

Perbaikan Masalah
Plugin Android Gradle
Jangan menjalankan tugas dexing pada class subproject jika sudah di-dex melalui transformasi artefak