Plugin Android Gradle 7.0.0 (Juli 2021)

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

7.0.1 (Agustus 2021)

Update minor ini menyertakan berbagai perbaikan bug. Untuk melihat daftar perbaikan bug penting, baca postingan terkait di blog Update Rilis.

Kompatibilitas

Versi minimum Versi default Catatan
Gradle 7.0.2 7.0.2 Untuk mempelajari lebih lanjut, lihat mengupdate Gradle.
SDK Build Tools 30.0.2 30.0.2 Instal atau konfigurasi SDK Build Tools.
NDK T/A 21.4.7075529 Instal atau konfigurasi versi lain dari NDK.
JDK 11 11 Untuk mempelajari lebih lanjut, lihat menyetel versi JDK.

JDK 11 diperlukan untuk menjalankan AGP 7.0

Saat menggunakan plugin Android Gradle 7.0 untuk mem-build aplikasi, JDK 11 kini diperlukan untuk menjalankan Gradle. Android Studio Arctic Fox memaketkan JDK 11 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 11 atau yang lebih tinggi.

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

Perhatikan bahwa SDK Manager dan AVD Manager dalam paket SDK Tools yang tidak digunakan lagi tidak berfungsi dengan JDK 11. Untuk terus menggunakan SDK Manager dan AVD Manager dengan AGP 7.0 dan yang lebih tinggi, Anda harus beralih ke versi baru alat di paket Alat Command Line Android SDK saat ini.

Variant API stabil

Variant API yang baru sekarang menjadi stabil. Lihat antarmuka baru dalam paket com.android.build.api.variant dan contoh dalam project GitHub gradle-recipes. Sebagai bagian dari Variant API baru, kami telah menyediakan sejumlah file perantara, yang disebut artefak, melalui antarmuka Artefak. Artefak ini, seperti manifes gabungan, bisa didapatkan dan disesuaikan dengan aman menggunakan plugin dan kode pihak ketiga.

Kami akan terus memperluas Variant API dengan menambahkan fungsi baru dan menambah jumlah artefak perantara yang kami sediakan untuk penyesuaian.

Perubahan perilaku untuk Lint

Bagian ini menjelaskan beberapa perubahan perilaku Lint di plugin Android Gradle 7.0.0.

Memperbaiki lint untuk dependensi library

Menjalankan lint dengan checkDependencies = true sekarang lebih cepat dari sebelumnya. Untuk project Android yang terdiri dari aplikasi dengan dependensi library, sebaiknya tetapkan checkDependencies ke true seperti yang ditunjukkan di bawah ini, dan jalankan lint melalui ./gradlew :app:lint, yang akan menganalisis semua modul dependensi secara paralel dan menghasilkan satu laporan, termasuk masalah dari aplikasi dan semua dependensinya.

Groovy

// build.gradle
android {
  ...
  lintOptions {
    checkDependencies true
  }
}

Kotlin

// build.gradle.kts
android {
  ...
  lint {
    isCheckDependencies = true
  }
}

Tugas Lint sekarang dapat menjadi UP-TO-DATE

Jika sumber dan resource modul tidak berubah, tugas analisis lint untuk modul tidak perlu dijalankan lagi. Jika hal ini terjadi, eksekusi tugas akan muncul sebagai "UP-TO-DATE" dalam output Gradle. Dengan perubahan ini, saat menjalankan lint pada modul aplikasi dengan checkDependencies = true, hanya modul yang telah berubah yang perlu menjalankan analisisnya. Hasilnya, Lint dapat berjalan lebih cepat lagi.

