Plugin Android Gradle 7.1.0 (Januari 2022)

Plugin Android Gradle 7.1.0 merupakan rilis utama yang menyertakan berbagai peningkatan dan fitur baru.

7.1.3 (April 2022)

Update minor ini mencakup perbaikan bug berikut:

  • Masalah class duplikat yang dilaporkan oleh R8

Untuk melihat daftar lengkap perbaikan bug yang disertakan dalam rilis ini, lihat postingan blog Android Studio Bumblebee Patch 3.

7.1.2 (Februari 2022)

Update minor ini mencakup perbaikan bug berikut:

  • Plugin Android Gradle 7.1.0-rc01 gagal melakukan transformasi bytecode ASM selama pengujian unit
  • Sinkronisasi Gradle gagal dengan pesan "Unable to load class 'com.android.build.api.extension.AndroidComponentsExtension'".
  • Beberapa blok DSL baru tidak dapat digunakan dari Groovy DSL di Plugin Android Gradle 7.0.0
  • API penerbitan baru AGP 7.1: javadoc jar yang dibuat tidak ditandatangani
  • ClassDataSourceCache harus menggunakan versi Asm terbaru
  • Android Studio BumbleBee tidak selalu men-deploy perubahan terbaru

Untuk melihat daftar lengkap perbaikan bug yang disertakan dalam rilis ini, lihat postingan blog Android Studio Bumblebee Patch 2.

7.1.1 (Februari 2022)

Update minor ini berkaitan dengan rilis Android Studio Bumblebee Patch 1.

Untuk melihat daftar perbaikan bug yang disertakan dalam rilis ini, lihat postingan blog Android Studio Bumblebee Patch 1.

Kompatibilitas

Versi minimum Versi default
Gradle 7.2 7.2
SDK Build Tools 30.0.3 30.0.3
NDK T/A 21.4.7075529
JDK 11 11

Tugas analisis lint kini dapat di-cache

AndroidLintAnalysisTask kini kompatibel dengan cache build Gradle. Jika Anda mengaktifkan cache build dengan menetapkan org.gradle.caching=true dalam file gradle.properties, tugas analisis lint akan mendapatkan outputnya dari cache build jika memungkinkan.

Tugas analisis lint sering kali menjadi bottleneck terbesar saat menjalankan lint dengan plugin Android Gradle, sehingga mengaktifkan cache build akan meningkatkan kecepatan build saat menjalankan lint dalam banyak situasi. Anda akan melihat peningkatan performa yang signifikan, misalnya, jika Anda memiliki project multi-modul dan membersihkan direktori build sebelum menjalankan lint di server CI.

Modul C/C++ sekarang dapat mereferensikan modul C/C++ lain dalam project yang sama

Modul Android Gradle dengan kode C/C++ kini dapat disiapkan untuk mereferensikan file header dan kode library dalam modul Gradle lainnya. Protokol Prefab digunakan untuk mengomunikasikan header dan library antar-modul Gradle.

Persyaratan

  • Modul pengguna harus CMake dan bukan ndk-build. Dukungan untuk ndk-build akan memerlukan update NDK di masa mendatang. Modul publikasi dapat berupa CMake atau ndk-build.

  • Modul pengguna harus mengaktifkan prefab dalam file build.gradle.

android {
  buildFeatures {
    prefab true
  }
}
  • Modul publikasi harus mengaktifkan prefabPublishing dalam file build.gradle.
android {
  buildFeatures {
    prefabPublishing true
  }
}
  • Modul pengguna harus merujuk modul publikasi dengan menambahkan baris di blok dependencies file build.gradle. Contoh:
dependencies {
  implementation project(':mylibrary')
}
  • Modul publikasi harus mengekspos paket menggunakan bagian prefab. Contoh:
android {
  prefab {
    mylibrary {
      libraryName "libmylibrary"
      headers "src/main/cpp/include"
    }
  }
}
  • File CMakeLists.txt modul pengguna mungkin menggunakan find_package() untuk menemukan paket yang dipublikasikan oleh modul penghasil. Contoh:
