Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Catatan rilis plugin Android Gradle

Sistem build Android Studio didasarkan pada Gradle. Plugin Android Gradle menambahkan beberapa fitur yang dikhususkan untuk membuat 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 fitur Gradle Anda agar selalu update dan apa saja yang ada pada update terbarunya.

Untuk mengetahui detail cara mengonfigurasi build Android dengan Gradle, lihat halaman berikut:

Untuk informasi lebih lanjut tentang sistem build Gradle, lihat Panduan pengguna Gradle.

Mengupdate plugin Android Gradle

Saat mengupdate Android Studio, Anda mungkin menerima permintaan untuk mengupdate secara otomatis 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.0.0 dari file build.gradle:

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.0.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 buat selanjutnya, atau klik Tools > > Android > 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 pluginVersi Gradle yang diperlukan
1.0.0 - 1.1.32.2.1 - 2.3
1.2.0 - 1.3.12.2.1 - 2.9
1.5.02.2.1 - 2.13
2.0.0 - 2.1.22.10 - 2.13
2.1.3 - 2.2.32.14.1+
2.3.0+3.3+
3.0.0+4.1+
3.1.0+4.4+
3.2.0 - 3.2.14.6+
3.3.0 - 3.3.34.10.1+
3.4.0 - 3.4.35.1.1+
3.5.0 - 3.5.45.4.1+
3.6.0 - 3.6.45.6.4+
4.0.0+6.1.1+
4.1.0+6.5+

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.1.1 dalam file gradle-wrapper.properties.

...
distributionUrl = https\://services.gradle.org/distributions/gradle-6.1.1-all.zip
...

4.1.0 (Agustus 2020)

Kompatibilitas

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

Fitur baru

Versi plugin Android Gradle ini menyertakan fitur baru berikut.

Dukungan DSL Skrip Kotlin

Guna meningkatkan pengalaman mengedit 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 API Kotlin.
  • Platform API Plugin Android Gradle sudah dengan jelas ditetapkan, supaya ekstensi build Android tidak mudah error dimasa 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:

buildFeatures {
    prefabPublishing true
}

prefab {
    mylibrary {
      headers "src/main/cpp/mylibrary/include"
    }

    myotherlibrary {
        headers "src/main/cpp/myotherlibrary/include"
    }
}

Dalam contoh ini, library mylibrary dan myotherlibrary dari build ndk-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 Pengurangan library dan aplikasi Kotlin menggunakan refleksi Kotlin dengan R8 pada Media.

Perubahan perilaku

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 menyesatkan. 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 diperluas ke manifes dan kolom BuildConfig aplikasi.

Tetapkan jalur NDK

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

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

Jika Anda menggunakan properti ini bersama dengan android.ndkVersion properti, 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 DataBindingComponent atau BR class. 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 SDK Fabric dan bermigrasi ke SDK Firebase Crashlytics, lihat Meng-upgrade ke SDK Firebase Crashlytics.

4.0.0 (April 2020)

Plugin Android versi ini memerlukan:

4.0.1 (Juli 2020)

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 memungkinkan untuk 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 <queries> elemen dalam manifes aplikasi atau library Android.

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 tinggi. 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 pembuatan, 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:

  1. Jika belum melakukannya, build aplikasi Anda dengan memilih Build > Make Project dari panel menu.
  2. Select View > Tool Windows > Build dari panel menu.
  3. 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}
  • Optional (java.util.Optional, java.util.OptionalInt dan java.util.OptionalDouble) beberapa class baru lainnya yang berguna dengan API di atas
  • Beberapa tambahan pada java.util.concurrent.atomic (metode baru pada AtomicInteger, AtomicLong dan AtomicReference)
  • ConcurrentHashMap (dengan perbaikan bug untuk Android 5.0)

Untuk mendukung API bahasa ini, D8 mengompilasi file DEX library terpisah yang berisi implementasi API yang hilang dan menyertakannya di aplikasi Anda. Proses desugaring menulis ulang kode aplikasi Anda untuk menggunakan library ini pada waktu proses.

Guna mengaktifkan dukungan untuk API bahasa ini, sertakan yang berikut ini dalam file build.gradle modul Anda:

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'
}

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:

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 versi sebelumnya plugin Android Gradle, semua modul fitur hanya dapat bergantung pada modul dasar. 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.

Dependensi fitur pada fitur

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:

