Plugin Android Gradle 7.0.0 (Juli 2021)

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

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 membangun aplikasi Anda, JDK 11 sekarang menjadi yang diperlukan untuk menjalankan Gradle. Android Studio Arctic Fox memaketkan JDK 11 dan mengonfigurasi Gradle untuk menggunakannya secara default, yang berarti bahwa sebagian besar pengguna tidak perlu membuat perubahan konfigurasi apa pun pada proyek mereka.

Jika Anda perlu menyetel secara manual Versi JDK yang digunakan oleh AGP di dalam Android Studio, Anda harus menggunakan JDK 11 atau yang lebih tinggi.

Saat menggunakan AGP yang terpisah dari Android Studio, upgrade versi JDK dengan menetapkan variabel lingkungan JAVA_HOME atau opsi command line -Dorg.gradle.java.home ke direktori instalasi JDK 11 Anda.

Perhatikan bahwa SDK Manager dan AVD Manager dalam paket SDK Tools yang sudah 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 perlu beralih ke versi baru alat ini di saat ini Alat Command Line Android SDK paket Google.

Variant API stabil

Variant API yang baru sekarang menjadi stabil. Lihat antarmuka baru di com.android.build.api.variant paket, dan contoh dalam Project GitHub gradle-recipes. Sebagai bagian dari Variant API, kami telah menyediakan sejumlah file perantara, yang disebut artefak, melalui Artefak dalam antarmuka berbasis web yang sederhana. Artefak ini, seperti manifes gabungan, bisa diperoleh dengan aman dan disesuaikan 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 dan penyesuaian.

Perubahan perilaku untuk Lint

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

Memperbaiki lint untuk dependensi library

Menjalankan lint dengan checkDependencies = true kini lebih cepat dari sebelumnya. Untuk project Android yang terdiri dari aplikasi dengan library dependensi, sebaiknya setel checkDependencies ke true seperti yang ditampilkan di bawah ini, dan untuk menjalankan lint melalui ./gradlew :app:lint, yang akan menganalisis semua dependensi modul 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, analisis lint untuk modul ini tidak perlu dijalankan lagi. Jika ini terjadi, eksekusi tugas akan muncul sebagai "UP-TO-DATE" di Gradle {i>output<i} tersebut. Dengan perubahan ini, saat menjalankan lint pada modul aplikasi dengan checkDependencies = true, hanya modul yang telah berubah yang akan butuhkan untuk menjalankan analisis mereka. Hasilnya, Lint dapat berjalan lebih cepat lagi.

Tugas laporan Lint juga tidak perlu dijalankan jika inputnya belum ubah. Masalah umum terkait adalah tidak ada lint output teks yang dicetak ke stdout jika 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 modul fitur dinamisnya dan menyertakan semua masalah dalam lint aplikasi laporan. Masalah umum terkait adalah saat menjalankan lint dengan checkDependencies = true dari modul aplikasi, dependensi library fitur dinamis tidak diperiksa, kecuali jika dependensi dependensi (masalah) #191977888).

Menjalankan lint hanya pada varian default

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

Peringatan class yang tidak ada dalam shrinker R8

R8 dengan lebih tepat dan secara 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 R8 menemukan referensi class yang tidak didefinisikan dalam aplikasi Anda atau salah satu dependensinya, ia akan mengeluarkan peringatan yang muncul di build Anda {i>output<i} tersebut. 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. Meskipun ini biasanya berarti terjadi kesalahan, mungkin Anda ingin mengabaikan peringatan ini. Dua alasan umum untuk mengabaikan peringatan tersebut adalah:

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

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

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

-dontwarn java.lang.instrument.ClassFileTransformer

Untuk memudahkan, AGP akan membuat file yang berisi semua data aturan yang hilang, 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 {i>error<i} dengan mengatur android.r8.failOnMissingClasses = true inci 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 proguard-rules.pro, tetapi 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 berdampak waktu build.

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

Menggunakan kode sumber Java 11 dalam project Anda

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

Untuk mengaktifkan fitur ini, setel compileOptions ke properti yang diinginkan Versi Java dan tetapkan compileSdkVersion ke 30 atau yang 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

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

  • compile
    Bergantung pada kasus penggunaannya, string 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.

Dalam kebanyakan kasus, AGP Upgrade Assistant akan otomatis memigrasikan project Anda ke versi baru konfigurasi standar.

Classpath berubah saat dikompilasi dengan Android Plugin Gradle

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

Penambahan library native dalam resource Java folder tidak didukung

Sebelumnya, Anda bisa menambahkan library native dalam folder resource Java, dan daftarkan folder menggunakan android.sourceSets.main.resources.srcDirs sehingga library native akan diekstrak dan ditambahkan ke APK lainnya. Mulai dari AGP 7.0, library ini tidak didukung dan library native di Folder resource Java diabaikan. Sebagai gantinya, gunakan metode DSL yang ditujukan untuk library native, android.sourceSets.main.jniLibs.srcDirs. Sebagai 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 Kotlin Plugin multiplatform 1.5.0 dan yang lebih tinggi. Project yang menggunakan Kotlin Dukungan multiplatform perlu diupdate ke Kotlin 1.5.0 untuk menggunakan Android Gradle {i>Plugin<i} 7.0.0. Sebagai solusinya, Anda dapat mendowngrade plugin Android Gradle ke 4.2.x, meskipun hal ini tidak disarankan.

Untuk informasi selengkapnya, lihat KT-43944.

Output lint tidak ada

Tidak ada output teks lint yang dicetak ke stdout jika tugas lint terbaru (masalah #191897708). Untuk konteks selengkapnya, lihat Perubahan perilaku untuk lint. Terbitan 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.