Catatan rilis plugin Android Gradle

Repositori JCenter menjadi hanya baca pada tanggal 31 Maret 2021. Untuk informasi selengkapnya, lihat pembaruan layanan JCenter.

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 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 - 3.5
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+
4.2.0+6.7.1+
7.07.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:

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

  2. 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 dengan api atau implementation.
    Juga berlaku untuk varian *Compile, misalnya: debugCompile.
  • provided
    Ini telah diganti dengan compileOnly.
    Juga berlaku pada varian *Provided, misalnya: releaseProvided.
  • apk
    Ini telah diganti dengan runtimeOnly.
  • publish
    Ini telah diganti dengan runtimeOnly.

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:

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 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:

  1. Jika belum melakukannya, build aplikasi dengan memilih Build > Make Project dari panel menu.
  2. Pilih 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}
  • Opsional (java.util.Optional, java.util.OptionalInt, dan java.util.OptionalDouble) serta 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 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.

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:

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 dan targetSdk.
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:

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:

  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 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:

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)

Versi plugin Android ini perlu beberapa hal berikut:

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 mem-build 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.

    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.

    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, 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 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)

Versi plugin Android ini perlu beberapa hal berikut:

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

  • 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 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 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 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 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 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)

Versi plugin Android ini perlu beberapa hal berikut:

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 flag 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 flag 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 flag 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:

    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 file build.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

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, dan armeabi.

    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" ke resConfig 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, bukan androidTestImplementation, 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, 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 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 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.

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 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 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 dependensi compileOnly. Modul aplikasi dan library lainnya selanjutnya dapat bergantung pada project lint Anda menggunakan konfigurasi lintChecks:

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

    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 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 flag ini ke false 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 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 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 menggunakan javaCompileOptions.annotationProcessorOptions {} DSL dalam file build.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
      
    • 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:
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 gradle.properties project:

    ```none 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:

    ```none org.gradle.jvmargs = -Xmx3072m ```

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

    Groovy

    android {
      ...
      dexOptions {
          dexInProcess false
      }
    }
    

    Kotlin

    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:

    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.

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

Rilis sebelumnya