// 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 (untuk mendukung fitur saat mengedit konfigurasi Run, misalnya ) dengan mengklik Help > Edit Custom VM Options dari panel menu dan menyertakan yang 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 yang berikut ini dalam file build.gradle modul Anda:

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 menampilkan 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.

Plugin 'feature' dan 'instantapp' Android Gradle 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 mengemas aplikasi instan Anda menggunakan Android App Bundle.

Pada plugin Android Gradle 4.0.0 dan yang lebih tinggi, 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 annotationProcessorOptions.includeCompileClasspath properti DSL tidak lagi berpengaruh apa pun. 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 build.gradle file menggunakan annotationProcessor konfigurasi dependensi. Untuk mempelajari lebih lanjut, baca Menambahkan pemroses anotasi.

Paket otomatis dependensi prebuilt digunakan 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:

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']
    }
}

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)

Plugin Android versi ini memerlukan:

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:

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:

  1. Tambahkan flag -Pandroid.enableProfileJson=true saat menjalankan build Gradle. Contoh:

    gradlew assembleDebug -Pandroid.enableProfileJson=true

  2. Buka browser Chrome dan ketik chrome://tracing di kotak penelusuran.

  3. Klik tombol Load dan buka project-root/build/android-profile untuk menemukan file. Nama filenya adalah profile-timestamp.json.gz.

Anda dapat melihat data atribusi build native di dekat bagian atas layar:

Rekaman aktivitas atribusi build native di Chrome

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 plugin Android Gradle untuk mengemas 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 waktu proses 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 waktu proses. Perilaku ini juga terjadi ketika SDK target aplikasi disetel ke API level 23, yang sebelumnya mengizinkan akses ke anotasi tersebut selama waktu proses 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 mengemas class ini dengan aplikasi Anda, sehingga Anda dapat merujuk ke izin tersebut secara lebih mudah selama waktu proses.

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 tiga area utama Android Developer Tools: kesehatan sistem, penyempurnaan 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 Android Developer atau bagian di bawah.

Plugin Android versi ini memerlukan:

3.5.4 (Juli 2020)

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)

Plugin Android versi ini memerlukan:

3.4.3 (Juli 2020)

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 membuat project secara lokal. Jika sebelumnya Anda menggunakan konfigurasi dependensi lintChecks untuk menyertakan pemeriksaan lint dalam AAR yang dipublikasikan, sebaiknya migrasikan dependensi tersebut untuk menggunakan konfigurasi lintPublish 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.

    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 membuat aplikasi instan, plugin Android Gradle 3.4.0 akan memunculkan peringatan tentang penghentian penggunaan. Untuk memastikan Anda masih dapat membuat 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.

    Sebelum R8, ProGuard adalah langkah kompilasi yang berbeda dengan dexing dan
        desugaring.

    Sekarang, dengan R8, desugaring, penyingkatan, obfuscation, pengoptimalan, dan dexing (D8) dapat diselesaikan dalam satu langkah, seperti yang diilustrasikan di bawah ini.

    Dengan R8, desugaring, penyingkatan, obfuscation, pengoptimalan, dan dexing
        dilakukan dalam satu langkah kompilasi.

    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, penyusutan, 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, silakanlaporkan 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 menggunakan ndkBuild 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)

Plugin Android versi ini memerlukan:

3.3.3 (Juli 2020)

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

  • Peningkatan sinkronisasi classpath: Saat menyelesaikan dependensi pada waktu proses dan mengompilasi waktu classpath, plugin Android Gradle mencoba memperbaiki konflik versi downstream tertentu untuk dependensi yang muncul di beberapa classpath.

    Misalnya, jika classpath waktu proses 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 antar classpath.

  • Peningkatan kompilasi Java inkremental saat menggunakan pemroses anotasi: Update ini mengurangi waktu build dengan menyempurnakan 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 tanda berikut dalam file gradle.properties:

      android.enableSeparateAnnotationProcessing=true
      

      Jika tanda 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 tanda 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 objek TaskProvider, seperti variant.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 Android Developer.

  • 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 class R.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 versi yang lebih tinggi 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 menyertakan annotation.AnyRes yang dipaketkan secara statis
    • Saat menggunakan RenderScript, Anda tidak perlu lagi menetapkan versi Build Tools dalam file build.gradle secara manual

3.2.0 (September 2018)

