Sistem build Android Studio didasarkan pada Gradle. Plugin Android Gradle menambahkan beberapa fitur yang dikhususkan untuk mem-build aplikasi Android. Meskipun plugin Android biasanya diupdate secara bersamaan dengan Android Studio, plugin ini (dan seluruh sistem Gradle) dapat berjalan secara independen dari Android Studio dan dapat diupdate secara terpisah.
Halaman ini menjelaskan cara menjaga alat Gradle Anda agar selalu update dan apa saja yang ada pada update terbarunya.
Untuk perubahan yang dapat menyebabkan gangguan pada plugin Android Gradle, lihat roadmap plugin Android Gradle.
Untuk mengetahui detail cara mengonfigurasi build Android dengan Gradle, lihat halaman berikut:
Untuk informasi sistem build Gradle selengkapnya, lihat Panduan pengguna Gradle.
Mengupdate plugin Android Gradle
Saat mengupdate Android Studio, Anda mungkin menerima permintaan untuk otomatis mengupdate plugin Android Gradle ke versi terbaru yang tersedia. Anda dapat memilih untuk menerima update atau menentukan versi secara manual berdasarkan persyaratan build project.
Anda dapat menentukan versi plugin di
menu File > Project
Structure > Project di Android Studio, atau
dalam file build.gradle
level teratas. Versi plugin berlaku untuk
semua modul yang dibuat di project Android Studio tersebut. Contoh berikut menetapkan
plugin ke versi 4.2.0 dari
file build.gradle
:
Groovy
buildscript { repositories { // Gradle 4.1 and higher include support for Google's Maven repo using // the google() method. And you need to include this repo to download // Android Gradle plugin 3.0.0 or higher. google() ... } dependencies { classpath 'com.android.tools.build:gradle:4.2.0' } }
Kotlin
buildscript { repositories { // Gradle 4.1 and higher include support for Google's Maven repo using // the google() method. And you need to include this repo to download // Android Gradle plugin 3.0.0 or higher. google() ... } dependencies { classpath("com.android.tools.build:gradle:4.2.0") } }
Perhatian: Anda tidak boleh menggunakan dependensi dinamis dalam nomor
versi, misalnya 'com.android.tools.build:gradle:2.+'
. Penggunaan
fitur ini dapat menyebabkan update versi yang tidak terduga dan kesulitan untuk mengatasi
perbedaan versi.
Jika versi plugin yang ditentukan belum didownload, Gradle akan mendownloadnya pada project yang Anda build selanjutnya, atau klik File > Sync Project with Gradle Files dari panel menu Android Studio.
Mengupdate Gradle
Saat mengupdate Android Studio, Anda mungkin menerima permintaan untuk mengupdate juga Gradle ke versi terbaru yang tersedia. Anda dapat memilih untuk menerima update atau menentukan versi secara manual berdasarkan persyaratan build project.
Tabel berikut mencantumkan versi Gradle yang diperlukan untuk setiap versi plugin Android Gradle. Agar performanya optimal, Anda harus menggunakan Gradle dan plugin versi terbaru.
Versi plugin | Versi Gradle yang diperlukan |
---|---|
1.0.0 - 1.1.3 | 2.2.1 - 2.3 |
1.2.0 - 1.3.1 | 2.2.1 - 2.9 |
1.5.0 | 2.2.1 - 2.13 |
2.0.0 - 2.1.2 | 2.10 - 2.13 |
2.1.3 - 2.2.3 | 2.14.1 - 3.5 |
2.3.0+ | 3.3+ |
3.0.0+ | 4.1+ |
3.1.0+ | 4.4+ |
3.2.0 - 3.2.1 | 4.6+ |
3.3.0 - 3.3.3 | 4.10.1+ |
3.4.0 - 3.4.3 | 5.1.1+ |
3.5.0 - 3.5.4 | 5.4.1+ |
3.6.0 - 3.6.4 | 5.6.4+ |
4.0.0+ | 6.1.1+ |
4.1.0+ | 6.5+ |
4.2.0+ | 6.7.1+ |
7.0 | 7.0+ |
Anda dapat menentukan versi Gradle di menu File >
Project Structure > Project di
Android Studio, atau dengan mengedit referensi distribusi Gradle dalam file
gradle/wrapper/gradle-wrapper.properties
. Contoh berikut
menetapkan versi Gradle ke 6.7.1 dalam file
gradle-wrapper.properties
.
...
distributionUrl = "https\://services.gradle.org/distributions/gradle-6.7.1-all.zip"
...
Perubahan pembuatan versi (November 2020)
Kami memperbarui penomoran versi untuk plugin Android Gradle (AGP) agar lebih cocok dengan alat build Gradle yang mendasarinya.
Berikut adalah perubahan penting:
AGP sekarang akan menggunakan pembuatan versi semantik, dan perubahan yang dapat menyebabkan gangguan akan ditargetkan untuk rilis utama.
Satu versi utama AGP akan dirilis per tahun, sejalan dengan rilis utama Gradle.
Rilis setelah AGP 4.2 adalah versi 7.0 dan akan memerlukan upgrade ke Gradle versi 7.x. Setiap rilis utama AGP akan memerlukan upgrade versi utama di alat Gradle yang mendasarinya.
API tidak akan digunakan lagi sekitar satu tahun sebelumnya, dengan fungsi penggantian yang tersedia secara bersamaan. API yang tidak digunakan lagi akan dihapus sekitar satu tahun kemudian selama update utama berikutnya.
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 versi 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.
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 fungsionalitas baru dan menambahkan 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 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, 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 akan diperiksa kecuali jika dependensi tersebut juga berupa dependensi aplikasi (masalah #191977888).
Menjalankan lint hanya pada varian default
Menjalankan ./gradlew :app:lint
sekarang 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:
Library yang menargetkan JVM dan class yang tidak ada adalah jenis library JVM (seperti dalam contoh di atas).
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, memungkinkan Anda untuk 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:
Groovy
// build.gradle android { compileSdkVersion 30 compileOptions { sourceCompatibility JavaVersion.VERSION_11 targetCompatibility JavaVersion.VERSION_11 } // For Kotlin projects kotlinOptions { jvmTarget = "11" } }
Kotlin
// 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 telah diganti denganapi
atauimplementation
.
Juga berlaku untuk varian *Compile, misalnya:debugCompile
.provided
Ini telah diganti dengancompileOnly
.
Juga berlaku pada varian *Provided, misalnya:releaseProvided
.apk
Ini telah diganti denganruntimeOnly
.publish
Ini telah diganti denganruntimeOnly
.
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.
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 versi 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 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.
4.2.0 (Maret 2021)
Kompatibilitas
Versi minimum | Versi default | Catatan | |
---|---|---|---|
Gradle | 6.7.1 | T/A | 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. |
Fitur baru
Versi plugin Android Gradle ini menyertakan fitur baru berikut.
Bahasa Java versi 8 secara default
Mulai versi 4.2, AGP akan menggunakan level bahasa Java 8 secara default. Java 8 menyediakan akses ke sejumlah fitur bahasa baru, termasuk ekspresi lambda, referensi metode, dan metode antarmuka statis. Untuk mengetahui daftar lengkap yang didukung, baca dokumentasi Java 8.
Untuk mempertahankan perilaku lama, tentukan Java 7 secara eksplisit dalam file
build.gradle.kts
atau build.gradle
tingkat modul:
Groovy
// build.gradle android { ... compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } // For Kotlin projects, compile to Java 6 instead of 7 kotlinOptions { jvmTarget = "1.6" } }
Kotlin
// build.gradle.kts android { ... compileOptions { sourceCompatibility = JavaVersion.VERSION_1_7 targetCompatibility = JavaVersion.VERSION_1_7 } // For Kotlin projects, compile to Java 6 instead of 7 kotlinOptions { jvmTarget = "1.6" } }
Compiler resource JVM baru
Compiler resource JVM baru di alat plugin Android Gradle 4.2 menggantikan bagian compiler resource AAPT2, yang berpotensi meningkatkan performa build, terutama di komputer Windows. Compiler resource JVM baru diaktifkan secara default.
Penandatanganan v3 dan v4 kini didukung
Plugin Android Gradle 4.2 kini mendukung format penandatanganan APK v3
dan APK v4.
Untuk mengaktifkan salah satu atau kedua format ini di
build, tambahkan properti berikut ke file build.gradle
atau build.gradle.kts
tingkat modul Anda:
Groovy
// build.gradle android { ... signingConfigs { config { ... enableV3Signing true enableV4Signing true } } }
Kotlin
// build.gradle.kts android { ... signingConfigs { config { ... enableV3Signing = true enableV4Signing = true } } }
Penandatanganan APK v4 memungkinkan Anda men-deploy APK besar dengan cepat menggunakan penginstalan APK Inkremental ADB di Android 11. Flag baru ini menangani langkah penandatanganan APK dalam proses deployment.
Mengonfigurasi penandatanganan aplikasi per varian
Sekarang Anda dapat mengaktifkan atau menonaktifkan penandatanganan aplikasi di plugin Android Gradle per varian.
Contoh ini menunjukkan cara menetapkan penandatanganan aplikasi per varian menggunakan metode
onVariants()
di Kotlin atau Groovy:
androidComponents {
onVariants(selector().withName("fooDebug"), {
signingConfig.enableV1Signing.set(false)
signingConfig.enableV2Signing.set(true)
})
Properti Gradle baru: android.native.buildOutput
Untuk mengurangi ketidakjelasan pada output build, AGP 4.2 memfilter pesan
dari build native yang menggunakan CMake dan ndk-build
,
yang hanya menampilkan output compiler C/C++ secara default. Sebelumnya, satu baris output
dihasilkan untuk setiap file yang dibuat, sehingga menghasilkan pesan informasi dalam jumlah besar.
Jika Anda ingin melihat keseluruhan output native, setel properti Gradle
baru android.native.buildOutput
ke verbose
.
Anda dapat menetapkan properti ini dalam file gradle.properties
atau melalui command line.
gradle.properties
android.native.buildOutput=verbose
Command line
-Pandroid.native.buildOutput=verbose
Nilai default properti ini adalah quiet
.
Perubahan perilaku untuk file gradle.properties
Mulai dari AGP 4.2, properti Gradle tidak lagi dapat diganti
dari subproject. Dengan kata lain, jika Anda mendeklarasikan properti dalam
file gradle.properties
dalam subproject, dan bukan project root, properti tersebut
akan diabaikan.
Sebagai contoh, pada rilis sebelumnya, AGP akan membaca nilai dari
projectDir/gradle.properties
,
projectDir/app/gradle.properties
,
projectDir/library/gradle.properties
, dsb. Untuk modul
aplikasi, jika properti Gradle yang sama ada di
projectDir/gradle.properties
dan
projectDir/app/gradle.properties
, nilai dari
projectDir/app/gradle.properties
akan diutamakan.
Di AGP 4.2, perilaku ini telah diubah, dan AGP tidak akan memuat nilai dari
gradle.properties
dalam subproject (mis.,
projectDir/app/gradle.properties
). Perubahan ini
mencerminkan perilaku Gradle baru dan mendukung cache konfigurasi.
Untuk informasi selengkapnya tentang menyetel nilai dalam file gradle.properties
, lihat Dokumen Gradle.
Perubahan kompatibilitas dan konfigurasi Gradle
Saat dijalankan di Android Studio, alat build Gradle menggunakan JDK yang dipaketkan bersama Studio. Pada rilis sebelumnya, JDK 8 dipaketkan dengan Studio. Namun, dalam 4.2, JDK 11 kini dipaketkan sebagai gantinya. Saat digunakan untuk menjalankan Gradle, JDK baru yang dipaketkan ini dapat mengakibatkan inkompatibilitas tertentu atau memengaruhi performa JVM karena adanya perubahan pada pembersih sampah memori. Masalah ini dijelaskan di bawah ini.
Catatan: Meskipun kami merekomendasikan untuk menjalankan Gradle dengan JDK 11, Anda dapat mengubah JDK yang digunakan untuk menjalankan Gradle dalam dialog Struktur Project. Mengubah setelan ini hanya akan mengubah JDK yang digunakan untuk menjalankan Gradle, dan tidak akan mengubah JDK yang digunakan untuk menjalankan Studio itu sendiri.
Kompatibilitas Studio dengan plugin Android Gradle (AGP)
Android Studio 4.2 dapat membuka project yang menggunakan AGP 3.1 dan yang lebih baru asalkan AGP menjalankan Gradle 4.8.1 dan yang lebih baru. Untuk informasi selengkapnya tentang kompatibilitas Gradle, lihat Mengupdate Gradle.
Mengoptimalkan build Gradle untuk JDK 11
Update untuk JDK 11 ini memengaruhi konfigurasi default pembersih sampah memori JVM karena JDK 8 menggunakan pembersih sampah memori paralel, sementara JDK 11 menggunakan pembersih sampah G1.
Untuk meningkatkan performa build, sebaiknya
uji build Gradle Anda dengan pembersih sampah
memori paralel. Di gradle.properties
tetapkan hal berikut:
org.gradle.jvmargs=-XX:+UseParallelGC
Jika ada opsi lain yang telah ditetapkan di kolom ini, tambahkan opsi baru:
org.gradle.jvmargs=-Xmx1536m -XX:+UseParallelGC
Untuk mengukur kecepatan build dengan konfigurasi yang berbeda, lihat Membuat profil build Anda.
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. |
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.
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:
Groovy
buildFeatures { prefabPublishing true } prefab { mylibrary { headers "src/main/cpp/mylibrary/include" } myotherlibrary { headers "src/main/cpp/myotherlibrary/include" } }
Kotlin
buildFeatures { prefabPublishing = true } prefab { create("mylibrary") { headers = "src/main/cpp/mylibrary/include" } create("myotherlibrary") { headers = "src/main/cpp/myotherlibrary/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.
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 di Medium.
Pernyataan dalam build debug
Bila 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
.
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.
Groovy
android { ndkPath "your-custom-ndk-path" }
Kotlin
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 tidak digunakannya lagi Fabric SDK dan bermigrasi ke Firebase Crashlytics SDK, lihat Meng-upgrade ke Firebase Crashlytics SDK.
4.0.0 (April 2020)
Versi plugin Android ini perlu beberapa hal berikut:
Gradle 6.1.1. Untuk mempelajari lebih lanjut, baca bagian tentang mengupdate Gradle.
SDK Build Tools 29.0.2 atau yang lebih baru.
Update minor ini mendukung kompatibilitas dengan setelan default yang baru dan fitur untuk visibilitas paket di Android 11.
Pada versi Android sebelumnya, daftar semua aplikasi
yang diinstal pada perangkat dapat dilihat. Mulai Android 11 (API level 30), secara
default aplikasi memiliki akses hanya ke daftar paket yang diinstal yang sudah difilter.
Untuk melihat daftar aplikasi yang lebih luas pada sistem, kini Anda harus
menambahkan
elemen <queries>
dalam manifes Android aplikasi atau
library.
Plugin Android Gradle 4.1+ sudah kompatibel dengan deklarasi
<queries>
yang baru; namun, versi yang lebih lama tidak
kompatibel. Jika Anda menambahkan elemen <queries>
atau jika Anda
mulai mengandalkan library atau SDK yang mendukung penargetan Android 11, Anda
mungkin mengalami penggabungan manifes yang error saat membuat aplikasi.
Untuk mengatasi masalah ini, kami merilis serangkaian patch untuk AGP 3.3 dan yang lebih baru. Jika Anda menggunakan versi AGP yang lebih lama, upgrade ke salah satu versi berikut:
Jika Anda menggunakan versi AGP... |
...upgrade ke: |
---|---|
4.0.* | 4.0.1 |
3.6.* | 3.6.4 |
3.5.* | 3.5.4 |
3.4.* | 3.4.3 |
3.3.* | 3.3.3 |
Untuk informasi selengkapnya tentang fitur baru ini, lihat Visibilitas paket di Android 11.
Fitur baru
Versi plugin Android Gradle ini menyertakan fitur baru berikut.
Dukungan untuk Build Analyzer Android Studio
Jendela Build Analyzer membantu Anda memahami dan mendiagnosis masalah pada
proses build, misalnya pengoptimalan yang dinonaktifkan dan tugas yang tidak dikonfigurasi dengan benar.
Fitur ini tersedia saat Anda menggunakan Android Studio 4.0 dan yang lebih tinggi dengan
plugin Android Gradle 4.0.0
dan yang lebih tinggi. Anda dapat membuka jendela Build Analyzer
dari Android Studio dengan cara berikut:
- Jika belum melakukannya, build aplikasi dengan memilih Build > Make Project dari panel menu.
- Pilih View > Tool Windows > Build dari panel menu.
- Pada jendela Build, buka jendela Build Analyzer dengan salah satu
cara berikut:
- Setelah Android Studio selesai mem-build project Anda, klik tab Build Analyzer.
- Setelah Android Studio selesai mem-build project Anda, klik link di sebelah kanan jendela Build Output.
Jendela Build Analyzer mengatur masalah build yang mungkin muncul di hierarki di sebelah kiri. Anda dapat memeriksa dan mengklik setiap masalah untuk mengetahui detailnya di panel sebelah kanan. Saat menganalisis build Anda, Android Studio menghitung kumpulan tugas yang menentukan durasi build dan memberikan visualisasi untuk membantu Anda memahami dampak dari setiap tugas tersebut. Anda juga bisa mendapatkan detail tentang peringatan dengan meluaskan node Warnings.
Untuk mempelajari lebih lanjut, baca mengidentifikasi regresi kecepatan build.
Desugaring library Java 8 dalam D8 dan R8
Plugin Android Gradle kini menyertakan dukungan untuk menggunakan sejumlah API bahasa Java 8 tanpa memerlukan API level minimum untuk aplikasi Anda.
Melalui proses yang disebut desugaring, compiler DEX, D8, di Android Studio
3.0 dan yang lebih tinggi telah memberikan dukungan besar untuk fitur bahasa Java 8
(seperti ekspresi lambda, metode antarmuka default, coba dengan resource, dan
banyak lagi). Di Android Studio 4.0, mesin desugaring telah diperluas untuk dapat melakukan
desugaring API bahasa Java. Artinya, Anda kini dapat menyertakan API bahasa standar
yang hanya tersedia di rilis Android terbaru (seperti
java.util.streams
) di aplikasi yang mendukung versi Android yang lebih lama.
Kumpulan API berikut ini didukung dalam rilis ini:
- Aliran berurutan (
java.util.stream
) - Subset
java.time
java.util.function
- Penambahan terbaru pada
java.util.{Map,Collection,Comparator}
- Opsional (
java.util.Optional
,java.util.OptionalInt
, danjava.util.OptionalDouble
) serta beberapa class baru lainnya yang berguna dengan API di atas - Beberapa tambahan pada
java.util.concurrent.atomic
(metode baru padaAtomicInteger
,AtomicLong
, danAtomicReference
) ConcurrentHashMap
(dengan perbaikan bug untuk Android 5.0)
Untuk mendukung API bahasa ini, D8 mengompilasi file DEX terpisah yang berisi implementasi API yang tidak ada dan menyertakannya di aplikasi Anda. Proses desugaring akan menulis ulang kode aplikasi untuk menggunakan library ini pada runtime.
Guna mengaktifkan dukungan untuk API bahasa ini, sertakan hal berikut dalam
file build.gradle
modul aplikasi Anda:
Groovy
android { defaultConfig { // Required when setting minSdkVersion to 20 or lower multiDexEnabled true } compileOptions { // Flag to enable support for the new language APIs coreLibraryDesugaringEnabled true // Sets Java compatibility to Java 8 sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } dependencies { coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.4' }
Kotlin
android { defaultConfig { // Required when setting minSdkVersion to 20 or lower multiDexEnabled = true } compileOptions { // Flag to enable support for the new language APIs isCoreLibraryDesugaringEnabled = true // Sets Java compatibility to Java 8 sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } } dependencies { coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.0.4") }
Perhatikan bahwa Anda mungkin juga perlu menyertakan cuplikan kode di atas dalam file build.gradle
modul library jika:
Uji instrumentasi modul library menggunakan API bahasa ini (baik secara langsung, melalui modul library, maupun dependensinya). Hal ini dilakukan agar API yang tidak ada disediakan untuk APK uji instrumentasi Anda.
Anda ingin menjalankan lint di modul library secara terpisah. Hal ini untuk membantu lint mengenali penggunaan valid dari API bahasa dan menghindari pelaporan peringatan palsu.
Opsi baru untuk mengaktifkan atau menonaktifkan fitur build
Plugin Android Gradle 4.0.0 memperkenalkan cara baru untuk mengontrol fitur build mana
yang ingin Anda aktifkan dan nonaktifkan, misalnya View Binding dan Data Binding. Jika fitur baru ditambahkan, fitur tersebut akan dinonaktifkan secara default. Nantinya Anda dapat
menggunakan blok buildFeatures
untuk mengaktifkan fitur yang diinginkan saja, dan ini
membantu Anda mengoptimalkan performa build untuk project Anda. Anda dapat menetapkan opsi untuk setiap modul dalam file build.gradle
level modul, seperti berikut:
Groovy
android { // The default value for each feature is shown below. You can change the value to // override the default behavior. buildFeatures { // Determines whether to generate a BuildConfig class. buildConfig = true // Determines whether to support View Binding. // Note that the viewBinding.enabled property is now deprecated. viewBinding = false // Determines whether to support Data Binding. // Note that the dataBinding.enabled property is now deprecated. dataBinding = false // Determines whether to generate binder classes for your AIDL files. aidl = true // Determines whether to support RenderScript. renderScript = true // Determines whether to support injecting custom variables into the module’s R class. resValues = true // Determines whether to support shader AOT compilation. shaders = true } }
Kotlin
android { // The default value for each feature is shown below. You can change the value to // override the default behavior. buildFeatures { // Determines whether to generate a BuildConfig class. buildConfig = true // Determines whether to support View Binding. // Note that the viewBinding.enabled property is now deprecated. viewBinding = false // Determines whether to support Data Binding. // Note that the dataBinding.enabled property is now deprecated. dataBinding = false // Determines whether to generate binder classes for your AIDL files. aidl = true // Determines whether to support RenderScript. renderScript = true // Determines whether to support injecting custom variables into the module’s R class. resValues = true // Determines whether to support shader AOT compilation. shaders = true } }
Anda juga dapat menentukan setelan default untuk fitur ini di seluruh modul
dalam sebuah project dengan menyertakan satu atau beberapa dari yang berikut di file
gradle.properties
project, seperti yang ditampilkan di bawah ini. Perlu diingat bahwa Anda masih dapat menggunakan
blok buildFeatures
di file build.gradle
level modul untuk mengganti
setelan default tingkat project ini.
android.defaults.buildfeatures.buildconfig=true
android.defaults.buildfeatures.aidl=true
android.defaults.buildfeatures.renderscript=true
android.defaults.buildfeatures.resvalues=true
android.defaults.buildfeatures.shaders=true
Dependensi fitur pada fitur
Pada plugin Android Gradle versi sebelumnya, semua modul fitur hanya dapat bergantung pada modul dasar aplikasi. Jika menggunakan plugin Android Gradle
4.0.0, kini Anda dapat menyertakan modul fitur yang bergantung pada modul fitur
lainnya. Yaitu, fitur :video
dapat bergantung pada fitur :camera
, yang
bergantung pada modul dasar, seperti yang ditunjukkan pada gambar di bawah.
Modul fitur :video
bergantung pada fitur
:camera
, yang bergantung pada modul :app
dasar.
Artinya, saat aplikasi Anda meminta untuk mendownload modul fitur, aplikasi
juga mendownload modul fitur lain yang menjadi tempatnya bergantung. Setelah membuat
modul fitur
untuk aplikasi, Anda dapat mendeklarasikan dependensi fitur pada fitur dalam file
build.gradle
modul. Misalnya, modul :video
mendeklarasikan dependensi pada
:camera
seperti berikut:
Groovy
// In the build.gradle file of the ':video' module. dependencies { // All feature modules must declare a dependency // on the base module. implementation project(':app') // Declares that this module also depends on the 'camera' // feature module. implementation project(':camera') ... }
Kotlin
// In the build.gradle file of the ':video' module. dependencies { // All feature modules must declare a dependency // on the base module. implementation(project(":app")) // Declares that this module also depends on the 'camera' // feature module. implementation(project(":camera")) ... }
Selain itu, Anda harus mengaktifkan fitur dependensi fitur pada fitur di Android Studio (misalnya, untuk mendukung fitur saat mengedit konfigurasi Run) dengan mengklik Help > Edit Custom VM Options dari panel menu dan menyertakan hal berikut:
-Drundebug.feature.on.feature=true
Metadata dependensi
Saat mem-build aplikasi menggunakan plugin Android Gradle 4.0.0 dan yang lebih tinggi, plugin akan menyertakan metadata yang menjelaskan dependensi yang dikompilasi ke dalam aplikasi Anda. Saat mengupload aplikasi, Konsol Play akan memeriksa metadata ini untuk memberikan manfaat berikut kepada Anda:
- Mendapatkan pemberitahuan untuk masalah umum terkait SDK dan dependensi yang digunakan aplikasi Anda
- Menerima masukan yang dapat ditindaklanjuti untuk menyelesaikan masalah tersebut
Data dikompresi, dienkripsi oleh kunci penandatanganan Google Play, dan disimpan di
blok penandatanganan aplikasi rilis Anda. Namun, Anda sendiri dapat memeriksa metadata
dalam file build perantara lokal di direktori berikut:
<project>/<module>/build/outputs/sdk-dependencies/release/sdkDependency.txt
.
Jika tidak ingin membagikan informasi ini, Anda dapat memilih tidak ikut dengan menyertakan
hal berikut ini dalam file build.gradle
modul Anda:
Groovy
android { dependenciesInfo { // Disables dependency metadata when building APKs. includeInApk = false // Disables dependency metadata when building Android App Bundles. includeInBundle = false } }
Kotlin
android { dependenciesInfo { // Disables dependency metadata when building APKs. includeInApk = false // Disables dependency metadata when building Android App Bundles. includeInBundle = false } }
Mengimpor library native dari dependensi AAR
Anda kini dapat mengimpor library C/C++ dari dependensi AAR aplikasi Anda. Setelah Anda mengikuti langkah-langkah konfigurasi yang dijelaskan di bawah, Gradle otomatis membuat library native ini tersedia untuk digunakan dengan sistem build native eksternal Anda, seperti CMake. Ingat bahwa Gradle hanya membuat library ini tersedia untuk build Anda; Anda tetap harus mengonfigurasi skrip build untuk menggunakannya.
Library diekspor menggunakan format paket Prefab.
Setiap dependensi dapat menampilkan maksimal satu paket Prefab, yang terdiri dari satu atau beberapa modul. Modul Prefab adalah library tunggal, yang dapat berupa library bersama, statis, atau hanya header.
Biasanya, nama paket cocok dengan nama artefak Maven dan nama modul cocok dengan nama library, tetapi ini tidak selalu benar. Karena Anda perlu mengetahui nama paket dan modul library, Anda mungkin perlu membaca dokumentasi dependensi untuk menentukan nama-nama tersebut.
Mengonfigurasi sistem build native eksternal
Untuk mengetahui langkah-langkah yang harus Anda ikuti, klik sistem build native eksternal yang akan digunakan.
Dependensi native yang disertakan dalam AAR ditampilkan ke project CMake Anda melalui variabel CMAKE_FIND_ROOT_PATH. Nilai ini akan disetel otomatis oleh Gradle saat CMake dipanggil, jadi jika sistem build Anda memodifikasi variabel ini, pastikan untuk menambahkan , bukan menetapkannya.
Setiap dependensi mengekspos paket file konfigurasi ke build CMake, yang Anda
impor dengan perintah find_package
. Perintah ini menelusuri beberapa paket file konfigurasi yang cocok dengan nama paket dan versi tertentu serta mengekspos target yang ditetapkannya untuk digunakan dalam build Anda. Misalnya, jika aplikasi Anda menentukan
libapp.so
dan menggunakan curl, Anda harus menyertakan yang berikut ini dalam file
CMakeLists.txt
Anda:
add_library(app SHARED app.cpp)
# Add these two lines.
find_package(curl REQUIRED CONFIG)
target_link_libraries(app curl::curl)
Anda kini dapat menentukan #include "curl/curl.h"
di app.cpp
. Setelah Anda mem-build
project, sistem build native eksternal akan otomatis menautkan libapp.so
ke libcurl.so
dan memaketkan libcurl.so
di APK atau app bundle. Untuk
informasi tambahan, lihat contoh prefab curl.
Perubahan perilaku
Saat menggunakan plugin versi ini, Anda mungkin mendapati perubahan perilaku berikut.
Pembaruan konfigurasi penandatanganan v1/v2
Perilaku untuk konfigurasi penandatanganan aplikasi dalam blok signingConfig
telah
berubah menjadi:
Penandatanganan v1
- Jika
v1SigningEnabled
diaktifkan secara eksplisit, AGP akan melakukan penandatanganan aplikasi v1. - Jika
v1SigningEnabled
dinonaktifkan secara eksplisit oleh pengguna, penandatanganan aplikasi v1 tidak akan dilakukan. - Jika tidak diaktifkan pengguna secara eksplisit, penandatanganan v1 dapat dinonaktifkan
secara otomatis berdasarkan
minSdk
dantargetSdk
.
Penandatanganan v2
- Jika
v2SigningEnabled
diaktifkan secara eksplisit, AGP akan melakukan penandatanganan aplikasi v2. - Jika
v2SigningEnabled
dinonaktifkan secara eksplisit oleh pengguna, penandatanganan aplikasi v2 tidak akan dilakukan. - Jika tidak diaktifkan pengguna secara eksplisit, penandatanganan v2 dapat dinonaktifkan
secara otomatis berdasarkan
targetSdk
.
Perubahan ini memungkinkan AGP mengoptimalkan build dengan menonaktifkan mekanisme penandatanganan berdasarkan apakah pengguna telah mengaktifkan flag ini secara eksplisit. Sebelum rilis
ini, v1Signing
dapat dinonaktifkan meskipun diaktifkan
secara eksplisit, sehingga dapat membingungkan.
Plugin Android Gradle feature
dan instantapp
dihapus
Plugin Android Gradle 3.6.0 tidak menggunakan lagi plugin Feature
(com.android.feature
) serta plugin Instant App (com.android.instantapp
) dan
menggantinya dengan plugin Dynamic Feature (com.android.dynamic-feature
) untuk
mem-build dan memaketkan aplikasi instan Anda menggunakan Android App
Bundle.
Pada plugin Android Gradle 4.0.0 dan yang lebih baru, plugin yang sudah tidak lagi digunakan ini sepenuhnya dihapus. Jadi, untuk menggunakan plugin Android Gradle terbaru, Anda harus memigrasikan aplikasi instan untuk mendukung Android App Bundle. Dengan memigrasikan aplikasi instan, Anda dapat memanfaatkan manfaat app bundle dan menyederhanakan desain modular aplikasi Anda.
Fitur untuk memisahkan pemrosesan anotasi dihapus
Kemampuan untuk memisahkan pemrosesan anotasi menjadi tugas khusus telah
dihapus. Opsi ini digunakan untuk mempertahankan
kompilasi Java inkremental saat pemroses anotasi non-inkremental digunakan
dalam project khusus Java; ini diaktifkan dengan menyetel
android.enableSeparateAnnotationProcessing
ke true
dalam file
gradle.properties
, yang tidak lagi berfungsi.
Sebagai gantinya, Anda harus beralih menggunakan pemroses anotasi inkremental untuk meningkatkan performa build.
includeCompileClasspath tidak digunakan lagi
Plugin Android Gradle tidak lagi memeriksa atau menyertakan pemroses anotasi yang Anda deklarasikan pada classpath kompilasi, dan properti DSL annotationProcessorOptions.includeCompileClasspath
tidak lagi berpengaruh sama sekali. Jika Anda menyertakan pemroses anotasi pada classpath kompilasi, Anda
mungkin akan mengalami error berikut:
Error: Annotation processors must be explicitly declared now.
Untuk menyelesaikan masalah ini, Anda harus menyertakan pemroses anotasi ke file build.gradle
menggunakan konfigurasi dependensi annotationProcessor
.
Untuk mempelajari lebih lanjut, baca Menambahkan pemroses
anotasi.
Paket otomatis dependensi prebuilt yang digunakan oleh CMake
Versi sebelumnya Plugin Android Gradle mengharuskan Anda secara eksplisit memaketkan
library bawaan apa pun yang digunakan oleh build native eksternal CMake Anda menggunakan
jniLibs
. Anda mungkin memiliki library di direktori src/main/jniLibs
modul
Anda, atau mungkin di beberapa direktori yang dikonfigurasi dalam file build.gradle
Anda:
Groovy
sourceSets { main { // The libs directory contains prebuilt libraries that are used by the // app's library defined in CMakeLists.txt via an IMPORTED target. jniLibs.srcDirs = ['libs'] } }
Kotlin
sourceSets { main { // The libs directory contains prebuilt libraries that are used by the // app's library defined in CMakeLists.txt via an IMPORTED target. jniLibs.setSrcDirs(listOf("libs")) } }
Dengan Plugin Android Gradle 4.0, konfigurasi di atas tidak lagi diperlukan dan akan menghasilkan kegagalan build:
* What went wrong:
Execution failed for task ':app:mergeDebugNativeLibs'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
> More than one file was found with OS independent path 'lib/x86/libprebuilt.so'
Versi native eksternal kini secara otomatis memaketkan library
tersebut, sehingga memaketkan library secara eksplisit dengan jniLibs
menghasilkan
duplikat. Untuk menghindari error build, pindahkan library bawaan ke lokasi
di luar jniLibs
atau hapus jniLibs
konfigurasi dari file build.gradle
Anda.
Masalah umum
Bagian ini menjelaskan masalah umum yang ada di plugin Android Gradle 4.0.0.
Kondisi race pada mekanisme pekerja Gradle
Perubahan di plugin Android Gradle 4.0 dapat memicu kondisi race di Gradle
saat menjalankan --no-daemon
dan versi Gradle 6.3 atau yang lebih rendah, menyebabkan
build mengalami hang setelah build diselesaikan.
Masalah ini akan diperbaiki di Gradle 6.4.
3.6.0 (Februari 2020)
Versi plugin Android ini perlu beberapa hal berikut:
Gradle 5.6.4. Untuk mempelajari lebih lanjut, baca bagian tentang mengupdate Gradle.
SDK Build Tools 28.0.3 atau yang lebih baru.
Update minor ini mendukung kompatibilitas dengan setelan default baru dan fitur untuk visibilitas paket di Android 11.
Lihat catatan rilis 4.0.1 untuk detailnya.
Fitur baru
Versi plugin Android Gradle ini menyertakan fitur baru berikut.
View Binding
View binding memberikan keamanan waktu kompilasi saat mereferensikan tampilan dalam kode Anda.
Kini Anda dapat mengganti findViewById()
dengan referensi class binding
yang dibuat secara otomatis. Untuk mulai menggunakan View binding, sertakan baris berikut di setiap file
build.gradle
modul:
Groovy
android { viewBinding.enabled = true }
Kotlin
android { viewBinding.enabled = true }
Untuk mempelajari lebih lanjut, baca dokumentasi View Binding.
Dukungan untuk plugin Maven Publish
Plugin Android Gradle menyertakan dukungan untuk plugin Maven Publish Gradle, yang memungkinkan Anda memublikasikan artefak build ke repositori Apache Maven. Plugin Android Gradle membuat component untuk setiap artefak varian build di aplikasi atau modul library Anda yang dapat Anda gunakan untuk menyesuaikan publication ke repositori Maven.
Untuk mempelajari lebih lanjut, buka halaman tentang cara menggunakan plugin Maven Publish .
Alat pengemasan default baru
Saat mem-build versi debug aplikasi, plugin akan menggunakan alat pengemasan baru
bernama zipflinger untuk mem-build APK. Alat baru ini akan
memberikan peningkatan kecepatan build. Jika alat pengemasan baru tidak berfungsi seperti yang Anda
harapkan, laporkan bug. Anda dapat kembali menggunakan
alat pengemasan versi lama dengan menyertakan baris berikut dalam file gradle.properties
:
android.useNewApkCreator=false
Atribusi build native
Kini Anda dapat mengetahui durasi yang diperlukan Clang untuk membuat dan menautkan setiap file C/C++ dalam project Anda. Gradle dapat menghasilkan rekaman aktivitas Chrome yang berisi stempel waktu untuk peristiwa compiler ini, sehingga Anda bisa lebih mengetahui waktu yang diperlukan untuk membuat project. Untuk menghasilkan file atribusi build ini, lakukan hal berikut:
Tambahkan flag
-Pandroid.enableProfileJson=true
saat menjalankan build Gradle. Contoh:gradlew assembleDebug -Pandroid.enableProfileJson=true
Buka browser Chrome dan ketik
chrome://tracing
di kotak penelusuran.Klik tombol Load dan buka
project-root/build/android-profile
untuk menemukan file. Nama filenya adalahprofile-timestamp.json.gz
.
Anda dapat melihat data atribusi build native di dekat bagian atas layar:
Perubahan perilaku
Saat menggunakan plugin versi ini, Anda mungkin mendapati perubahan perilaku berikut.
Secara default, library native dikemas tanpa dikompresi
Saat Anda mem-build aplikasi, kini plugin akan menyetel extractNativeLibs
ke "false"
secara
default. Artinya, library native Anda akan disejajarkan dengan halaman dan dikemas
tanpa dikompresi. Meskipun hal ini menyebabkan ukuran upload menjadi lebih besar, pengguna
akan mendapatkan manfaat sebagai berikut:
- Ukuran instal aplikasi menjadi lebih kecil karena platform dapat mengakses library native secara langsung dari APK yang terinstal, tanpa membuat salinan library.
- Ukuran download menjadi lebih kecil karena kompresi Play Store biasanya akan lebih efektif jika Anda menyertakan library native yang tidak dikompresi dalam APK atau Android App Bundle.
Jika Anda ingin agar plugin Android Gradle memaketkan library native yang dikompresi, sertakan baris berikut dalam manifes aplikasi:
<application
android:extractNativeLibs="true"
... >
</application>
Versi NDK default
Jika Anda mendownload beberapa versi NDK, kini plugin Android Gradle
akan memilih versi default untuk digunakan dalam proses kompilasi file kode sumber. Sebelumnya,
plugin memilih NDK versi terbaru yang didownload. Gunakan properti
android.ndkVersion
dalam file build.gradle
modul untuk mengganti
versi default yang dipilih oleh plugin.
Pembuatan class R yang disederhanakan
Plugin Android Gradle menyederhanakan classpath kompilasi dengan membuat satu class R saja untuk setiap modul library dalam project Anda, dan berbagi class R tersebut dengan dependensi modul lainnya. Pengoptimalan ini akan mempercepat proses build, tetapi Anda harus memperhatikan hal-hal berikut:
- Karena compiler ini berbagi class R dengan dependensi modul upstream, setiap modul dalam project Anda harus memiliki nama paket yang unik.
- Visibilitas class R suatu library terhadap dependensi project lainnya
ditentukan oleh konfigurasi yang digunakan untuk menyertakan library sebagai dependensi.
Misalnya, jika Library A menyertakan Library B sebagai dependensi 'api', Library
A dan library lain yang bergantung pada Library A akan memiliki akses ke class R
Library B. Namun, library lain mungkin tidak memiliki akses ke class R pada Library B
jika Library A menggunakan konfigurasi dependensi
implementation
. Untuk mempelajari lebih lanjut, baca konfigurasi dependensi.
Menghapus resource yang tidak ditemukan dalam konfigurasi default
Untuk modul Library, jika Anda menyertakan resource untuk bahasa yang tidak
disertakan ke dalam kumpulan resource default—misalnya, jika Anda menyertakan
hello_world
sebagai resource string di /values-es/strings.xml
tetapi tidak
menetapkan resource itu di /values/strings.xml
—plugin Android Gradle tidak akan
menyertakan resource tersebut saat mengompilasi project. Perubahan perilaku ini akan mengurangi pengecualian runtime Resource Not Found
dan meningkatkan kecepatan build.
D8 kini menerima kebijakan retensi CLASS untuk anotasi
Saat mengompilasi aplikasi, kini D8 akan menerima ketika anotasi menerapkan kebijakan retensi CLASS, dan anotasi tersebut tidak lagi tersedia pada runtime. Perilaku ini juga terjadi ketika SDK target aplikasi disetel ke API level 23, yang sebelumnya mengizinkan akses ke anotasi tersebut selama runtime jika aplikasi dikompilasi menggunakan plugin Android Gradle dan D8 versi yang lebih lama.
Perubahan perilaku lainnya
aaptOptions.noCompress
tidak lagi peka huruf besar/kecil pada semua platform (untuk APK dan paket) dan menerima jalur yang menggunakan karakter huruf besar.- Data binding kini bersifat inkremental secara default. Untuk mempelajari lebih lanjut, lihat masalah #110061530.
- Semua pengujian unit, termasuk pengujian unit Roboelectric, kini sepenuhnya dapat disimpan dalam cache. Untuk mempelajari lebih lanjut, lihat masalah #115873047.
Perbaikan bug
Plugin Android Gradle versi ini menyertakan perbaikan bug berikut:
- Pengujian unit Robolectric kini didukung di modul library yang menggunakan data binding. Untuk mempelajari lebih lanjut, lihat masalah #126775542.
- Kini Anda dapat menjalankan tugas
connectedAndroidTest
di beberapa modul saat mode eksekusi paralel Gradle diaktifkan.
Masalah umum
Bagian ini menjelaskan masalah umum yang ada di plugin Android Gradle 3.6.0.
Performa Lambat pada tugas Android Lint
Android Lint memerlukan waktu lebih lama untuk menyelesaikan beberapa project karena adanya regresi dalam infrastruktur parsing-nya, menyebabkan komputasi jenis yang ditentukan untuk lambda berjalan lebih lambat dalam konstruksi kode tertentu.
Masalah ini dilaporkan sebagai bug di IDEA dan akan diperbaiki di Plugin Android Gradle 4.0.
Class Manifes tidak ada
Jika aplikasi Anda menetapkan izin kustom dalam manifesnya, plugin Android Gradle biasanya akan membuat class Manifest.java
yang menyertakan izin kustom sebagai konstanta string. Plugin memaketkan class ini dengan aplikasi Anda,
sehingga Anda dapat lebih mudah merujuk ke izin tersebut saat runtime.
Pembuatan class manifes tidak dapat dilakukan di plugin Android Gradle 3.6.0. Jika Anda
mem-build aplikasi dengan plugin versi ini, dan plugin tersebut mereferensikan class
manifes, Anda mungkin akan melihat pengecualian ClassNotFoundException
. Untuk mengatasi masalah
ini, lakukan salah satu langkah berikut:
- Rujuk izin kustom Anda dengan nama yang sepenuhnya memenuhi syarat. Misalnya,
"com.example.myapp.permission.DEADLY_ACTIVITY"
. Tentukan konstanta Anda sendiri, seperti yang ditunjukkan di bawah:
public final class CustomPermissions { public static final class permission { public static final String DEADLY_ACTIVITY="com.example.myapp.permission.DEADLY_ACTIVITY"; } }
3.5.0 (Agustus 2019)
Plugin Android Gradle 3.5.0, beserta Android Studio 3.5, merupakan rilis utama dan hasil dari Project Marble, yang berfokus meningkatkan kualitas tiga area utama Android Developer Tools: kesehatan sistem, peningkatan kualitas fitur, dan perbaikan bug. Secara khusus, meningkatkan kecepatan build project adalah fokus utama update ini.
Untuk informasi tentang hal ini dan update Project Marble lainnya, baca postingan blog Developer Android atau bagian di bawah.
Versi plugin Android ini perlu beberapa hal berikut:
Gradle 5.4.1. Untuk mempelajari lebih lanjut, baca bagian tentang mengupdate Gradle.
SDK Build Tools 28.0.3 atau yang lebih baru.
Update minor ini mendukung kompatibilitas dengan setelan default baru dan fitur untuk visibilitas paket di Android 11.
Lihat catatan rilis 4.0.1 untuk detailnya.
3.5.3 (Desember 2019)
Update minor ini mendukung Android Studio 3.5.3 dan menyertakan berbagai perbaikan bug dan peningkatan performa.
3.5.2 (November 2019)
Update minor ini mendukung Android Studio 3.5.2 dan menyertakan berbagai perbaikan bug dan peningkatan performa. Untuk melihat daftar perbaikan bug penting, baca postingan terkait di blog Rilis Update.
3.5.1 (Oktober 2019)
Update minor ini mendukung Android Studio 3.5.1 dan menyertakan berbagai perbaikan bug dan peningkatan performa. Untuk melihat daftar perbaikan bug penting, baca postingan terkait di blog Rilis Update.
Pemrosesan anotasi inkremental
Pemroses anotasi Data Binding mendukung
pemrosesan
anotasi inkremental
jika Anda menetapkan android.databinding.incremental=true
dalam file gradle.properties
. Pengoptimalan ini menghasilkan performa build
inkremental yang lebih baik. Untuk daftar lengkap pemroses anotasi
yang dioptimalkan, lihat tabel
pemroses anotasi inkremental.
Selain itu, KAPT 1.3.30 dan yang lebih tinggi juga mendukung pemroses anotasi
inkremental, yang dapat Anda aktifkan dengan memasukkan kapt.incremental.apt=true
ke dalam
file gradle.properties
Anda.
Pengujian unit yang dapat di-cache
Saat Anda mengaktifkan pengujian unit untuk menggunakan resource, aset, dan manifes Android dengan
menetapkan includeAndroidResources
ke true
, plugin Android Gradle akan menghasilkan file konfigurasi pengujian
yang berisi jalur absolut, dan hal ini akan merusak kemampuan untuk merelokasi cache. Sebaiknya Anda menginstruksikan
plugin agar menghasilkan konfigurasi pengujian menggunakan jalur relatif, agar
tugas AndroidUnitTest
dapat sepenuhnya di-cache, dengan menyertakan
baris berikut dalam file gradle.properties
Anda:
android.testConfig.useRelativePath = true
Masalah umum
Saat menggunakan plugin Kotlin Gradle 1.3.31 atau yang lebih lama, Anda mungkin melihat peringatan berikut saat membuat atau menyinkronkan project:
WARNING: API 'variant.getPackageLibrary()' is obsolete and has been replaced with 'variant.getPackageLibraryProvider()'.
Untuk menyelesaikan masalah ini, upgrade plugin ke versi 1.3.40 atau yang lebih baru.
3.4.0 (April 2019)
Versi plugin Android ini perlu beberapa hal berikut:
Gradle 5.1.1 atau yang lebih tinggi. Untuk mempelajari lebih lanjut, baca bagian tentang mengupdate Gradle.
SDK Build Tools 28.0.3 atau yang lebih baru.
Update minor ini mendukung kompatibilitas dengan setelan default baru dan fitur untuk visibilitas paket di Android 11.
Lihat catatan rilis 4.0.1 untuk detailnya.
3.4.2 (Juli 2019)
Update minor ini mendukung Android Studio 3.5.3 dan menyertakan berbagai perbaikan bug dan peningkatan performa. Untuk melihat daftar perbaikan bug penting, baca postingan terkait di blog Rilis Update.
3.4.1 (Mei 2019)
Update minor ini mendukung Android Studio 3.4.1 dan menyertakan berbagai perbaikan bug dan peningkatan performa. Untuk melihat daftar perbaikan bug penting, baca postingan terkait di blog Rilis Update.
Fitur baru
Konfigurasi dependensi pemeriksaan lint baru: Perilaku
lintChecks
telah berubah dan konfigurasi dependensi baru,lintPublish
, diperkenalkan untuk memberi Anda kontrol lebih besar atas pemeriksaan lint mana saja yang dipaketkan dalam library Android Anda.lintChecks
: Ini adalah konfigurasi aktif yang sebaiknya Anda gunakan untuk pemeriksaan lint yang hanya ingin Anda jalankan saat mem-build project secara lokal. Jika sebelumnya Anda menggunakan konfigurasi dependensilintChecks
untuk menyertakan pemeriksaan lint dalam AAR yang dipublikasikan, sebaiknya migrasikan dependensi tersebut untuk menggunakan konfigurasilintPublish
baru yang dijelaskan di bawah ini.lintPublish
: Gunakan konfigurasi baru ini dalam project library untuk pemeriksaan lint yang ingin Anda sertakan dalam AAR yang dipublikasikan, seperti ditunjukkan di bawah ini. Artinya, project yang menggunakan library Anda juga akan menerapkan pemeriksaan lint tersebut.
Contoh kode berikut menggunakan kedua konfigurasi dependensi pada project library Android lokal.
Groovy
dependencies { // Executes lint checks from the ':lint' project at build time. lintChecks project(':lint') // Packages lint checks from the ':lintpublish' in the published AAR. lintPublish project(':lintpublish') }
Kotlin
dependencies { // Executes lint checks from the ':lint' project at build time. lintChecks(project(":lint")) // Packages lint checks from the ':lintpublish' in the published AAR. lintPublish(project(":lintpublish")) }
Secara umum, tugas pengemasan dan penandatanganan akan mengalami peningkatan kecepatan build secara keseluruhan. Jika melihat adanya regresi performa terkait tugas-tugas ini, silakan laporkan bug.
Perubahan perilaku
Peringatan penghentian penggunaan plugin Fitur Android Instant Apps: Jika Anda masih menggunakan plugin
com.android.feature
untuk mem-build aplikasi instan, plugin Android Gradle 3.4.0 akan memunculkan peringatan tentang penghentian penggunaan. Untuk memastikan Anda masih dapat mem-build aplikasi instan pada versi plugin mendatang, migrasikan aplikasi instan Anda agar menggunakan plugin fitur dinamis, yang juga memungkinkan Anda memublikasikan pengalaman aplikasi terinstal dan aplikasi instan dari satu Android App Bundle.R8 diaktifkan secara default: R8 mengintegrasikan desugaring, penyingkatan, obfuscation, pengoptimalan, dan dexing ke dalam satu langkah—sehingga menghasilkan peningkatan performa build yang nyata. R8 diperkenalkan pada plugin Android Gradle 3.3.0 dan kini diaktifkan secara default untuk aplikasi dan project library Android yang menggunakan plugin 3.4.0 dan yang lebih tinggi.
Gambar di bawah ini memberikan ringkasan umum tentang proses kompilasi sebelum R8 diperkenalkan.
Sekarang, dengan R8, desugaring, penyingkatan, obfuscation, pengoptimalan, dan dexing (D8) dapat diselesaikan dalam satu langkah, seperti yang diilustrasikan di bawah ini.
Perlu diperhatikan bahwa R8 dirancang agar kompatibel dengan aturan ProGuard yang telah ada, sehingga Anda mungkin tidak perlu mengambil tindakan apa pun untuk mendapatkan manfaat dari R8. Namun, karena teknologinya berbeda dengan ProGuard yang secara khusus dirancang untuk project Android, penyingkatan, dan pengoptimalan dapat menyebabkan penghapusan kode yang mungkin tidak dilakukan ProGuard. Jadi, dalam situasi yang jarang terjadi ini, Anda mungkin perlu menambahkan aturan lain untuk menjaga kode tersebut pada output build Anda.
Jika mengalami masalah saat menggunakan R8, baca FAQ kompatibilitas R8 untuk memeriksa apakah ada solusi untuk masalah Anda. Jika solusi tidak terdokumentasi, silakan laporkan bug. Anda dapat menonaktifkan R8 dengan menambahkan salah satu baris berikut ke file
gradle.properties
project:# Disables R8 for Android Library modules only. android.enableR8.libraries = false # Disables R8 for all modules. android.enableR8 = false
ndkCompile
tidak digunakan lagi: Sekarang Anda akan melihat error build jika mencoba menggunakanndkBuild
untuk mengompilasi library native. Sebagai gantinya, gunakan CMake atau ndk-build untuk Menambahkan kode C dan C++ ke project Anda.
Masalah umum
Penggunaan nama paket yang unik secara benar saat ini tidak diberlakukan, tetapi akan diperketat pada versi plugin selanjutnya. Pada plugin Android Gradle versi 3.4.0, Anda dapat memilih ikut serta untuk memeriksa apakah project Anda mendeklarasikan nama paket yang dapat diterima dengan menambahkan baris di bawah ini ke file
gradle.properties
.android.uniquePackageNames = true
Untuk mempelajari lebih lanjut cara menetapkan nama paket melalui plugin Android Gradle, lihat Menetapkan ID aplikasi.
3.3.0 (Januari 2019)
Versi plugin Android ini perlu beberapa hal berikut:
Gradle 4.10.1 atau yang lebih tinggi. Untuk mempelajari lebih lanjut, baca bagian tentang mengupdate Gradle.
SDK Build Tools 28.0.3 atau yang lebih baru.
Update minor ini mendukung kompatibilitas dengan setelan default baru dan fitur untuk visibilitas paket di Android 11.
Lihat catatan rilis 4.0.1 untuk detailnya.
3.3.2 (Maret 2019)
Update minor ini mendukung Android Studio 3.3.2 dan menyertakan berbagai perbaikan bug dan peningkatan performa. Untuk melihat daftar perbaikan bug penting, baca postingan terkait di blog Rilis Update.
3.3.1 (Februari 2019)
Update minor ini mendukung Android Studio 3.3.1 dan menyertakan berbagai perbaikan bug dan peningkatan performa.
Fitur baru
Sinkronisasi classpath yang lebih baik: Saat menyelesaikan dependensi pada runtime dan mengompilasi waktu classpath, plugin Android Gradle mencoba memperbaiki konflik versi downstream tertentu untuk dependensi yang muncul di beberapa classpath.
Misalnya, jika classpath runtime menyertakan Library A versi 2.0 dan classpath kompilasi menyertakan Library A versi 1.0, maka plugin akan otomatis mengupdate dependensi pada classpath kompilasi ke Library A versi 2.0 untuk menghindari error.
Namun, jika classpath runtime menyertakan Library A versi 1.0 dan classpath kompilasi menyertakan Library A versi 2.0, plugin tidak akan mendowngrade dependensi pada classpath kompilasi ke Library A versi 1.0, dan Anda akan mengalami error. Untuk mempelajari lebih lanjut, lihat Memperbaiki konflik antara classpath.
Perbaikan kompilasi Java inkremental saat menggunakan pemroses anotasi: Update ini mengurangi waktu build dengan meningkatkan kualitas dukungannya untuk kompilasi Java inkremental saat menggunakan pemroses anotasi.
- Untuk project yang menggunakan Kapt (kebanyakan project khusus Kotlin dan project campuran Kotlin-Java): Kompilasi Java inkremental diaktifkan, sekalipun Anda menggunakan data binding atau plugin retro-lambda. Pemrosesan anotasi oleh tugas Kapt belum inkremental.
Untuk project yang tidak menggunakan Kapt (project khusus Java): Jika pemroses anotasi yang Anda gunakan semuanya mendukung pemrosesan anotasi inkremental, maka kompilasi Java inkremental akan diaktifkan secara default. Untuk memantau adopsi pemroses anotasi inkremental, lihat Masalah Gradle 5277.
Namun, jika satu atau beberapa pemroses anotasi tidak mendukung build inkremental, maka kompilasi Java inkremental tidak akan diaktifkan. Sebagai gantinya, Anda dapat menyertakan flag berikut dalam file
gradle.properties
:android.enableSeparateAnnotationProcessing=true
Jika flag ini Anda sertakan, plugin Android Gradle akan menjalankan pemroses anotasi dalam tugas terpisah dan memungkinkan tugas kompilasi Java berjalan secara inkremental.
Info debug yang lebih baik saat menggunakan API usang: Jika plugin mendeteksi Anda menggunakan API yang tidak lagi didukung, sekarang plugin dapat memberikan informasi yang lebih mendetail untuk membantu Anda menentukan tempat API tersebut digunakan. Untuk melihat info tambahan, Anda perlu menyertakan baris berikut dalam file
gradle.properties
project Anda:android.debug.obsoleteApi=true
Anda juga dapat mengaktifkan flag ini dengan meneruskan
-Pandroid.debug.obsoleteApi=true
dari command line.Anda dapat menjalankan pengujian instrumentasi pada modul fitur dari command line.
Perubahan perilaku
Konfigurasi tugas yang kurang penting: Sekarang plugin menggunakan API pembuatan tugas baru dari Gradle untuk menghindari inisialisasi dan konfigurasi tugas-tugas yang tidak diperlukan untuk menyelesaikan build saat ini (atau tugas-tugas yang tidak ada di grafik tugas eksekusi). Misalnya, jika Anda memiliki beberapa varian build, seperti varian build "rilis" dan "debug", dan membuat versi "debug" aplikasi, plugin akan menghindari inisialisasi dan konfigurasi tugas untuk versi "rilis" aplikasi Anda.
Memanggil metode lama tertentu dalam Variants API, misalnya
variant.getJavaCompile()
, mungkin masih akan memaksakan konfigurasi tugas. Guna memastikan build Anda dioptimalkan untuk konfigurasi tugas yang kurang penting, panggil metode baru yang akan menampilkan objekTaskProvider
, sepertivariant.getJavaCompileProvider()
.Jika menjalankan tugas build kustom, pelajari cara beradaptasi dengan API pembuatan tugas baru dari Gradle.
Untuk jenis build tertentu, jika
useProguard false
ditetapkan, sekarang plugin akan menggunakan R8, bukan ProGuard, untuk menyingkat dan meng-obfuscate kode dan resource aplikasi Anda. Untuk mempelajari R8 lebih lanjut, baca postingan blog ini dari Blog Developer Android.Pembuatan class R yang lebih cepat untuk project library: Sebelumnya, plugin Android Gradle akan menghasilkan file
R.java
untuk setiap dependensi project, lalu mengompilasi class R tersebut bersama class lain dalam aplikasi Anda. Sekarang plugin akan langsung membuat JAR yang berisi class R terkompilasi dari aplikasi Anda, tanpa terlebih dahulu membuat classR.java
antara. Pengoptimalan ini dapat meningkatkan performa build secara signifikan untuk project yang menyertakan banyak subproject dan dependensi library, serta meningkatkan kecepatan pengindeksan pada Android Studio.Saat membuat Android App Bundle, APK yang dihasilkan dari app bundle yang menargetkan Android 6.0 (API level 23) atau yang lebih baru kini menyertakan versi library native yang tidak dikompresi secara default. Dengan pengoptimalan ini, perangkat tidak perlu lagi membuat salinan library sehingga mengurangi ukuran aplikasi dalam disk. Jika ingin menonaktifkan pengoptimalan ini, tambahkan baris berikut ke file
gradle.properties
:android.bundle.enableUncompressedNativeLibs = false
Plugin ini menerapkan versi minimum beberapa plugin pihak ketiga.
Sinkronisasi project varian tunggal: Menyinkronkan project Anda dengan konfigurasi build merupakan langkah penting yang akan memungkinkan Android Studio memahami struktur project Anda. Namun, untuk project besar, proses ini dapat membutuhkan waktu lama. Jika project menggunakan berbagai varian build, kini Anda dapat mengoptimalkan sinkronisasi project dengan hanya membatasinya ke varian yang saat ini Anda pilih.
Anda harus menggunakan Android Studio 3.3 atau yang lebih tinggi dengan Plugin Android Gradle 3.3.0 atau yang lebih tinggi untuk mengaktifkan pengoptimalan ini. Jika memenuhi persyaratan ini, IDE akan meminta Anda mengaktifkan pengoptimalan ini pada saat sinkronisasi project. Pengoptimalan juga diaktifkan secara default pada project baru.
Untuk mengaktifkan pengoptimalan ini secara manual, klik File > Settings > Experimental > Gradle (Android Studio > Preferences > Experimental > Gradle pada Mac), lalu centang Only sync the active variant.
Catatan: Pengoptimalan ini mendukung sepenuhnya project yang menggunakan bahasa Java dan C++, serta menyediakan dukungan untuk Kotlin. Jika Anda mengaktifkan pengoptimalan untuk project dengan konten Kotlin, sinkronisasi Gradle akan melakukan fallback untuk menggunakan varian lengkap secara internal.
Download otomatis paket SDK yang hilang: Fungsionalitas ini diperluas untuk mendukung NDK. Untuk mempelajari lebih lanjut, baca Otomatis mendownload paket yang hilang dengan Gradle.
Perbaikan Bug
Plugin Android Gradle 3.3.0 memperbaiki masalah berikut:
- Proses build yang memanggil
android.support.v8.renderscript.RenderScript
, alih-alih versi AndroidX, meskipun Jetifier diaktifkan - Clash karena
androidx-rs.jar
menyertakanannotation.AnyRes
yang dipaketkan secara statis - Saat menggunakan RenderScript, Anda tidak perlu lagi menetapkan versi Build Tools dalam file
build.gradle
secara manual
- Proses build yang memanggil
3.2.0 (September 2018)
Versi plugin Android ini perlu beberapa hal berikut:
- Gradle 4.6 atau yang lebih baru. Untuk mempelajari lebih lanjut, baca bagian tentang mengupdate Gradle.
- SDK Build Tools 28.0.3 atau yang lebih baru.
3.2.1 (Oktober 2018)
Dengan update ini, Anda tidak perlu lagi menentukan versi untuk SDK Build Tools. Plugin Android Gradle sekarang menggunakan versi 28.0.3 secara default.
Fitur baru
Dukungan untuk membuat Android App Bundle: App bundle adalah format upload baru yang menyertakan semua kode dan resource terkompilasi aplikasi Anda, sedangkan pembuatan dan penandatanganan APK-nya diserahkan ke Google Play Store. Anda tidak perlu lagi membuat, menandatangani, dan mengelola banyak APK, dan pengguna mendapatkan download yang lebih kecil yang dioptimalkan untuk perangkat mereka. Untuk mempelajari lebih lanjut, baca Tentang Android App Bundle.
Dukungan untuk peningkatan kecepatan build inkremental saat menggunakan pemroses anotasi: DSL
AnnotationProcessorOptions
sekarang memperluasCommandLineArgumentProvider
yang memungkinkan Anda atau penulis pemroses anotasi untuk menganotasi argumen bagi pemroses yang menggunakan anotasi jenis properti build inkremental. Penggunaan anotasi ini meningkatkan keakuratan dan performa build inkremental atau clean build yang di-cache. Untuk mempelajari lebih lanjut, baca Meneruskan argumen ke pemroses anotasi.Alat migrasi untuk AndroidX: Saat menggunakan plugin Android Gradle 3.2.0 dengan Android 3.2 dan yang lebih tinggi, Anda dapat memigrasikan dependensi Maven dan lokal project agar menggunakan library AndroidX baru dengan memilih Refactor > Migrate to AndroidX dari panel menu. Penggunaan alat migrasi ini juga menetapkan flag berikut ke
true
dalam filegradle.properties
Anda:android.useAndroidX
: Jika ditetapkan ketrue
, plugin Android akan menggunakan library AndroidX yang sesuai, bukan Support Library. Jika flag ini tidak ditentukan, plugin akan menetapkannya kefalse
secara default.android.enableJetifier
: Jika ditetapkan ketrue
, plugin Android akan otomatis memigrasikan library pihak ketiga yang ada agar menggunakan AndroidX dengan menulis ulang biner library tersebut. Jika flag ini tidak ditentukan, plugin akan menetapkannya kefalse
secara default. Anda dapat menetapkan tanda ini ketrue
hanya jikaandroid.useAndroidX
juga ditetapkan ketrue
; jika tidak, Anda akan mengalami error build.
Untuk mempelajari lebih lanjut, baca Ringkasan AndroidX.
Penyingkat kode baru, R8: R8 adalah alat penyingkatan dan obfuscation kode baru yang menggantikan ProGuard. Anda dapat mulai menggunakan versi pratinjau R8 dengan menyertakan baris berikut dalam file
gradle.properties
project Anda:Groovy
android.enableR8 = true
Kotlin
android.enableR8 = true
Perubahan perilaku
- Desugaring dengan D8 sekarang diaktifkan secara default.
AAPT2 sekarang ada di repositori Maven Google. Untuk menggunakan AAPT2, pastikan Anda memiliki dependensi
google()
dalam filebuild.gradle
, seperti ditunjukkan di bawah ini:Groovy
buildscript { repositories { google() // here jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.2.0' } } allprojects { repositories { google() // and here jcenter() }
Kotlin
buildscript { repositories { google() // here jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.2.0' } } allprojects { repositories { google() // and here jcenter() }
Multidex native sekarang diaktifkan secara default. Android Studio versi sebelumnya mengaktifkan multidex native saat men-deploy versi debug sebuah aplikasi ke perangkat yang menjalankan Android API level 21 atau yang lebih tinggi. Sekarang, baik Anda men-deploy ke perangkat atau membuat APK untuk rilis, plugin Android Gradle akan mengaktifkan multidex native untuk semua modul yang menetapkan
minSdkVersion=21
atau lebih tinggi.Plugin sekarang memberlakukan versi minimum dari plugin protobuf (0.8.6), plugin Kotlin (1.2.50), dan plugin Crashlytics (1.25.4).
Plugin modul fitur,
com.android.feature
, sekarang memberlakukan penggunaan huruf, angka, dan garis bawah saja saat menentukan nama modul. Misalnya, jika nama modul fitur Anda menyertakan tanda hubung, Anda akan mengalami error build. Perilaku ini sesuai dengan plugin fitur dinamis.
Perbaikan bug
- JavaCompile kini bisa disimpan dalam cache pada project dengan data binding. (Masalah #69243050)
- Pencegahan kompilasi yang lebih baik untuk modul library dengan data binding. (Masalah #77539932)
- Sekarang Anda dapat mengaktifkan kembali konfigurasi sesuai permintaan jika Anda menonaktifkannya pada versi sebelumnya karena beberapa error build yang tidak terprediksi. (Masalah #77910727)
3.1.0 (Maret 2018)
Versi plugin Android ini perlu beberapa hal berikut:
- Gradle 4.4 atau yang lebih baru. Untuk mempelajari lebih lanjut, baca bagian tentang mengupdate Gradle.
- Build Tools 27.0.3 atau yang lebih baru.
Perlu diingat, Anda tidak perlu lagi menentukan versi untuk build tools menggunakan properti
android.buildToolsVersion
. Plugin secara default menggunakan versi minimum yang diperlukan.
Compiler DEX baru, D8
Secara default, Android Studio sekarang menggunakan compiler DEX baru bernama D8. Kompilasi DEX adalah proses mengubah bytecode .class
menjadi bytecode .dex
untuk Android Runtime (atau Dalvik, untuk versi Android yang lebih lama). Dibanding compiler sebelumnya, yang bernama DX, D8 mengompilasi lebih cepat dan menghasilkan file DEX lebih kecil, dengan performa runtime aplikasi yang sama atau bahkan lebih baik.
D8 tidak mengubah alur kerja rutin pengembangan aplikasi Anda. Namun, jika mengalami masalah terkait compiler baru, silakan laporkan bug. Anda dapat untuk sementara menonaktifkan D8 dan menggunakan DX dengan menyertakan baris berikut dalam file gradle.properties
project:
android.enableD8=false
Untuk project yang menggunakan fitur bahasa Java 8, desugaring inkremental diaktifkan secara default. Anda dapat menonaktifkannya dengan menentukan baris berikut dalam file gradle.properties
project:
android.enableIncrementalDesugaring=false.
Pengguna pratinjau: Jika Anda sudah menggunakan versi pratinjau D8, ingatlah bahwa D8 sekarang membuat kompilasi berdasarkan library yang disertakan dalam alat build SDK, bukan JDK. Jadi, jika Anda mengakses API yang ada di JDK, tetapi tidak ada di library alat build SDK, Anda akan mengalami error kompilasi.
Perubahan perilaku
Saat membuat multi-APK yang masing-masing menargetkan ABI berbeda, secara default plugin tidak lagi menghasilkan APK untuk ABI berikut:
mips
,mips64
, danarmeabi
.Jika ingin mem-build APK yang menargetkan ABI ini, Anda harus menggunakan NDK r16b atau yang lebih rendah dan menentukan ABI dalam file
build.gradle
, seperti yang ditunjukkan di bawah ini:
Groovy
splits { abi { include 'armeabi', 'mips', 'mips64' ... } }
Kotlin
splits { abi { include("armeabi", "mips", "mips64") ... } }
- Cache build plugin Android kini akan menghapus entri cache yang tersimpan lebih dari 30 hari.
- Meneruskan
"auto"
keresConfig
tidak lagi otomatis memilih resource string yang akan dikemas dalam APK Anda. Jika Anda terus menggunakan"auto"
, plugin akan memaketkan semua resource string yang disediakan oleh aplikasi Anda dan dependensinya. Jadi, sebaiknya tentukan setiap lokal yang Anda ingin dikemas oleh plugin ke dalam APK Anda. Karena modul lokal tidak dapat bergantung pada APK pengujian aplikasi Anda, menambahkan dependensi ke pengujian terinstrumentasi menggunakan konfigurasi
androidTestApi
, bukanandroidTestImplementation
, akan menyebabkan Gradle mengeluarkan peringatan berikut:Groovy
WARNING: Configuration 'androidTestApi' is obsolete and has been replaced with 'androidTestImplementation'
Kotlin
WARNING: Configuration 'androidTestApi' is obsolete and has been replaced with 'androidTestImplementation'
Perbaikan
- Memperbaiki masalah saat Android Studio tidak mengenali dependensi pada build gabungan.
- Memperbaiki masalah saat mengalami error sinkronisasi project ketika memuat plugin Android berkali-kali dalam satu build–misalnya, saat beberapa subproject masing-masing menyertakan plugin Android pada classpath buildscript-nya.
3.0.0 (Oktober 2017)
Plugin Android Gradle 3.0.0 mencakup berbagai perubahan yang ditujukan untuk mengatasi masalah performa pada project berskala besar.
Misalnya, pada project sample skeleton dengan ~130 modul dan sejumlah besar dependensi eksternal (tetapi tanpa kode atau resource), Anda dapat menikmati peningkatan performa yang serupa dengan berikut ini:
Versi plugin Android + versi Gradle | Plugin Android 2.2.0 + Gradle 2.14.1 | Plugin Android 2.3.0 + Gradle 3.3 | Plugin Android 3.0.0 + Gradle 4.1 |
---|---|---|---|
Konfigurasi (misalnya, menjalankan ./gradlew --help ) |
~2 mnt | ~9 d | ~2,5 d |
Perubahan Java 1-line (perubahan implementasi) | ~2 mnt 15 d | ~29 d | ~6,4 d |
Beberapa perubahan ini merusak build yang ada. Jadi, sebaiknya pertimbangkan untuk memigrasikan project Anda sebelum menggunakan plugin baru ini.
Jika tidak merasakan peningkatan performa seperti yang dijelaskan di atas, laporkan bug dan sertakan rekaman aktivitas build menggunakan Gradle Profiler.
Versi plugin Android ini perlu beberapa hal berikut:
- Gradle 4.1 atau yang lebih baru. Untuk mempelajari lebih lanjut, baca bagian tentang mengupdate Gradle.
- Build Tools 26.0.2 atau yang lebih baru.
Dengan update ini, Anda tidak perlu lagi menentukan versi untuk build tools—plugin menggunakan versi minimum yang diperlukan secara default.
Jadi, sekarang Anda dapat menghapus properti
android.buildToolsVersion
.
3.0.1 (November 2017)
Ini merupakan update minor untuk Android Studio 3.0.1, dan menyertakan perbaikan bug umum dan peningkatan performa.
Pengoptimalan
- Paralelisme yang lebih baik untuk project multi-modul melalui grafik tugas yang mendetail.
- Saat mengubah dependensi, Gradle melakukan build lebih cepat dengan tidak mengompilasi ulang modul yang tidak memiliki akses ke API dependensi tersebut. Sebaiknya Anda membatasi dependensi mana yang membocorkan API-nya ke modul lain menggunakan konfigurasi dependensi baru Gradle:
implementation
,api
,compileOnly
, danruntimeOnly
. - Peningkatan kecepatan build inkremental karena dexing per class. Setiap class sekarang dikompilasi ke dalam beberapa file DEX terpisah, dan hanya class yang dimodifikasi yang akan mengalami dexing ulang. Kecepatan build juga akan meningkat untuk aplikasi yang menetapkan
minSdkVersion
ke 20 atau yang lebih rendah, dan menggunakan multi-dex lama. - Peningkatan kecepatan build dengan mengoptimalkan penggunaan output yang di-cache untuk tugas-tugas tertentu. Untuk mendapatkan manfaat dari pengoptimalan ini, Anda perlu mengaktifkan cache build Gradle terlebih dahulu.
- Peningkatan pemrosesan resource inkremental menggunakan AAPT2, yang kini diaktifkan secara default.
Jika mengalami masalah saat menggunakan AAPT2, silakan laporkan bug. Anda juga dapat menonaktifkan AAPT2 dengan menetapkan
android.enableAapt2=false
dalam filegradle.properties
dan memulai ulang daemon Gradle dengan menjalankan./gradlew --stop
dari command line.
Fitur baru
- Pengelolaan dependensi berdasarkan varian. Saat membuat varian modul tertentu, plugin akan otomatis mencocokkan varian dependensi modul library lokal dengan varian modul yang Anda buat.
- Menyertakan plugin modul Feature baru untuk mendukung Android Instant Apps dan Android Instant Apps SDK (yang dapat Anda download menggunakan SDK Manager). Untuk mempelajari lebih lanjut cara membuat modul Feature dengan plugin baru ini, baca Struktur aplikasi instan dengan multi-fitur.
- Dukungan bawaan untuk menggunakan fitur bahasa Java 8 dan library Java 8 tertentu. Jack sekarang sudah tidak lagi digunakan dan diperlukan, terlebih dahulu Anda harus menonaktifkan Jack untuk menggunakan dukungan Java 8 yang telah diperbaiki dan tertanam dalam toolchain default. Untuk informasi selengkapnya, baca Menggunakan fitur bahasa Java 8.
- Menambahkan dukungan untuk menjalankan pengujian dengan Android Test Orchestrator, yang memungkinkan Anda menjalankan setiap pengujian aplikasi di dalam pemanggilan
Instrumentation
-nya sendiri. Karena setiap pengujian berjalan dalam instanceInstrumentation
-nya sendiri, status apa pun yang dibagikan antar-pengujian tidak terakumulasi pada CPU atau memori perangkat Anda. Dan, meskipun satu pengujian mengalami error, hanya instanceInstrumentation
-nya itu yang akan dikeluarkan, sehingga pengujian lainnya akan tetap berjalan.- Menambahkan
testOptions.execution
untuk menentukan apakah akan menggunakan orkestrasi pengujian di perangkat atau tidak. Jika ingin menggunakan Android Test Orchestrator, Anda perlu menentukanANDROID_TEST_ORCHESTRATOR
, seperti ditunjukkan di bawah ini. Secara default, properti ini ditetapkan keHOST
, yang menonaktifkan orkestrasi di perangkat dan merupakan metode standar untuk menjalankan pengujian.
- Menambahkan
Groovy
android { testOptions { execution 'ANDROID_TEST_ORCHESTRATOR' } }
Kotlin
android { testOptions { execution = "ANDROID_TEST_ORCHESTRATOR" } }
- Konfigurasi dependensi
androidTestUtil
yang baru memungkinkan Anda menginstal APK helper pengujian lain sebelum menjalankan pengujian instrumentasi, seperti Android Test Orchestrator:
Groovy
dependencies { androidTestUtil 'com.android.support.test:orchestrator:1.0.0' ... }
Kotlin
dependencies { androidTestUtil("com.android.support.test:orchestrator:1.0.0") ... }
- Menambahkan
testOptions.unitTests.includeAndroidResources
untuk mendukung pengujian unit yang memerlukan resource Android, seperti Roboelectric. Jika Anda menetapkan properti ini ketrue
, plugin akan melakukan penggabungan resource, aset, dan manifes sebelum menjalankan pengujian unit. Pengujian Anda selanjutnya dapat memeriksacom/android/tools/test_config.properties
pada classpath untuk kunci berikut:android_merged_assets
: jalur absolut ke direktori aset gabungan.Catatan: Untuk modul library, aset gabungan tidak memuat aset dependensi (lihat masalah #65550419).
android_merged_manifest
: jalur absolut ke file manifes gabungan.android_merged_resources
: jalur absolut ke direktori resource gabungan, yang memuat semua resource dari modul ini dan semua dependensinya.android_custom_package
: nama paket class R akhir. Jika Anda mengubah ID aplikasi secara dinamis, nama paket ini mungkin tidak cocok dengan atributpackage
dalam manifes aplikasi.
- Dukungan untuk font sebagai resource (yang merupakan fitur baru yang diperkenalkan di Android 8.0 (API level 26)).
- Dukungan untuk APK khusus bahasa dengan Android Instant Apps SDK 1.1 dan yang lebih baru.
- Sekarang Anda dapat mengubah direktori output untuk project build native eksternal Anda, seperti yang ditunjukkan di bawah:
Groovy
android { ... externalNativeBuild { // For ndk-build, instead use the ndkBuild block. cmake { ... // Specifies a relative path for outputs from external native // builds. You can specify any path that's not a subdirectory // of your project's temporary build/ directory. buildStagingDirectory "./outputs/cmake" } } }
Kotlin
android { ... externalNativeBuild { // For ndk-build, instead use the ndkBuild block. cmake { ... // Specifies a relative path for outputs from external native // builds. You can specify any path that's not a subdirectory // of your project's temporary build/ directory. buildStagingDirectory = "./outputs/cmake" } } }
- Sekarang Anda dapat menggunakan CMake 3.7 atau yang lebih baru saat mem-build project native dari Android Studio.
- Konfigurasi dependensi
lintChecks
baru memungkinkan Anda membuat JAR yang menentukan aturan lint kustom, dan memaketkannya ke dalam project AAR dan APK Anda. Aturan lint kustom Anda harus termasuk dalam project terpisah yang meng-output JAR tunggal dan hanya mencakup dependensicompileOnly
. Modul aplikasi dan library lainnya selanjutnya dapat bergantung pada project lint Anda menggunakan konfigurasilintChecks
:
Groovy
dependencies { // This tells the Gradle plugin to build ':lint-checks' into a lint.jar file // and package it with your module. If the module is an Android library, // other projects that depend on it automatically use the lint checks. // If the module is an app, lint includes these rules when analyzing the app. lintChecks project(':lint-checks') }
Kotlin
dependencies { // This tells the Gradle plugin to build ':lint-checks' into a lint.jar file // and package it with your module. If the module is an Android library, // other projects that depend on it automatically use the lint checks. // If the module is an app, lint includes these rules when analyzing the app. lintChecks(project(":lint-checks")) }
Perubahan perilaku
- Plugin Android 3.0.0 menghapus API tertentu, dan build Anda akan rusak jika menggunakan API tersebut. Misalnya, Anda tidak dapat lagi menggunakan Variants API untuk mengakses objek
outputFile()
atau menggunakanprocessManifest.manifestOutputFile()
untuk mendapatkan file manifes untuk setiap varian. Untuk mempelajari lebih lanjut, baca Perubahan API. - Anda tidak perlu lagi menentukan versi untuk build tools (jadi, sekarang Anda dapat menghapus properti
android.buildToolsVersion
). Secara default, plugin otomatis menggunakan versi alat build minimum yang diperlukan untuk versi plugin Android yang Anda gunakan. - Sekarang Anda mengaktifkan/menonaktifkan pemrosesan PNG dalam blok
buildTypes
, seperti ditunjukkan di bawah. Pemrosesan PNG diaktifkan secara default untuk semua build kecuali build debug karena build tersebut meningkatkan waktu build untuk project yang mencantumkan banyak file PNG. Jadi, guna meningkatkan waktu build untuk jenis build yang lain, sebaiknya Anda menonaktifkan pemrosesan PNG atau mengonversi gambar menjadi WebP.
Groovy
android { buildTypes { release { // Disables PNG crunching for the release build type. crunchPngs false } } }
Kotlin
android { buildTypes { release { // Disables PNG crunching for the release build type. isCrunchPngs = false } } }
- Plugin Android sekarang otomatis membuat target executable yang Anda konfigurasi di project CMake eksternal.
- Sekarang Anda harus
menambahkan pemroses anotasi
ke classpath pemroses menggunakan konfigurasi dependensi
annotationProcessor
. - Penggunaan
ndkCompile
yang telah dihentikan kini semakin dibatasi. Sebagai gantinya, beralihlah ke CMake atau ndk-build untuk mengompilasi kode native yang ingin Anda kemas ke dalam APK. Untuk mempelajari lebih lanjut, baca Bermigrasi dari ndkcompile.
2.3.0 (Februari 2017)
2.3.3 (Juni 2017)
Ini adalah update minor yang menambahkan kompatibilitas dengan Android Studio 2.3.3.
2.3.2 (Mei 2017)
Ini adalah update minor yang menambahkan kompatibilitas dengan Android Studio 2.3.2.
2.3.1 (April 2017)
Ini adalah update minor untuk plugin Android 2.3.0 yang memperbaiki masalah saat beberapa perangkat Android fisik tidak berfungsi optimal dengan Instant Run (lihat Masalah #235879).
- Dependensi:
-
- Gradle 3.3 atau yang lebih tinggi.
- Build Tools 25.0.0 atau yang lebih tinggi.
- Baru:
-
- Menggunakan Gradle 3.3, yang menyertakan peningkatan performa dan fitur baru. Lihat Catatan rilis Gradle untuk detail selengkapnya.
- Cache build: menyimpan output tertentu yang dihasilkan plugin Android saat mem-build project (seperti AAR yang tidak dikemas dan dependensi remote pre-dexed). Clean build Anda
jauh lebih cepat saat menggunakan cache karena sistem build dapat
menggunakan kembali file yang tersimpan dalam cache pada pembuatan berikutnya,
daripada membuatnya kembali. Project yang menggunakan plugin Android 2.3.0 dan yang lebih tinggi menggunakan build cache secara default. Untuk mempelajari lebih lanjut, baca
Meningkatkan Kecepatan Build dengan
Cache Build.
- Mencakup tugas
cleanBuildCache
yang menghapus cache build. - Jika Anda menggunakan cache build versi eksperimental (yang disertakan dalam plugin versi lama), Anda harus mengupdate plugin ke versi terbaru.
- Mencakup tugas
- Perubahan:
-
- Mendukung perubahan pada Instant Run yang tercantum pada Android Studio 2.3.
- Waktu konfigurasi untuk projects yang sangat besar akan lebih cepat secara signifikan.
- Memperbaiki masalah download otomatis untuk library tata letak batasan.
- Plugin kini menggunakan ProGuard version 5.3.2.
- Mencakup banyak perbaikan untuk bug yang dilaporkan. Silakan laporkan bug jika Anda mengalami masalah.
2.2.0 (September 2016)
- Dependensi:
-
- Gradle 2.14.1 atau yang lebih tinggi.
- Build Tools 23.0.2 atau yang lebih baru.
- Baru:
-
- Menggunakan Gradle 2.14.1, yang mencakup peningkatan performa dan fitur baru, serta memperbaiki kerentanan keamanan yang memungkinkan eskalasi akses lokal saat menggunakan daemon Gradle. Lihat Catatan rilis Gradle untuk detail selengkapnya.
- Menggunakan DSL
externalNativeBuild {}
, sekarang Gradle memungkinkan Anda menautkan ke sumber native dan mengompilasi library native menggunakan CMake atau ndk-build. Setelah mem-build library native, Gradle akan memaketkannya ke dalam APK. Untuk mempelajari lebih lanjut cara menggunakan CMake dan ndk-build dengan Gradle, baca Menambahkan Kode C dan C++ ke Project Anda. - Jika menjalankan build dari command line, Gradle akan berupaya mendownload otomatis komponen SDK yang hilang atau update yang menjadi dependensi project Anda. Untuk mempelajari lebih lanjut, baca Mendownload otomatis paket yang tidak ditemukan dengan Gradle.
- Fitur caching eksperimental baru memungkinkan Gradle mempercepat waktu build dengan melakukan pre-dexing, menyimpan, dan menggunakan kembali library versi pre-dexed. Untuk mempelajari lebih lanjut cara menggunakan fitur eksperimental ini, baca panduan Cache Build.
- Meningkatkan performa build dengan mengadopsi pipeline pengemasan default baru yang menangani pembuatan zip, penandatanganan, dan zipaligning dalam satu tugas. Anda
dapat kembali ke alat pengemasan lama dengan menambahkan
android.useOldPackaging=true
ke filegradle.properties
Anda. Saat menggunakan alat pengemasan baru, tugaszipalignDebug
tidak tersedia. Namun, Anda dapat membuatnya sendiri dengan memanggil metodecreateZipAlignTask(String taskName, File inputFile, File outputFile)
. - Penandatanganan APK kini menggunakan APK Signature Scheme v2 selain penandatanganan JAR tradisional. Semua platform Android akan menerima
APK yang dihasilkan. Setiap modifikasi pada APK setelah penandatanganan akan menjadikan tanda tangan v2 tidak valid dan mencegah penginstalan pada perangkat. Untuk menonaktifkan fitur ini,
tambahkan kode berikut ke file
build.gradle
level modul:Groovy
android { ... signingConfigs { config { ... v2SigningEnabled false } } }
Kotlin
android { ... signingConfigs { create("config") { ... v2SigningEnabled = false } } }
- Untuk build multidex, sekarang Anda dapat menggunakan aturan ProGuard untuk menentukan class
mana yang harus dikompilasi Gradle ke dalam file DEX utama aplikasi Anda. Karena sistem Android memuat file DEX utama terlebih dahulu saat memulai aplikasi, Anda dapat memprioritaskan class tertentu selama proses startup dengan mengompilasinya ke dalam file DEX utama. Setelah membuat file konfigurasi ProGuard khusus untuk file DEX utama, teruskan jalur file konfigurasi ini ke Gradle menggunakan
buildTypes.multiDexKeepProguard
. Penggunaan DSL ini berbeda dengan penggunaanbuildTypes.proguardFiles
, yang menyediakan aturan ProGuard umum untuk aplikasi Anda dan tidak menentukan class untuk file DEX utama. - Menambahkan dukungan untuk flag
android:extractNativeLibs
, yang dapat mengurangi ukuran aplikasi Anda saat diinstal di perangkat. Jika Anda menetapkan flag ini kefalse
dalam elemen<application>
manifes aplikasi, Gradle akan memaketkan versi library native yang tidak terkompresi dan telah diselaraskan ke dalam APK. Akibatnya,PackageManager
tidak akan menyalin library native dari APK ke sistem file perangkat selama penginstalan dan memberikan manfaat tambahan berupa ukuran update delta yang lebih kecil untuk aplikasi Anda. - Sekarang Anda dapat menetapkan
versionNameSuffix
danapplicationIdSuffix
untuk ragam produk. (Masalah 59614)
- Perubahan:
-
-
getDefaultProguardFile
sekarang menampilkan file ProGuard default yang disediakan oleh plugin Android untuk Gradle dan tidak lagi menggunakan file ProGuard yang ada di Android SDK. - Peningkatan performa dan fitur kompiler Jack:
- Sekarang Jack mendukung cakupan pengujian Jacoco jika
testCoverageEnabled
ditetapkan ketrue
. - Peningkatan kualitas dukungan untuk pemroses anotasi. Pemroses anotasi di classpath Anda, seperti dependensi
compile
, otomatis diterapkan ke build Anda. Anda juga dapat menentukan pemroses anotasi dalam argumen build dan pass menggunakanjavaCompileOptions.annotationProcessorOptions {}
DSL dalam filebuild.gradle
level modul:Groovy
android { ... defaultConfig { ... javaCompileOptions { annotationProcessorOptions { className 'com.example.MyProcessor' // Arguments are optional. arguments = [ foo : 'bar' ] } } } }
Kotlin
android { ... defaultConfig { ... javaCompileOptions { annotationProcessorOptions { className = "com.example.MyProcessor" // Arguments are optional. arguments(mapOf(foo to "bar")) } } } }
Jika ingin menerapkan pemroses anotasi selama waktu kompilasi, tetapi tidak ingin menyertakannya ke dalam APK, gunakan lingkup dependensi
annotationProcessor
:Groovy
dependencies { compile 'com.google.dagger:dagger:2.0' annotationProcessor 'com.google.dagger:dagger-compiler:2.0' // or use buildVariantAnnotationProcessor to target a specific build variant }
Kotlin
dependencies { implementation("com.google.dagger:dagger:2.0") annotationProcessor("com.google.dagger:dagger-compiler:2.0") // or use buildVariantAnnotationProcessor to target a specific build variant }
Untuk daftar parameter yang dapat Anda tetapkan, jalankan perintah berikut dari command line:
java -jar /build-tools/jack.jar --help-properties
- Sekarang Jack mendukung cakupan pengujian Jacoco jika
- Secara default, jika ukuran heap daemon Gradle setidaknya 1,5 GB, Jack akan berjalan dalam proses yang sama dengan Gradle. Untuk menyesuaikan ukuran heap daemon, tambahkan baris berikut ke file
gradle.properties
Anda:# This sets the daemon heap size to 1.5GB. org.gradle.jvmargs=-Xmx1536M
-
2.1.0 (April 2016)
2.1.3 (Agustus 2016)
Update ini memerlukan Gradle 2.14.1 dan yang lebih baru. Gradle 2.14.1 mencakup peningkatan performa, fitur baru, dan perbaikan keamanan penting. Untuk detail selengkapnya, lihat catatan rilis Gradle.
- Dependensi:
-
- Gradle 2.10 atau yang lebih baru.
- Build Tools 23.0.2 atau yang lebih baru.
- Baru:
-
- Penambahan dukungan untuk Pratinjau Developer N, JDK 8, dan berbagai fitur bahasa Java 8 yang menggunakan toolchain Jack. Untuk mengetahui lebih lanjut, baca Panduan N Preview.
Catatan: Instant Run saat ini tidak berfungsi dengan Jack dan akan dinonaktifkan jika toolchain baru digunakan. Anda hanya perlu menggunakan Jack jika mengembangkan aplikasi untuk N Preview dan ingin menggunakan fitur bahasa Java 8 yang didukung.
- Penambahan dukungan default untuk kompilasi Java inkremental guna mengurangi waktu kompilasi selama pengembangan. Ini dilakukan dengan hanya mengompilasi ulang bagian-bagian kode sumber yang telah berubah atau perlu dikompilasi ulang. Untuk menonaktifkan
fitur ini, tambahkan kode berikut ke file
build.gradle
level modul:Groovy
android { ... compileOptions { incremental false } }
Kotlin
android { ... compileOptions { incremental = false } }
-
Penambahan dukungan untuk dexing-in-process yang menjalankan dexing pada proses build, bukan dalam proses VM eksternal terpisah. Cara ini tidak hanya mempercepat proses build inkremental, tetapi juga build penuh. Fitur ini diaktifkan secara default untuk project yang telah menetapkan ukuran heap maksimum daemon Gradle ke setidaknya 2048 MB. Anda dapat melakukannya dengan menyertakan baris berikut ke dalam file
```none org.gradle.jvmargs = -Xmx2048m ```gradle.properties
project:Jika Anda telah menentukan nilai untuk
```none org.gradle.jvmargs = -Xmx3072m ```javaMaxHeapSize
dalam filebuild.gradle
level modul, Anda harus menetapkanorg.gradle.jvmargs
ke nilaijavaMaxHeapSize
+ 1024 MB. Misalnya, jika Anda telah menetapkanjavaMaxHeapSize
ke "2048m", Anda harus menambahkan berikut ini ke filegradle.properties
project:Untuk menonaktifkan dexing-in-process, tambahkan kode berikut ke file
build.gradle
level modul:Groovy
android { ... dexOptions { dexInProcess false } }
Kotlin
android { ... dexOptions { dexInProcess = false } }
- Penambahan dukungan untuk Pratinjau Developer N, JDK 8, dan berbagai fitur bahasa Java 8 yang menggunakan toolchain Jack. Untuk mengetahui lebih lanjut, baca Panduan N Preview.
2.0.0 (April 2016)
- Dependensi:
-
- Gradle 2.10 atau yang lebih baru.
- Build Tools 21.1.1 atau yang lebih baru.
- Baru:
-
- Mengaktifkan Instant Run dengan mendukung injeksi bytecode, dan mengirim update kode dan resource ke aplikasi yang berjalan di emulator atau perangkat fisik.
- Penambahan dukungan untuk build inkremental, bahkan saat aplikasi tidak berjalan. Waktu build penuh dipersingkat dengan mengirim perubahan inkremental melalui Android Debug Bridge ke perangkat yang terhubung.
- Penambahan
maxProcessCount
untuk mengontrol jumlah proses dex slave yang dapat dibuat secara serentak. Kode berikut, dalam filebuild.gradle
level modul, menetapkan jumlah maksimum proses serentak ke 4:Groovy
android { ... dexOptions { maxProcessCount = 4 // this is the default value } }
Kotlin
android { ... dexOptions { maxProcessCount = 4 // this is the default value } }
- Penambahan penyingkat kode eksperimental untuk mendukung pre-dexing dan mengurangi re-dexing
dependensi, yang tidak didukung dengan Proguard. Pendekatan ini meningkatkan kecepatan build untuk varian build debug Anda. Karena penyingkat kode eksperimental ini tidak mendukung pengoptimalan dan obfuscation, sebaiknya Anda mengaktifkan Proguard untuk versi rilis. Untuk mengaktifkan penyingkat kode eksperimental untuk build debug, tambahkan
kode berikut ke file
build.gradle
level modul:Groovy
android { ... buildTypes { debug { minifyEnabled true useProguard false } release { minifyEnabled true useProguard true // this is a default setting } } }
Kotlin
android { ... buildTypes { getByName("debug") { minifyEnabled = true useProguard = false } getByName("release") { minifyEnabled = true useProguard = true // this is a default setting } } }
- Penambahan dukungan logging dan peningkatan performa untuk penyingkat kode resource.
Penyingkat kode resource kini mencatat semua operasinya ke dalam file
resources.txt
yang berada di folder yang sama dengan file log Proguard.
- Perilaku yang berubah:
-
- Jika
minSdkVersion
ditetapkan ke 18 atau lebih tinggi, penandatanganan APK akan menggunakan SHA256. - Kunci DSA dan ECDSA kini dapat menandatangani paket APK.
Catatan: Penyedia Android keystore tidak lagi mendukung kunci DSA pada Android 6.0 (API level 23) dan yang lebih baru.
- Jika
- Perbaikan masalah:
-
- Memperbaiki masalah yang menyebabkan dependensi AAR duplikat dalam pengujian dan konfigurasi build utama.