find_package(mylibrary REQUIRED CONFIG)
target_link_libraries(
  myapplication
  mylibrary::mylibrary)
   android {
      defaultConfig {
        externalNativeBuild {
          cmake {
            arguments '-DANDROID_STL=c++_shared'
          }
        }
      }
    }

Untuk penjelasan lebih lanjut tentang cara mengonfigurasi konsumen dan produsen AAR native dengan AGP, lihat Dependensi native dengan AGP.

Setelan repositori dalam file settings.gradle

Saat project baru dibuat di Android Studio Bumblebee, file build.gradle level atas berisi blok plugins, diikuti dengan kode untuk membersihkan direktori build Anda:

plugins {
    id 'com.android.application' version '7.1.0-beta02' apply false
    id 'com.android.library' version '7.1.0-beta02' apply false
    id 'org.jetbrains.kotlin.android' version '1.5.30' apply false
}
task clean(type: Delete) {
  delete rootProject.buildDir
}

Setelan repositori yang sebelumnya berada di file build.gradle level atas sekarang berada di file settings.gradle:

pluginManagement {
  repositories {
    gradlePluginPortal()
    google()
    mavenCentral()
  }
}
dependencyResolutionManagement {
  repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
  repositories {
    google()
    mavenCentral()
  }
}
rootProject.name = 'GradleManagedDeviceTestingNew'
include ':app'

File build.gradle level modul tidak berubah. Jadi, gunakan file build.gradle tingkat atas dan file settings.gradle untuk menentukan konfigurasi build yang berlaku untuk semua modul dalam project Anda, atau repositori dan dependensi yang berlaku untuk Gradle itu sendiri. Gunakan file build.gradle level modul untuk menentukan konfigurasi build yang spesifik untuk modul tertentu dalam project Anda.

Penyingkat resource yang ditingkatkan

Android Studio Bumblebee menyertakan penyingkat resource yang ditingkatkan, yang membantu mengurangi ukuran aplikasi.

Dukungan untuk aplikasi dengan fitur dinamis

Implementasi default penyingkat resource Android telah diupdate di Plugin Android Gradle 7.1.0-alpha09. Implementasi baru ini mendukung penyingkatan aplikasi dengan fitur dinamis.

Pengurangan ukuran aplikasi lebih lanjut eksperimental

Implementasi penyingkat resource baru ini dapat mengurangi lebih banyak lagi ukuran aplikasi Anda yang menyusut dengan memodifikasi tabel resource untuk menghapus resource dan referensi nilai yang tidak terpakai ke resource file yang tidak digunakan. Penyingkat resource baru dapat menghapus sepenuhnya resource file yang tidak terpakai, sehingga lebih banyak lagi mengurangi ukuran aplikasi Anda. Perilaku ini belum diaktifkan secara default, tetapi Anda dapat memilih untuk mencobanya dengan menambahkan opsi eksperimental android.experimental.enableNewResourceShrinker.preciseShrinking=true ke file gradle.properties project Anda.

Silakan laporkan masalah apa pun yang Anda temukan terkait penyingkat resource baru atau flag eksperimental. Untuk membantu mendiagnosis masalah, atau sebagai solusi sementara, Anda dapat beralih kembali ke implementasi sebelumnya dengan menambahkan android.enableNewResourceShrinker=false ke gradle.properties project Anda. Penyingkat baru akan menggantikan resource berbasis file yang tidak digunakan dengan file minimal yang sedikit berbeda dari penyingkat resource sebelumnya, tetapi hal ini diharapkan tidak memiliki dampak runtime apa pun.

Implementasi lama dijadwalkan akan dihapus di plugin Android Gradle 8.0.0.

Publikasi varian build

Plugin Android Gradle 7.1.0 dan yang lebih tinggi memungkinkan Anda mengonfigurasi varian build yang akan dipublikasikan ke repositori Maven Apache. AGP membuat komponen dengan satu atau beberapa varian build berdasarkan DSL publikasi baru, yang dapat Anda gunakan untuk menyesuaikan publikasi ke repositori Maven. Dibandingkan versi sebelumnya, tindakan ini juga menghindari pekerjaan yang tidak perlu, karena tidak ada komponen yang akan dibuat secara default. Untuk mempelajari lebih lanjut, lihat contoh kode publikasi.