Tugas laporan Lint juga tidak perlu dijalankan jika inputnya tidak berubah. Masalah umum yang terkait adalah tidak ada output teks lint yang dicetak ke stdout saat tugas lint UP-TO-DATE (masalah #191897708).

Menjalankan lint pada modul fitur dinamis

AGP tidak lagi mendukung pengoperasian lint dari modul fitur dinamis. Menjalankan lint dari modul aplikasi yang sesuai akan menjalankan lint pada modul fitur dinamisnya dan menyertakan semua masalah dalam laporan lint aplikasi. Masalah umum yang terkait adalah saat menjalankan lint dengan checkDependencies = true dari modul aplikasi, dependensi library fitur dinamis tidak diperiksa kecuali juga merupakan dependensi aplikasi (masalah #191977888).

Menjalankan lint hanya pada varian default

Menjalankan ./gradlew :app:lint sekarang akan menjalankan lint hanya untuk varian default. Di versi AGP sebelumnya, lint dijalankan untuk semua varian.

Peringatan class yang tidak ada dalam shrinker R8

R8 secara lebih akurat dan konsisten menangani class yang tidak ada dan opsi -dontwarn. Oleh karena itu, Anda harus mulai mengevaluasi peringatan class yang tidak ada yang dimunculkan oleh R8.

Saat menemukan referensi class yang tidak ditentukan di aplikasi Anda atau salah satu dependensinya, R8 akan mengeluarkan peringatan yang muncul dalam output build Anda. Contoh:

R8: Missing class: java.lang.instrument.ClassFileTransformer

Peringatan ini berarti bahwa definisi class java.lang.instrument.ClassFileTransformer tidak dapat ditemukan saat menganalisis kode aplikasi Anda. Meskipun ini biasanya berarti terjadi error, ada kemungkinan Anda ingin mengabaikan peringatan ini. Dua alasan umum untuk mengabaikan peringatan adalah:

  1. Library yang menargetkan JVM dan class yang tidak ada adalah jenis library JVM (seperti dalam contoh di atas).

  2. Salah satu dependensi Anda menggunakan API khusus waktu kompilasi.

Anda dapat mengabaikan peringatan class yang tidak ada dengan menambahkan aturan -dontwarn ke file proguard-rules.pro. Contoh:

-dontwarn java.lang.instrument.ClassFileTransformer

Untuk memudahkan, AGP akan membuat file yang berisi semua aturan yang berpotensi hilang, yang menulisnya ke jalur file seperti berikut: app/build/outputs/mapping/release/missing_rules.txt. Tambahkan aturan ke file proguard-rules.pro untuk mengabaikan peringatan.

Di AGP 7.0, pesan class yang tidak ada akan muncul sebagai peringatan, dan Anda dapat mengubahnya menjadi error dengan menetapkan android.r8.failOnMissingClasses = true di gradle.properties. Di AGP 8.0, peringatan ini akan menjadi error yang merusak build Anda. Perilaku AGP 7.0 dapat dipertahankan dengan menambahkan opsi -ignorewarnings ke file proguard-rules.pro, tetapi tindakan itu tidak direkomendasikan.

Cache build plugin Android Gradle dihapus

Cache build AGP telah dihapus di AGP 4.1. Sebelumnya diperkenalkan di AGP 2.3 untuk melengkapi cache build Gradle, cache build AGP digantikan sepenuhnya oleh cache build Gradle di AGP 4.1. Perubahan ini tidak memengaruhi waktu build.

Di AGP 7.0, properti android.enableBuildCache, properti android.buildCacheDir, dan tugas cleanBuildCache telah dihapus.

Menggunakan kode sumber Java 11 dalam project Anda

Sekarang Anda dapat mengompilasi hingga kode sumber Java 11 di project aplikasi, sehingga Anda dapat menggunakan fitur bahasa yang lebih baru seperti metode antarmuka pribadi, operator diamond untuk class anonim, dan sintaksis variabel lokal untuk parameter lambda.

Untuk mengaktifkan fitur ini, tetapkan compileOptions ke versi Java yang diinginkan dan tetapkan compileSdkVersion ke 30 atau lebih tinggi:

// build.gradle
android {
  compileSdkVersion 30
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_11
    targetCompatibility JavaVersion.VERSION_11
  }
  // For Kotlin projects
  kotlinOptions {
    jvmTarget = "11"
  }
}
// build.gradle.kts
android {
  compileSdkVersion(30)
  compileOptions {
    sourceCompatibility(JavaVersion.VERSION_11)
    targetCompatibility(JavaVersion.VERSION_11)
  }
  kotlinOptions {
    jvmTarget = "11"
  }
}

Konfigurasi dependensi dihapus

Pada AGP 7.0, konfigurasi (atau cakupan dependensi) berikut telah dihapus:

  • compile
    Bergantung pada kasus penggunaan, konfigurasi ini telah diganti dengan api atau implementation.
    Juga berlaku untuk varian *Compile, misalnya: debugCompile.
  • provided
    Ini telah diganti dengan compileOnly.
    Juga berlaku untuk varian *Provided, misalnya: releaseProvided.
  • apk
    Ini telah diganti dengan runtimeOnly.
  • publish
    Ini telah diganti dengan runtimeOnly.

Biasanya, AGP Upgrade Assistant akan otomatis memigrasikan project Anda ke konfigurasi baru.

Classpath berubah saat dikompilasi dengan plugin Android Gradle

Jika Anda mengompilasi dengan plugin Android Gradle, classpath kompilasi dapat berubah. Karena AGP kini menggunakan konfigurasi api/implementation secara internal, beberapa artefak dapat dihapus dari classpath kompilasi Anda. Jika Anda bergantung pada dependensi AGP pada waktu kompilasi, pastikan untuk menambahkannya sebagai dependensi eksplisit.

Penambahan library native di folder resource Java tidak didukung

Sebelumnya, Anda dapat menambahkan library native dalam folder resource Java, dan mendaftarkan folder tersebut menggunakan android.sourceSets.main.resources.srcDirs sehingga library native akan diekstrak dan ditambahkan ke APK akhir. Mulai dari AGP 7.0, library ini tidak didukung dan library native di folder resource Java akan diabaikan. Sebagai gantinya, gunakan metode DSL yang ditujukan untuk library native, android.sourceSets.main.jniLibs.srcDirs. Untuk informasi selengkapnya, lihat cara mengonfigurasi set sumber.

Masalah umum

Bagian ini menjelaskan masalah umum yang ada di plugin Android Gradle 7.0.0.

Tidak kompatibel dengan plugin Multiplatform Kotlin 1.4.x

Plugin Android Gradle 7.0.0 kompatibel dengan plugin Multiplatform Kotlin 1.5.0 dan yang lebih tinggi. Project yang menggunakan dukungan Multiplatform Kotlin perlu diupdate ke Kotlin 1.5.0 untuk menggunakan Plugin Android Gradle 7.0.0. Sebagai solusinya, Anda dapat melakukan downgrade plugin Android Gradle ke 4.2.x, meskipun tindakan ini tidak direkomendasikan.

Untuk mengetahui informasi selengkapnya, lihat KT-43944.

Output lint tidak ada

Tidak ada output teks lint yang dicetak ke stdout jika tugas lint sudah yang terbaru (masalah #191897708). Untuk konteks selengkapnya, lihat Perubahan perilaku untuk lint. Masalah ini akan diperbaiki di plugin Android Gradle 7.1.

Tidak semua dependensi library fitur dinamis diperiksa lint

Saat menjalankan lint dengan checkDependencies = true dari modul aplikasi, dependensi library fitur dinamis tidak diperiksa kecuali juga merupakan dependensi aplikasi (masalah #191977888). Sebagai solusinya, tugas lint dapat dijalankan pada library tersebut. Untuk konteks selengkapnya, lihat Perubahan perilaku untuk lint.