Plugin Android versi ini memerlukan:

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 memperluas CommandLineArgumentProvider 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 tanda berikut ke true dalam file gradle.properties Anda:

    • android.useAndroidX: Jika ditetapkan ke true , plugin Android akan menggunakan library AndroidX yang sesuai, bukan Support Library. Jika tanda ini tidak ditentukan, plugin akan menetapkannya ke false secara default.
    • android.enableJetifier: Jika ditetapkan ke true, plugin Android akan otomatis memigrasikan library pihak ketiga yang ada agar menggunakan AndroidX dengan menulis ulang biner library tersebut. Jika tanda ini tidak ditentukan, plugin akan menetapkannya ke false secara default. Anda dapat menetapkan tanda ini ke true hanya jika android.useAndroidX juga ditetapkan ke true; 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:

    android.enableR8 = true
    

Perubahan perilaku

  • Desugaring dengan D8 sekarang diaktifkan secara default.
  • AAPT2 sekarang ada di repositori Google Maven. Untuk menggunakan AAPT2, pastikan Anda memiliki dependensi google() dalam file build.gradle, seperti ditunjukkan di bawah ini:

    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

3.1.0 (Maret 2018)

Plugin Android versi ini memerlukan:

  • Gradle 4.4 atau yang lebih tinggi. Untuk mempelajari lebih lanjut, baca bagian tentang mengupdate Gradle.
  • Build Tools 27.0.3 atau yang lebih tinggi. 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.

Pratinjau pengguna: Jika Anda sudah menggunakan versi pratinjau D8, ingatlah bahwa D8 sekarang membuat kompilasi berdasarkan library yang disertakan dalam SDK build tools—bukan JDK. Jadi, jika Anda mengakses API yang ada di JDK tetapi tidak ada di library SDK build tools, 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, dan armeabi.

    Jika ingin membuat APK yang menargetkan ABI ini, Anda harus menggunakan NDK r16b atau yang lebih lama dan menentukan ABI dalam file build.gradle Anda, seperti ditunjukkan di bawah ini:

    splits {
      abi {
          include 'armeabi', 'mips', 'mips64'
          ...
      }
    }
    
  • Saat membuat konfigurasi APK untuk Aplikasi Instan Android, pemisahan konfigurasi bahasa kini dikelompokkan berdasarkan bahasa root secara default. Misalnya, jika aplikasi Anda menyertakan resource untuk lokal zh-TW atau zh-CN, Gradle akan mengemas resource tersebut pada pemisahan konfigurasi bahasa zh. Anda dapat mengganti perilaku ini dengan menentukan grup Anda sendiri menggunakan properti include, seperti ditunjukkan di bawah ini:

    splits {
        language {
            enable true
            // Each string defines a group of locales that
            // Gradle should package together.
            include "in,id",
                    "iw,he",
                    "fil,tl,tgl",
                    "yue,zh,zh-TW,zh-CN"
        }
    }
    
  • Cache build plugin Android kini akan menghapus entri cache yang tersimpan lebih dari 30 hari.

  • Meneruskan "auto" ke resConfig tidak lagi otomatis memilih resource string yang akan dikemas dalam APK Anda. Jika Anda terus menggunakan "auto", plugin akan mengemas 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, bukan androidTestImplementation, akan menyebabkan Gradle mengeluarkan peringatan berikut:

      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.

