Plugin Android Gradle 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.4.2 dan menyertakan berbagai perbaikan bug dan peningkatan performa. Untuk melihat daftar perbaikan bug penting, baca postingan blog tentang 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 blog tentang 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 membangun project secara lokal. Jika sebelumnya menggunakan konfigurasi dependensi lintChecks untuk menyertakan pemeriksaan lint dalam AAR yang dipublikasikan, Anda harus memigrasikan dependensi tersebut untuk menggunakan konfigurasi lintPublish baru yang dijelaskan di bawah ini.
    • lintPublish: Gunakan konfigurasi baru ini dalam project library untuk pemeriksaan lint yang ingin Anda sertakan dalam AAR yang dipublikasikan, seperti ditunjukkan di bawah ini. Artinya, project yang menggunakan library Anda juga akan menerapkan pemeriksaan lint tersebut.

    Contoh kode berikut menggunakan kedua konfigurasi dependensi pada project library Android lokal.

    dependencies {
      // Executes lint checks from the ':lint' project at build time.
      lintChecks project(':lint')
      // Packages lint checks from the ':lintpublish' in the published AAR.
      lintPublish project(':lintpublish')
    }
            
    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 membangun aplikasi instan, plugin Android Gradle 3.4.0 akan memunculkan peringatan tentang penghentian penggunaan. Untuk memastikan Anda masih dapat membangun aplikasi instan pada versi plugin mendatang, migrasikan aplikasi instan Anda agar menggunakan plugin fitur dinamis, yang juga memungkinkan Anda memublikasikan pengalaman aplikasi terinstal dan aplikasi instan dari satu Android App Bundle.

  • R8 diaktifkan secara default: R8 mengintegrasikan desugaring, penyingkatan, obfuscation, pengoptimalan, dan dexing ke dalam satu langkah—sehingga menghasilkan peningkatan performa build yang nyata. R8 diperkenalkan pada plugin Android Gradle 3.3.0 dan kini diaktifkan secara default untuk aplikasi dan project library Android yang menggunakan plugin 3.4.0 dan yang lebih tinggi.

Gambar di bawah ini memberikan ringkasan umum tentang proses kompilasi sebelum R8 diperkenalkan.

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

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

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

Perlu diperhatikan bahwa R8 dirancang agar kompatibel dengan aturan ProGuard yang telah ada, sehingga Anda mungkin tidak perlu mengambil tindakan apa pun untuk mendapatkan manfaat dari R8. Namun, karena teknologinya berbeda dengan ProGuard yang secara khusus dirancang untuk project Android, penyusutan dan pengoptimalan dapat menyebabkan penghapusan kode yang mungkin tidak dilakukan ProGuard. Jadi, dalam situasi yang jarang terjadi ini, Anda mungkin perlu menambahkan aturan lain untuk menjaga kode tersebut pada output build Anda.

Jika mengalami masalah saat menggunakan R8, baca FAQ kompatibilitas R8 untuk memeriksa apakah ada solusi untuk masalah Anda. Jika solusi tidak terdokumentasi, 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
      
    

Catatan: Untuk jenis build tertentu, jika Anda menetapkan useProguard ke false dalam file build.gradle modul aplikasi Anda, plugin Android Gradle akan menggunakan R8 untuk menyingkat kode aplikasi untuk jenis build tersebut, terlepas dari apakah R8 pada file gradle.properties project Anda dinonaktifkan atau tidak.

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