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.