Birçok modülün bulunduğu projelerde, net bir proje yapısı sürdürmeye ç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 sunulan Birleşik Kitaplık eklentisi, birden fazla Android Kitaplığı modülünü tek bir yayınlanabilir Android Kitaplığı'na paketlemenize yardımcı olur. Bu sayede, kitaplığınızın kaynak kodunu ve derlemenizdeki kaynakları dilediğ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.
- Küçük kitaplık boyutu: Kod daraltmayı iyileştirebilir ve daha küçük AAR'lara yol açabilir
- 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ü myFusedLibrary
olarak adlandırılır.
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ında[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ında, eklentiler bloğunaalias(libs.plugins.android.fusedlibrary) apply false
ekleyin. myFusedLibrary
modülü oluşturmak içinmyFusedLibrary
adlı yeni bir dizin oluşturun ("Uygulamam"ı sağ tıklayın > Yeni > Dizin).myFusedLibrary
modülünde birbuild.gradle.kts
dosyası oluşturun (myFusedLibrary
modülünü sağ tıklayın > Yeni > Dosya).- Aşağıdakileri
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ıklar ekleme
Birleştirilmiş kitaplığın temel işlevi, bağımlılıkları gruplandırmaktır. Bu eklenti, yerel proje bağımlılıkları ve harici kitaplıklar eklemeyi 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 Yayınlama Eklentisi, Fused Library eklentisinin uygulandığı tüm modüllere de uygulanmalıdır.
- Yayın, birleştirilmiş kitaplık yapısını derlemek için gereken bağımlılıkları sağladığından
fusedLibraryComponent
öğesinden devralınmalıdır.
Yayın yapılandırması örneğini aşağıda bulabilirsiniz:
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
Android uygulamasından veya Android kitaplığından yayınlanan birleştirilmiş bir kitaplığa göre test yapmanız gerekir. Önerilen yöntem, birleştirilmiş kitaplığı ve proje bağımlılıkları yerel bir Maven deposunda yayınlamaktır.
Birleştirilmiş kitaplık yapılarını yerel bir depoya 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 bölümüne bakın.
Davranış ve önlemler
Android kitaplıklarını birleştirmek, eklentinin öncelikler hakkında mantık yürütmesini zorlaştırabilecek karmaşıklıklara sahiptir. Örneğin, aynı sınıf yolu olan iki kütüphane, kütüphane birleştirilirken derleme hatasına neden olur. Kaynak birleştirme işleminde, farklı kitaplıklarda aynı ada sahip bir kaynak seçilirken belirtilen bağımlılık sırası dikkate alınır.
- Birleştirilmiş kitaplıklar, bağımlı olarak eklenebilmeleri için yalnızca Android kitaplık yapıtı 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ü ve ürün çeşidi 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 sağlamak için eklenti, belirsiz çakışmalarda derlemeyi geçersiz kılar veya yapıları birleştirirken sezgisel yöntemler kullanır. Yapıların nasıl birleştirildiğine dair ayrıntıları aşağıdaki tabloda bulabilirsiniz:
Tür | Davranış |
---|---|
Sınıflar | Aynı sınıf yolu olan kitaplıklar, kitaplık birleştirilirken derleme hatasına neden olur. |
Android Kaynakları | Kaynak birleştirme işlemi, farklı kaynaklarda aynı ada sahip bir kaynak seçilirken belirtilen bağımlılık sırasını dikkate alır. |
AAR Meta Verileri | AAR meta veri sürümleri, her bağımlı kitaplıktaki en yüksek değere öncelik verilerek birleştirilir. Bu değerleri geçersiz kılmak için sağlanan bir DSL vardır. KotlinandroidFusedLibrary { aarMetadata { minCompileSdk = 21 minCompileSdkExtension = 1 } } |
Java Kaynakları | Birden fazla kitaplıkta aynı yola sahip Java kaynak dosyalarına izin verilmez ve bu durum derleme hatasıyla sonuçlanır. |
Bilinen sorunlar
Birleştirilmiş Kitaplık yeni bir eklentidir ve tüm kullanım alanlarını karşılamak için üzerinde çalıştığımız bilinen sorunlar vardır.
lint.jar
dosyaları birleştirilmiş AAR'a dahil edilmez- Diğer .aar dosyalarına dosya bağımlılıkları ekleme
- RenderScript ve Prefab yapılarının birleştirilmesi desteklenmez
Birleştirilmiş kitaplığın bağımlılıkları
Birleştirilmiş kitaplığın kaynağı yoktur ve tek kaynağı olarak Android kitaplıklarını etkili bir şekilde kullanır. Bu nedenle, hangi kaynağın nereden geldiğini anlamanız önemlidir. Sonuçta ortaya çıkan yapıyla birleştirilen bağımlılıkları ve yapıyı 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 bilgi için eklenti yapılandırmalarının durumunu görüntülemek üzere gradle :dependencies
görevini çalıştırın.