Halaman ini melacak penghentian dan penghapusan API plugin Android Gradle (AGP), serta memberikan info tentang cara memperbarui kode Anda.
Pelacak penghentian dan penghapusan API
Tabel berikut merangkum saat API AGP tidak digunakan lagi dan dihapus, dalam hal versi AGP.
API | Tidak digunakan lagi di versi AGP | Dihapus dari versi AGP |
---|---|---|
Component.setAsmFramesComputationMode |
7.2 | |
Component.transformClassesWith |
7.2 | |
RenderScript | 7.2 | |
Transform | 7.2 | 8.0 |
AGP 8.8
Berikut ini adalah update API yang penting untuk AGP 8.8.
Konfigurasi Resource tidak digunakan lagi
Konfigurasi Resource telah
tidak digunakan lagi mulai AGP 8.8.
Hal ini dilakukan karena AGP tidak lagi mendukung kepadatan resource yang berbeda
dan Konsol Google Play kini mewajibkan aplikasi dipublikasikan sebagai App Bundle.
Untuk konfigurasi bahasa, Anda dapat menentukan
lokalitas yang didukung aplikasi menggunakan DSL localeFilters
untuk memetakan konfigurasi lokalitas ke
resource yang sesuai.
AGP 8.0
Berikut ini adalah update API yang penting untuk AGP 8.0.
Transform API dihapus
Mulai dari AGP 8.0,
Transform
API dihapus. Ini berarti semua class dalam paket
com.android.build.api.transform
dihapus.
Transform API dihapus untuk meningkatkan performa build. Project yang menggunakan Transform API memaksa AGP menggunakan alur yang kurang dioptimalkan untuk build yang dapat menimbulkan regresi besar dalam waktu build. Selain itu, sulit untuk menggunakan Transform API dan menggabungkannya dengan fitur Gradle lainnya; API pengganti bertujuan untuk memperluas AGP tanpa menimbulkan masalah performa atau ketepatan build.
API Pengganti
Tidak ada satu pun pengganti Transform API. Terdapat API baru yang ditargetkan untuk setiap kasus penggunaan. Semua API pengganti berada dalam blok androidComponents
{}
. Semua API ini tersedia pada AGP 7.2.
Dukungan untuk mengubah bytecode
Untuk mengubah bytecode, gunakan Instrumentation API. Untuk library, Anda dapat
mendaftarkan instrumentasi hanya untuk class project lokal; untuk aplikasi dan pengujian,
Anda dapat memilih untuk mendaftarkan instrumentasi hanya untuk class lokal atau semua
class, termasuk dependensi lokal dan jarak jauh. Untuk menggunakan API ini,
instrumentasi berjalan secara independen di setiap class, dengan akses terbatas ke class
lain di classpath (lihat
createClassVisitor()
untuk informasi selengkapnya). Batasan ini meningkatkan performa
build penuh dan inkremental, serta menjaga platform API tetap sederhana. Setiap library
diinstrumentasi secara paralel segera setelah siap, bukan setelah semua
kompilasi selesai. Selain itu, perubahan pada satu class
berarti bahwa hanya class yang terpengaruh yang harus diinstrumentasi kembali dalam build
inkremental. Untuk contoh cara menggunakan Instrumentation API, lihat urutan langkah AGP dalam Mengubah class dengan ASM.
Dukungan untuk menambahkan class yang dihasilkan ke aplikasi Anda
Untuk menambahkan class lain yang dihasilkan ke aplikasi, gunakan
Artifacts
API dengan
MultipleArtifact.ALL_CLASSES_DIRS
.
Secara khusus, gunakan
artifacts.use(TaskProvider)
.wiredWith(...)
.toAppend(Artifact.Multiple)
dengan MultipleArtifact.ALL_CLASSES_DIRS
untuk menambahkan direktori
tambahan yang dihasilkan ke class project. Artifacts API akan secara otomatis memilih
lokasi unik untuk menghasilkan tugas kustom Anda. Lihat
urutan langkah addToAllClasses
untuk contoh cara menggunakan API ini.
Dukungan untuk transformasi berdasarkan keseluruhan analisis program
Untuk menerapkan transformasi berdasarkan keseluruhan analisis program, semua class dapat diubah menjadi satu tugas. Pendekatan ini harus digunakan dengan hati-hati karena memiliki biaya performa build yang jauh lebih tinggi dibandingkan menggunakan Instrumentation API. Jika plugin Anda menggunakan API ini, sebaiknya sertakan transformasi per jenis build, sehingga developer aplikasi dapat menonaktifkannya untuk build pengembangan.
Untuk mendaftarkan tugas yang mengubah semua class secara bersamaan, plugin Android Gradle 7.4
akan memperkenalkan
Artifacts.forScope
API. Untuk mengubah semua class dalam project saat ini, gunakan
Artifacts.forScope.PROJECT
. Untuk mengubah semua class dalam project saat ini,
project yang diimpor, dan semua dependensi eksternal, gunakan Artifacts.forScope.ALL
.
Kode berikut menunjukkan cara menggunakan Artifacts.forScope.ALL
untuk mendaftarkan
tugas yang mengubah semua class secara bersamaan:
variant.artifacts.forScope(ScopedArtifacts.Scope.ALL)
.use(taskProvider)
.toTransform(
ScopedArtifact.CLASSES,
ModifyClassesTask::allJars,
ModifyClassesTask::allDirectories,
ModifyClassesTask::output,
)
Lihat urutan langkah modifyProjectClasses untuk contoh cara menggunakan API ini, dan urutan langkah customizeAgpDsl untuk contoh cara mendaftarkan ekstensi kustom ke jenis build Android.
Jika kasus penggunaan Anda tidak termasuk dalam salah satu cakupan AndroidComponents API, harap laporkan bug.
Beberapa plugin yang umum digunakan telah dimigrasikan untuk menggunakan API baru ini, termasuk plugin Firebase performance monitoring (1.4.1 kompatibel dengan AGP 8.0) dan plugin Gradle Hilt (2.40.1 kompatibel dengan AGP 8.0). Upgrade Assistant AGP juga akan membantu developer project mengupgrade plugin yang umum digunakan sesuai kebutuhan.
Jika Anda menggunakan Transform API melalui plugin pihak ketiga, harap beri tahu penulis bahwa plugin mereka perlu diupdate agar berfungsi dengan API baru untuk AGP 8.0.
AGP 7.2
Berikut ini adalah update API yang penting untuk AGP 7.2.
RenderScript tidak digunakan lagi
Mulai AGP 7.2, RenderScript API tidak digunakan lagi. API tersebut akan terus berfungsi, tetapi akan memanggil peringatan, dan akan dihapus sepenuhnya dalam versi AGP mendatang. Untuk panduan cara beralih dari RenderScript, lihat Bermigrasi dari RenderScript.
Component.transformClassesWith
dan Component.setAsmFramesComputationMode
tidak digunakan lagi
Mulai AGP 7.2, API instrumentasi bytecode class
Component.transformClassesWith
dan
Component.setAsmFramesComputationMode
tidak digunakan lagi. API tersebut telah dipindahkan ke blok baru, Component.instrumentation
, yang
berisi semua API terkait konfigurasi proses instrumentasi. Untuk
terus menggunakan fitur instrumentasi ini, gunakan API yang sesuai dalam
blok baru, seperti yang ditunjukkan oleh cuplikan kode berikut:
androidComponents {
onVariants(selector().all(), {
instrumentation.transformClassesWith(AsmClassVisitorFactoryImpl.class,
InstrumentationScope.Project) { params ->
params.x = "value"
}
instrumentation.setAsmFramesComputationMode(
COMPUTE_FRAMES_FOR_INSTRUMENTED_METHODS
)
})
}