Dalam project dengan banyak modul, mendistribusikan Library Android kepada pengguna dapat menjadi tantangan sekaligus mencoba mempertahankan struktur project yang jelas. Dalam banyak kasus, lebih banyak library yang perlu dipublikasikan daripada yang diinginkan.
Plugin Library Gabungan yang dipaketkan dengan Plugin Android Gradle membantu mengemas beberapa modul Library Android menjadi satu Library Android yang dapat dipublikasikan. Hal ini memungkinkan Anda memodularisasi kode sumber dan resource library dalam build sesuai keinginan, sekaligus menghindari eksposur struktur project setelah didistribusikan.
Mendistribusikan sebagai satu library dapat memiliki manfaat berikut:
- Dependensi yang disederhanakan: mengganti beberapa dependensi library dengan satu AAR, sehingga menyederhanakan penyiapan project dan pengelolaan versi untuk pengguna
- Mengurangi ukuran library: dapat meningkatkan penyingkatan kode, sehingga menghasilkan AAR yang lebih kecil
- Keamanan yang ditingkatkan: dapat menawarkan kontrol yang lebih baik atas detail implementasi internal library yang dipublikasikan
Membuat library gabungan
Untuk mem-build library gabungan, Anda harus membuat modul Android baru, menambahkan dependensi, lalu memublikasikan library gabungan.
Menambahkan modul library gabungan baru
Untuk menggunakan plugin, Anda harus menambahkan modul Android baru ke project:
Dalam contoh ini, modul library gabungan akan disebut myFusedLibrary
.
- Aktifkan dukungan library gabungan dengan menambahkan
android.experimental.fusedLibrarySupport=true
ke filegradle.properties
. - Tambahkan
include(":myFusedLibrary")
ke filesettings.gradle.kts
. - Tambahkan
android-fusedlibrary = { id = "com.android.fused-library", version.ref = "agp" }
di bagian[plugins]
dalam filegradle/libs.versions.toml
. - Tambahkan
alias(libs.plugins.android.fusedlibrary) apply false
di blok plugin dalam filebuild.gradle.kts
level teratas. - Untuk membuat modul
myFusedLibrary
, buat direktori baru bernamamyFusedLibrary
(klik kanan 'My Application' > New > Directory). - Buat file
build.gradle.kts
di modulmyFusedLibrary
(klik kanan modulmyFusedLibrary
> New > File). - Tempelkan kode berikut ke dalam file
myFusedLibrary/build.gradle.kts
:
Kotlin
plugins { alias(libs.plugins.android.fusedlibrary) `maven-publish` } androidFusedLibrary { namespace = "com.example.myFusedLibrary" minSdk = 21 } dependencies { }
Groovy
plugins { id 'fused-library' } androidFusedLibrary { namespace 'com.example.myFusedLibrary' minSdk 21 } dependencies { }
Menambahkan dependensi
Fungsi inti library gabungan adalah memaketkan dependensi. Plugin
ini mendukung penambahan dependensi project lokal dan library eksternal.
Untuk menentukan dependensi yang akan dipaketkan, gunakan konfigurasi include
.
Dependensi transitif tidak dipaketkan.
Contoh:
Kotlin
dependencies { include(project(":image-rendering")) include("mycoolfonts:font-wingdings:5.0") }
Groovy
dependencies { include project(':image-rendering') include 'mycoolfonts:font-wingdings:5.0' }
Memublikasikan library gabungan
Anda harus memahami cara memublikasikan library Android sebelum memublikasikan library gabungan. Memublikasikan library gabungan mirip dengan memublikasikan Library Android, tetapi ada beberapa perbedaan utama yang harus Anda pertimbangkan untuk memublikasikan library gabungan dengan benar:
- Plugin Maven Publish juga harus diterapkan ke modul apa pun yang telah menerapkan plugin Library Gabungan.
- Publikasi harus mewarisi dari
fusedLibraryComponent
karena hal ini menyediakan dependensi yang diperlukan untuk mengompilasi artefak library gabungan.
Berikut adalah contoh konfigurasi publikasi:
Kotlin
plugins { alias(libs.plugins.android.fusedlibrary) `maven-publish` } androidFusedLibrary { … } dependencies { … } publishing { publications { register<MavenPublication>("release") { groupId = "my-company" artifactId = "my-fused-library" version = "1.0" from(components["fusedLibraryComponent"]) } } }
Groovy
plugins { id 'fused-library' id 'maven-publish' } androidFusedLibrary { … } dependencies { … } publishing { publications { release(MavenPublication) { groupId = "my-company" artifactId = "my-fused-library" version = "1.0" afterEvaluate { from components.fusedLibraryComponent } } }
Memublikasikan library gabungan untuk pengujian
Anda harus menguji bergantung pada library gabungan yang dipublikasikan dari aplikasi Android atau library Android. Metode yang direkomendasikan adalah memublikasikan ke library gabungan dan dependensi project-nya ke repositori Maven lokal.
Untuk memublikasikan artefak library gabungan ke repositori lokal, tentukan konfigurasi yang mirip dengan berikut:
Kotlin
plugins { alias(libs.plugins.android.fusedlibrary) `maven-publish` } repositories { maven { name = "myLocalRepo" url = uri(layout.buildDirectory.dir("myLocalRepo")) } }
Groovy
plugins { id 'fused-library' id 'maven-publish' } repositories { maven { name 'myLocalRepo' url layout.buildDirectory.dir('myLocalRepo') } }
Mengupload library gabungan
Untuk mendistribusikan library gabungan, lihat Mengupload library.
Perilaku dan pengamanan
Menggabungkan Library Android memiliki kerumitan yang dapat menyulitkan plugin untuk memahami prioritas. Misalnya, dua library dengan classpath yang sama akan menyebabkan kegagalan build saat menggabungkan library. Penggabungan resource akan mempertimbangkan urutan dependensi yang ditentukan saat memilih resource dengan nama yang sama di library yang berbeda.
- Library gabungan hanya dapat dipublikasikan sebagai AAR artefak library Android agar dapat ditambahkan sebagai dependensi.
- Penggabungan library yang menggunakan data binding tidak didukung.
- Anda tidak dapat menggabungkan beberapa jenis build dan ragam produk dalam satu library gabungan. Buat library gabungan terpisah untuk varian yang berbeda.
Untuk menyeimbangkan jumlah konfigurasi yang diperlukan dan kemudahan penggunaan, plugin akan membuat build gagal karena konflik yang ambigu atau menggunakan heuristik saat menggabungkan artefak. Detail cara artefak digabungkan dapat ditemukan di tabel berikut:
Jenis | Perilaku |
---|---|
Class | Library dengan classpath yang sama akan menyebabkan kegagalan build saat menggabungkan library. |
Sumber Daya Android | Penggabungan resource akan mempertimbangkan urutan dependensi yang ditentukan saat memilih resource dengan nama yang sama di tempat yang berbeda. |
Metadata AAR | Versi metadata AAR digabungkan dengan memprioritaskan nilai tertinggi dari setiap library dependensi. Ada DSL yang disediakan untuk mengganti nilai ini. KotlinandroidFusedLibrary { aarMetadata { minCompileSdk = 21 minCompileSdkExtension = 1 } } |
Resource Java | File resource Java di beberapa library dengan jalur yang sama tidak diizinkan dan akan menyebabkan kegagalan build. |
Masalah umum
Library Gabungan adalah plugin baru dan ada masalah umum yang sedang ditangani untuk memenuhi semua kasus penggunaan.
- File
lint.jar
tidak disertakan dalam AAR gabungan - Menambahkan dependensi file pada file .aar lainnya
- Tidak ada dukungan untuk menggabungkan artefak RenderScript dan Prefab
Memahami dependensi library gabungan
Library gabungan tidak memiliki sumber dan secara efektif menggunakan library Android
sebagai satu-satunya sumbernya. Oleh karena itu, penting untuk memahami asal-usulnya. Untuk mencantumkan
dependensi yang digabungkan ke dalam artefak yang dihasilkan dan
dependensi yang diperlukan untuk mem-build artefak, jalankan tugas gradle :report
di
library yang digabungkan. Tugas ini menghasilkan laporan JSON yang disimpan di
direktori build/reports
library gabungan.
Untuk informasi tambahan terkait dependensi plugin internal, jalankan
tugas gradle :dependencies
untuk melihat status konfigurasi plugin.