Memublikasikan Javadoc JAR

AGP 7.1.0 dan yang lebih tinggi memungkinkan Anda menghasilkan Javadoc dari sumber Java dan Kotlin serta memublikasikan file JAR Javadoc selain AAR untuk project library. Javadoc ditambahkan ke file POM dan Metadata Modul Gradle{:.external}. Aktifkan fitur ini dengan menambahkan withJavadocJar() di blok publikasi singleVariant atau multipleVariants. Untuk mempelajari lebih lanjut, lihat contoh kode opsi publikasi.

Memublikasikan sumber JAR

AGP 7.1.0 dan yang lebih tinggi memungkinkan Anda memublikasikan file JAR sumber Java dan Kotlin selain AAR untuk project library. Sumber tersebut ditambahkan ke file POM dan Metadata Modul Gradle{:.external}. Anda dapat mengaktifkan fitur ini dengan menambahkan withSourcesJar() di blok publikasi singleVariant atau multipleVariants. Untuk mempelajari lebih lanjut, lihat contoh kode opsi publikasi.

Perubahan semantik pemblokiran lint

Semua metode lint yang mengganti tingkat keparahan masalah yang diberikan —enable, disable/ignore, informational, warning, error, fatal—kini mematuhi urutan konfigurasi. Misalnya, menetapkan masalah sebagai fatal dalam finalizeDsl() kini akan menggantikan penonaktifannya dalam DSL utama. Untuk mengetahui informasi selengkapnya, lihat dokumen referensi blok lint{} dan alur build serta titik ekstensi Android.

AGP API yang menjadi dependensi plugin Gradle Navigation Safe Args telah dihapus. AGP 7.1 tidak berfungsi dengan Navigation Safe Args versi 2.4.0-rc1 atau 2.4.0, tetapi akan berfungsi dengan versi 2.5.0-alpha01 dan 2.4.1. Sementara itu, sebagai solusinya, Anda dapat menggunakan AGP 7.1 dengan build snapshot Navigation Safe Args, Navigation 2.5.0-SNAPSHOT. Untuk menggunakan build snapshot, ikuti petunjuk snapshot dengan ID build #8054565.

Selain itu, Navigation Safe Args versi 2.4.1 dan 2.5.0 tidak akan berfungsi lagi dengan AGP 4.2. Untuk menggunakan Safe Args versi tersebut, Anda harus menggunakan AGP 7.0 dan yang lebih tinggi.

Menonaktifkan pembuatan komponen otomatis

Mulai AGP 8.0, pembuatan komponen otomatis akan dinonaktifkan secara default. Saat ini, AGP 7.1 otomatis membuat komponen untuk setiap varian build, yang memiliki nama yang sama dengan varian build, dan komponen all yang berisi semua varian build. Pembuatan komponen otomatis ini akan dinonaktifkan. Untuk bertransisi ke perilaku baru, Anda harus menonaktifkan pembuatan komponen otomatis secara manual dengan menetapkan android.disableAutomaticComponentCreation ke true.. Untuk mengetahui informasi selengkapnya, lihat Menggunakan plugin Maven Publish.

Kompatibilitas Firebase Performance Monitoring

AGP 7.1 tidak kompatibel dengan plugin Gradle Firebase Performance Monitoring versi 1.4.0 dan yang lebih rendah. Upgrade Assistant AGP tidak akan otomatis mengupdate plugin ke versi 1.4.1, jadi jika menggunakan firebase-perf dan ingin mengupgrade AGP ke 7.1, Anda harus melakukan upgrade khusus ini secara manual.

Masalah umum

Bagian ini menjelaskan masalah umum yang ada di plugin Android Gradle 7.1.0.

Masalah saat menguji unit project aplikasi yang menggunakan plugin Hilt

Classpath pengujian unit berisi class aplikasi yang tidak diinstrumentasi, yang berarti Hilt tidak menginstrumentasi class aplikasi untuk menangani injeksi dependensi saat menjalankan pengujian unit.

Masalah ini akan diperbaiki dengan rilis 7.1.1. Lihat masalah #213534628.