Plugin Android versi ini memerlukan:

  • Gradle 4.1 atau yang lebih tinggi. Untuk mempelajari lebih lanjut, baca bagian tentang mengupdate Gradle.
  • Build Tools 26.0.2 atau yang lebih tinggi. 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, dan runtimeOnly.
  • 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 file gradle.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 disempurnakan 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 instance Instrumentation-nya sendiri, status apa pun yang dibagikan antar-pengujian tidak terakumulasi pada CPU atau memori perangkat Anda. Dan, meskipun satu pengujian mengalami error, hanya instance Instrumentation-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 menentukan ANDROID_TEST_ORCHESTRATOR, seperti ditunjukkan di bawah ini. Secara default, properti ini ditetapkan ke HOST, yang menonaktifkan orkestrasi di perangkat dan merupakan metode standar untuk menjalankan pengujian.
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:
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 ke true, plugin akan melakukan penggabungan resource, aset, dan manifes sebelum menjalankan pengujian unit. Pengujian Anda selanjutnya dapat memeriksa com/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 atribut package 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 tinggi. Untuk informasi selengkapnya, lihat Mengonfigurasi build untuk pemisahan murni.
  • Sekarang Anda dapat mengubah direktori output untuk project build native eksternal Anda, seperti yang ditunjukkan di bawah:
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 tinggi saat membuat project native dari Android Studio.
  • Konfigurasi dependensi lintChecks baru memungkinkan Anda membuat JAR yang menentukan aturan lint kustom, dan mengemasnya ke dalam project AAR dan APK Anda. Aturan lint kustom Anda harus termasuk dalam project terpisah yang meng-output JAR tunggal dan hanya mencakup dependensi compileOnly. Modul aplikasi dan library lainnya selanjutnya dapat bergantung pada project lint Anda menggunakan konfigurasi lintChecks:
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 menggunakan processManifest.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 build tools 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.
android {
  buildTypes {
    release {
      // Disables PNG crunching for the release build type.
      crunchPngs 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 di mana beberapa perangkat Android fisik tidak berfungsi optimal dengan Instant Run (lihat Masalah #235879).

Dependensi:
Baru:
  • Menggunakan Gradle 3.3, yang menyertakan penyempurnaan performa dan fitur baru. Untuk detail selengkapnya, lihat catatan rilis Gradle.
  • Cache build: menyimpan output tertentu yang dihasilkan plugin Android saat membuat 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.
Perubahan:

2.2.0 (September 2016)

Dependensi:
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 membuat library native, Gradle akan mengemasnya ke dalam APK Anda. 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 file gradle.properties Anda. Saat menggunakan alat pengemasan baru, tugas zipalignDebug tidak tersedia. Namun, Anda dapat membuatnya sendiri dengan memanggil metode createZipAlignTask(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:
    android {
      ...
      signingConfigs {
        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 penggunaan buildTypes.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 tanda ini ke false dalam elemen <application> manifes aplikasi Anda, Gradle akan mengemas versi library native yang tidak terkompresi dan telah diselaraskan ke dalam APK Anda. 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 dan applicationIdSuffix 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 ke true.
    • Peningkatan 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 menggunakan javaCompileOptions.annotationProcessorOptions {} DSL dalam file build.gradle level modul:
      android {
        ...
        defaultConfig {
          ...
          javaCompileOptions {
            annotationProcessorOptions {
              className 'com.example.MyProcessor'
              // Arguments are optional.
              arguments = [ foo : 'bar' ]
            }
          }
        }
      }
      

      Jika ingin menerapkan pemroses anotasi selama proses kompilasi tetapi tidak ingin menyertakannya ke dalam APK, gunakan lingkup dependensi annotationProcessor:

      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
      }
      
    • Anda dapat menetapkan tanda tambahan untuk Jack menggunakan jackOptions.additionalParameters(). Cuplikan kode berikut menetapkan jack.incremental parameter ke true:
      android {
        defaultConfig {
          ...
          jackOptions {
            enabled true
            additionalParameters("jack.incremental" : true)
          }
        }
      }
      

      Untuk daftar parameter yang dapat Anda tetapkan, jalankan perintah berikut dari command line:

      java -jar /build-tools/jack.jar --help-properties
      
    • 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 tinggi. Gradle 2.14.1 mencakup peningkatan performa, fitur baru, dan perbaikan keamanan penting. Untuk detail selengkapnya, lihat catatan rilis Gradle.

Dependensi:
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:
    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 gradle.properties project:

    org.gradle.jvmargs = -Xmx2048m
    

    Jika Anda telah menentukan nilai untuk javaMaxHeapSize dalam file build.gradle level modul, Anda harus menetapkan org.gradle.jvmargs ke nilai javaMaxHeapSize + 1024 MB. Misalnya, jika Anda telah menetapkan javaMaxHeapSize ke "2048m", Anda harus menambahkan berikut ini ke file gradle.properties project:

    org.gradle.jvmargs = -Xmx3072m
    

    Untuk menonaktifkan dexing-in-process, tambahkan kode berikut ke file build.gradle level modul:

    android {
      ...
      dexOptions {
          dexInProcess false
      }
    }
    

2.0.0 (April 2016)

Dependensi:
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 file build.gradle level modul, menetapkan jumlah maksimum proses serentak ke 4:
    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:
    android {
      ...
      buildTypes {
        debug {
          minifyEnabled true
          useProguard false
        }
        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 tinggi.

Perbaikan masalah:
  • Memperbaiki masalah yang menyebabkan dependensi AAR duplikat dalam pengujian dan konfigurasi build utama.

Rilis sebelumnya