Plugin Android Gradle 4.1.0 (Agustus 2020)

Kompatibilitas

Versi minimum Versi default Catatan
Gradle 6.5 T/A Untuk mempelajari lebih lanjut, lihat mengupdate Gradle.
SDK Build Tools 29.0.2 29.0.2 Instal atau konfigurasi SDK Build Tools.
NDK T/A 21.1.6352462 Instal atau konfigurasi versi lain dari NDK.

<p>This version of the Android plugin requires the following:</p>
<ul>
  <li>
    <p><a href="https://docs.gradle.org/6.5.1/release-notes.html">Gradle 6.5</a>.
    To learn more, read the section about <a href="#updating-gradle">updating
    Gradle</a>.</p>
  </li>
  <li>
    <p><a href="/studio/releases/build-tools.html#notes">SDK Build Tools
    29.0.2</a> or higher.</p>
  </li>
</ul>
<p>The default NDK version in this release is 21.1.6352462. To install a
different NDK version, see <a href="/studio/projects/install-ndk#specific-version">Install a specific version of the NDK</a>.</p>

Fitur baru

Versi plugin Android Gradle ini menyertakan fitur baru berikut.

Dukungan DSL Skrip Kotlin

Demi pengalaman mengedit yang lebih baik untuk pengguna buildscript Kotlin, DSL dan API plugin Android Gradle 4.1 saat ini ditetapkan dalam kumpulan antarmuka Kotlin secara terpisah dari class implementasinya. Ini berarti:

  • Nullability dan mutability kini secara eksplisit dinyatakan pada jenis Kotlin.
  • Dokumentasi yang dihasilkan dari antarmuka tersebut ditayangkan di Referensi Kotlin API.
  • Platform API Plugin Android Gradle sudah dengan jelas ditetapkan, supaya ekstensi build Android tidak mudah error di masa mendatang.

Penting: Jika Anda sudah mengadopsi skrip build KTS atau menggunakan Kotlin di buildSrc, ini dapat menyebabkan kerusakan kompatibilitas sumber untuk error tertentu yang akan berbentuk error pada saat runtime pada rilis sebelumnya.

Jenis koleksi yang didesain untuk dimutasi dalam DSL kini secara serentak ditetapkan sebagai:

val collection: MutableCollectionType

Ini berarti bahwa tidak mungkin lagi menulis hal berikut dalam skrip Kotlin untuk sejumlah koleksi yang sebelumnya didukung:

collection = collectionTypeOf(...)

Namun, mengubah koleksi didukung secara serentak, sehingga collection += … dan collection.add(...) seharusnya kini dapat dijalankan di mana saja.

Jika Anda menemukan masalah saat meng-upgrade project yang menggunakan API dan DSL Kotlin plugin Android Gradle, harap laporkan bug.

Mengekspor dependensi C/C++ dari AAR

Plugin Android Gradle 4.0 menambahkan kemampuan untuk mengimpor paket Prefab dalam dependensi AAR. Di AGP 4.1, mengekspor library dari build native eksternal Anda dalam AAR untuk project Library Android kini dapat dilakukan.

Untuk mengekspor library native, tambahkan hal berikut ke blok android dari file build.gradle project library Anda:

buildFeatures {
    prefabPublishing true
}

prefab { <var>mylibrary</var&;gt { headers "src/main/cpp/<var>mylibrary</var>/include" }

<var>myotherlibrary</var> {
    headers "src/main/cpp/<var>myotherlibrary</var>/include"
}

}

buildFeatures {
    prefabPublishing = true
}

prefab { create("<var>mylibrary</var>") { headers = "src/main/cpp/<var>mylibrary</var>/include" }

create("<var>myotherlibrary</var>") {
    headers = "src/main/cpp/<var>myotherlibrary</var>/include"
}

}

Dalam contoh ini, library mylibrary dan myotherlibrary dari ndk-build atau build native eksternal CMake akan dipaketkan dalam AAR yang dihasilkan oleh build Anda, dan masing-masing akan mengekspor header dari direktori yang ditentukan ke turunannya.

Catatan: Untuk pengguna plugin Android Gradle 4.0 dan yang lebih baru, setelan konfigurasi untuk mengimpor library native bawaan telah diubah. Untuk informasi selengkapnya, lihat catatan rilis 4.0.

Dukungan R8 untuk metadata Kotlin

Kotlin menggunakan metadata kustom pada file class Java guna mengidentifikasi bentuk bahasa Kotlin. R8 kini mendukung pengelolaan dan penulisan ulang metadata Kotlin untuk mendukung secara penuh pengurangan library dan aplikasi Kotlin menggunakan kotlin-reflect.

Untuk menyimpan metadata Kotlin, tambahkan aturan penyimpanan berikut:

-keep class kotlin.Metadata { *; }

-keepattributes RuntimeVisibleAnnotations

Ini akan memerintahkan R8 untuk menyimpan metadata Kotlin untuk semua class yang disimpan secara langsung.

