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 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 dapat 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 yang dimulai dengan 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 keliru dalam beberapa kasus. Upgrade Assistant AGP akan memblokir upgrade jika menemukan bahwa namespace utama project dan namespace pengujian Anda sama. Jika upgrade diblokir, Anda harus mengubah testNamespace dan mengubah kode sumber secara manual.
  • Setelah mengubah namespace pengujian, kode Anda mungkin akan dikompilasi, tetapi pengujian berinstrumen gagal saat runtime. Hal ini dapat terjadi jika kode sumber pengujian berinstrumen Anda mereferensikan resource yang ditentukan di sumber androidTest dan aplikasi.

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 diubah guna meningkatkan performa build. Untuk mendapatkan bantuan dalam menyesuaikan kode Anda agar mendukung beberapa perubahan ini, gunakan Upgrade Assistant AGP (Tools > AGP Upgrade Assistant). Upgrade Assistant akan memandu Anda mengupdate kode untuk mengakomodasi perilaku baru atau menyetel flag 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 perlu menentukan opsi ini menggunakan DSL dalam project yang memerlukannya.
android.defaults.buildfeatures.aidl false true AGP 8.0 tidak mengaktifkan dukungan AIDL secara default. Anda perlu menentukan opsi ini menggunakan DSL dalam project yang memerlukannya. Tanda ini akan dihapus di AGP 9.0.
android.defaults.buildfeatures.renderscript false true AGP 8.0 tidak mengaktifkan dukungan RenderScript secara default. Anda perlu menentukan opsi ini menggunakan DSL dalam project yang memerlukannya. Flag ini 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 dalam modul saat ini saja.
android.enableR8.fullMode true false AGP 8.0 mengaktifkan mode penuh R8 secara default. Untuk detail selengkapnya, lihat Mode lengkap 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 ini akan diabaikan dan AGP mencetak peringatan.

Flag Nilai yang diterapkan Catatan
android.dependencyResolutionAtConfigurationTime.warn true AGP 8.0 memberikan peringatan jika mendeteksi resolusi konfigurasi selama fase konfigurasi karena berdampak negatif pada waktu konfigurasi Gradle.
android.r8.failOnMissingClasses true AGP 8.0 akan gagal membuat build yang menggunakan R8 jika ada class yang hilang untuk memastikan pengoptimalan DEX yang lebih baik. Untuk mengatasinya, Anda perlu menambahkan library yang hilang atau aturan keep -dontwarn. Untuk detail selengkapnya, lihat Peringatan class tidak ada dalam penyingkat R8.
android.testConfig.useRelativePath true Saat dukungan untuk penggunaan 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 bisa 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 akan 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 Gunakan penerapan 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 diupdate.
android.cacheCompileLibResources true Resource library yang dikompilasi kini dapat disimpan ke dalam cache secara default karena Gradle melacak file resource yang relatif terhadap lokasi project. Perlu mengaktifkan android.enableSourceSetPathsMap.
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 tanda 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 baru, bukan menampilkan tugas satu per satu, Build Analyzer akan mengelompokkannya berdasarkan kategori. Misalnya, tugas khusus untuk Resource Android, Kotlin, atau Dexing dikelompokkan bersama, lalu diurutkan berdasarkan durasi build. Hal ini memudahkan untuk mengetahui kategori apa yang memiliki dampak terbesar pada waktu build. Memperluas setiap kategori akan menampilkan daftar tugas yang sesuai. Untuk menampilkan tugas satu per satu, tanpa mengelompokkan, gunakan drop-down Group by.

Kategori tugas Build Analyzer.

Plugin setelan baru

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

Untuk menggunakan plugin setelan, terapkan plugin di 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 berbagai profil eksekusi bergantung pada lingkungannya. Dalam profil eksekusi, Anda dapat menyetel argumen JVM untuk alat dan mengonfigurasinya untuk dijalankan 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 continuous integration, 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 membuat 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 versi yang lebih baru.

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