Çok sayıda modül içeren projelerde, net bir proje yapısını korumaya çalışırken Android kitaplıklarını kullanıcılarınıza dağıtmak zor olabilir. Çoğu durumda, amaçlanandan çok daha fazla kitaplığın yayınlanması gerekir.
Android Gradle eklentisiyle birlikte gelen Fused Library eklentisi, birden fazla Android kitaplık modülünü tek bir yayınlanabilir Android kitaplığına paketlemeye yardımcı olur. Bu sayede, kitaplığınızın kaynak kodunu ve kaynaklarını derlemenizde istediğiniz gibi modüler hale getirebilir, dağıtıldıktan sonra projenizin yapısının açığa çıkmasını önleyebilirsiniz.
Tek bir kitaplık olarak dağıtmanın aşağıdaki avantajları olabilir:
- Basitleştirilmiş bağımlılıklar: Birden fazla kitaplık bağımlılığını tek bir AAR ile değiştirerek kullanıcılarınız için proje kurulumunu ve sürüm yönetimini kolaylaştırır.
- Kitaplık boyutunun küçültülmesi: Kod daraltmayı iyileştirerek daha küçük AAR'ler elde edilmesini sağlayabilir.
- Gelişmiş güvenlik: Yayınlanan kitaplıkların dahili uygulama ayrıntıları üzerinde daha iyi kontrol sağlayabilir.
Birleştirilmiş kitaplık oluşturma
Birleştirilmiş kitaplık oluşturmak için yeni bir Android modülü oluşturmanız, bağımlılıkları eklemeniz ve ardından birleştirilmiş kitaplığı yayınlamanız gerekir.
Yeni bir birleştirilmiş kitaplık modülü ekleme
Eklentiyi kullanmak için projenize yeni bir Android modülü eklemeniz gerekir:
Bu örnekte, birleştirilmiş kitaplık modülüne myFusedLibrary
adı verilecek.
gradle.properties
dosyasınaandroid.experimental.fusedLibrarySupport=true
ekleyerek birleştirilmiş kitaplık desteğini etkinleştirin.include(":myFusedLibrary")
adlı alanısettings.gradle.kts
dosyasına ekleyin.gradle/libs.versions.toml
dosyasındaki[plugins]
bölümünün altınaandroid-fusedlibrary = { id = "com.android.fused-library", version.ref = "agp" }
ekleyin.- Üst düzey
build.gradle.kts
dosyasındaki eklentiler bloğunaalias(libs.plugins.android.fusedlibrary) apply false
simgesini ekleyin. myFusedLibrary
modülünü oluşturmak içinmyFusedLibrary
adlı yeni bir dizin oluşturun (My Application'ı sağ tıklayın > New > Directory).build.gradle.kts
modülündemyFusedLibrary
dosyası oluşturun (myFusedLibrary
modülünü sağ tıklayın > Yeni > Dosya).- Aşağıdaki kodu
myFusedLibrary/build.gradle.kts
dosyasına yapıştırın:
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 { }
Bağımlılık ekleme
Birleştirilmiş kitaplığın temel işlevi, bağımlılıkları paketlemektir. Eklenti, yerel proje bağımlılıklarının ve harici kitaplıkların eklenmesini destekler.
Paketlenecek bağımlılıkları belirtmek için include
yapılandırmasını kullanın.
Geçişli bağımlılıklar paketlenmez.
Örneğin:
Kotlin
dependencies { include(project(":image-rendering")) include("mycoolfonts:font-wingdings:5.0") }
Groovy
dependencies { include project(':image-rendering') include 'mycoolfonts:font-wingdings:5.0' }
Birleştirilmiş kitaplığınızı yayınlama
Birleştirilmiş kitaplık yayınlamadan önce Android kitaplığı yayınlama hakkında bilgi edinmeniz gerekir. Birleştirilmiş kitaplık yayınlamak, Android kitaplığı yayınlamaya benzer. Ancak birleştirilmiş kitaplığı doğru şekilde yayınlamak için dikkate almanız gereken bazı önemli farklılıklar vardır:
- Maven Publish Plugin, FusedLibrary eklentisinin uygulandığı tüm modüllere de uygulanmalıdır.
- Yayın,
fusedLibraryComponent
öğesinden devralmalıdır. Çünkü bu, birleştirilmiş kitaplık yapısını derlemek için gereken bağımlılıkları sağlar.
Yayın yapılandırması örneğini aşağıda görebilirsiniz:
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 } } }
Test için birleştirilmiş kitaplığınızı yayınlama
Bir Android uygulamasından veya Android kitaplığından yayınlanmış birleştirilmiş kitaplığa bağlı olarak test yapmanız gerekir. Önerilen yöntem, birleştirilmiş kitaplığı ve proje bağımlılıklarını yerel bir Maven deposunda yayınlamaktır.
Birleştirilmiş kitaplık yapılarını yerel bir depoda yayınlamak için aşağıdakine benzer bir yapılandırma tanımlayın:
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') } }
Birleştirilmiş kitaplığınızı yükleme
Birleştirilmiş kitaplığınızı dağıtmak için Kitaplığınızı yükleme başlıklı makaleyi inceleyin.
Davranış ve güvenlik önlemleri
Android kitaplıklarını birleştirme işlemi, eklentinin öncelikler hakkında akıl yürütmesini zorlaştırabilecek karmaşık özellikler içerir. Örneğin, aynı sınıf yoluna sahip iki kitaplık, kitaplık birleştirilirken derleme hatasına neden olur. Kaynak birleştirme, farklı kitaplıklarda aynı ada sahip bir kaynak seçilirken belirtilen bağımlılıkların sırasını dikkate alır.
- Bir bağımlı kaynak olarak eklenebilmesi için birleştirilmiş kitaplıklar yalnızca Android kitaplık artefaktı AAR olarak yayınlanabilir.
- Veri bağlama kullanan kitaplıkların birleştirilmesi desteklenmez.
- Tek bir birleştirilmiş kitaplıkta birden fazla derleme türünü ve ürün çeşidini birleştiremezsiniz. Farklı varyantlar için ayrı birleştirilmiş kitaplıklar oluşturun.
Gerekli yapılandırma miktarı ile kullanım kolaylığı arasında denge kurmak için eklenti, belirsiz çakışmalarda derlemeyi başarısız kılar veya yapay nesneleri birleştirirken sezgisel yöntemler kullanır. Yapıların nasıl birleştirildiğiyle ilgili ayrıntılar aşağıdaki tabloda verilmiştir:
Tür | Davranış |
---|---|
Sınıflar | Aynı sınıf yoluna sahip kitaplıklar, kitaplık birleştirilirken derleme hatasına neden olur. |
Android Kaynakları | Kaynak birleştirme, farklı birimlerde aynı ada sahip bir kaynak seçilirken belirtilen bağımlılıkların sırasını dikkate alır. |
AAR meta verileri | AAR meta veri sürümleri, her bağımlılık kitaplığındaki en yüksek değere öncelik verilerek birleştirilir. Bu değerleri geçersiz kılmak için bir DSL sağlanır. KotlinandroidFusedLibrary { aarMetadata { minCompileSdk = 21 minCompileSdkExtension = 1 } } |
Java Kaynakları | Aynı yollara sahip birden fazla kitaplıktaki Java kaynak dosyalarına izin verilmez ve bu durum derleme hatasına neden olur. |
Bilinen sorunlar
Fused Library yeni bir eklentidir ve tüm kullanım alanlarını karşılamak için üzerinde çalışılan bilinen sorunlar vardır.
- Kaynak JAR dosyaları oluşturulamıyor
- Diğer .aar dosyalarına dosya bağımlılıkları ekleme
- RenderScript ve Prefab yapılarını birleştirme desteği yok
Birleştirilmiş kitaplığın bağımlılıklarını anlama
Birleştirilmiş kitaplığın kaynakları yoktur ve tek kaynak olarak Android kitaplıklarını etkili bir şekilde kullanır. Bu nedenle, neyin nereden geldiğini anlamak önemlidir. Sonuçta ortaya çıkan yapıtla birleştirilen bağımlılıkları ve yapıtı oluşturmak için gereken bağımlılıkları listelemek üzere birleştirilmiş kitaplıkta gradle :report
görevini çalıştırın. Görevler, birleştirilmiş kitaplığın build/reports
dizinine kaydedilen bir JSON raporu oluşturur.
Dahili eklenti bağımlılıklarıyla ilgili ek bilgiler için eklenti yapılandırmalarının durumunu görüntülemek üzere gradle :dependencies
görevini çalıştırın.