Untuk informasi selengkapnya, lihat artikel Pengurangan library dan aplikasi Kotlin menggunakan refleksi Kotlin dengan R8{:.external} di Medium.

Pernyataan dalam build debug

Jika Anda mem-build versi debug aplikasi menggunakan plugin Android Gradle 4.1.0 dan yang lebih tinggi, compiler bawaan (D8) akan menulis ulang kode aplikasi untuk mengaktifkan pernyataan pada waktu kompilasi, sehingga pemeriksaan pernyataan akan selalu aktif.

Perubahan perilaku

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.

Tugas cleanBuildCache serta properti android.enableBuildCache dan android.buildCacheDir tidak digunakan lagi dan akan dihapus di AGP 7.0. Properti android.enableBuildCache saat ini tidak berpengaruh, sedangkan properti android.buildCacheDir dan tugas cleanBuildCache akan berfungsi hingga AGP 7.0 untuk menghapus konten cache build AGP yang ada.

Pengurangan ukuran aplikasi secara signifikan untuk aplikasi yang menggunakan penyingkatan kode

Dimulai dari rilis ini, kolom dari class R tidak lagi disimpan secara default, sehingga dapat menghemat ukuran APK secara signifikan untuk aplikasi yang mengaktifkan penyingkatan kode. Hal ini seharusnya tidak menyebabkan perubahan perilaku, kecuali jika Anda mengakses class R dengan refleksi. Dalam hal ini, Anda harus menambahkan aturan penyimpanan untuk class R tersebut.

Nama properti android.namespacedRClass diganti menjadi android.nonTransitiveRClass

Nama flag eksperimental android.namespacedRClass telah diganti menjadi android.nonTransitiveRClass.

Ditetapkan dalam file gradle.properties, flag ini memungkinkan namespace untuk setiap class R library sehingga class R hanya menyertakan resource yang dideklarasikan dalam library itu sendiri tanpa resource apa pun dari dependensi library, sehingga mengurangi ukuran class R untuk library tersebut.

Kotlin DSL: Nama coreLibraryDesugaringEnabled diganti

Opsi kompilasi DSL Kotlin coreLibraryDesugaringEnabled telah diubah menjadi isCoreLibraryDesugaringEnabled. Untuk informasi selengkapnya tentang flag ini, lihat Dukungan desugaring API Java 8+ (Plugin Android Gradle 4.0.0+).

Properti versi dihapus dari class BuildConfig pada project library

Khusus untuk project library, properti BuildConfig.VERSION_NAME dan BuildConfig.VERSION_CODE telah dihapus dari class BuildConfig yang dibuat karena nilai statis ini tidak merefleksikan nilai final kode dan nama versi aplikasi, sehingga dapat menimbulkan kekeliruan. Selain itu, nilai-nilai ini dibuang selama penggabungan manifes.

Pada versi plugin Android Gradle yang berikutnya, properti versionName dan versionCode juga akan dihapus dari DSL untuk library. Saat ini, tidak ada cara lain untuk mengakses kode/nama versi aplikasi secara otomatis dari sub-project library.

Untuk modul aplikasi, tidak ada perubahan. Anda masih tetap dapat menetapkan nilai pada versionCode dan versionName di DSL. Nilai-nilai ini akan diisikan ke manifes dan kolom BuildConfig aplikasi.

Menetapkan jalur NDK

Anda dapat menyetel jalur ke penginstalan NDK lokal menggunakan properti android.ndkPath di file build.gradle modul Anda.


android {
  ndkPath "your-custom-ndk-path"
}

android {
  ndkPath = "your-custom-ndk-path"
}

Jika Anda menggunakan properti ini bersama dengan properti android.ndkVersion, jalur ini harus berisi versi NDK yang cocok dengan android.ndkVersion.

Perubahan perilaku pengujian unit library

Kami telah mengubah perilaku cara pengujian unit library dikompilasi dan dijalankan. Pengujian unit library kini dikompilasi dan dijalankan terhadap class kompilasi/runtime dari library itu sendiri, sehingga pengujian unit menggunakan library dengan cara yang sama seperti sub-project eksternal. Konfigurasi ini biasanya menghasilkan pengujian yang lebih baik.

Dalam sejumlah kasus, pengujian unit library yang menggunakan data binding bisa saja mengalami kehilangan class DataBindingComponent atau BR. Pengujian ini harus ditransfer ke uji instrumentasi pada project androidTest, karena proses mengompilasi dan menjalankan pengujian yang berlawanan dengan class ini pada pengujian unit dapat menyebabkan hasil yang keliru.

Plugin Gradle io.fabric tidak digunakan lagi

Plugin Gradle io.fabric tidak digunakan lagi dan tidak kompatibel dengan versi 4.1 plugin Android Gradle. Untuk informasi selengkapnya tentang penghentian penggunaan Fabric SDK dan bermigrasi ke Firebase Crashlytics SDK, lihat Meng-upgrade ke Firebase Crashlytics SDK.