Android kitaplığı yapısal olarak Android uygulama modülüyle aynıdır. Kaynak kodu, kaynak dosyaları ve Android manifesti dahil olmak üzere bir uygulama oluşturmak için gereken her şeyi içerir.
Ancak Android kitaplığı, cihazda çalışan bir APK'da derleme yapmak yerine Android uygulama modülünün bağımlılığı olarak kullanabileceğiniz bir Android Arşivi (AAR) dosyasında derlenir. JAR dosyalarının aksine AAR dosyaları, Android uygulamaları için aşağıdaki işlevleri sunar:
- AAR dosyaları, Android kaynakları ve bir manifest dosyası içerebilir. Bu dosya, Kotlin veya Java sınıfları ve yöntemlerine ek olarak düzenler ve çekilebilir öğeler gibi paylaşılan kaynakları birleştirmenize olanak tanır.
- AAR dosyaları, uygulama modülünün C/C++ kodu tarafından kullanılmak üzere C/C++ kitaplıkları içerebilir.
Kitaplık modülü aşağıdaki durumlarda yararlıdır:
- Etkinlikler, hizmetler veya kullanıcı arayüzü düzenleri gibi aynı bileşenleri kullanan birden fazla uygulama derlerken
- Temel bileşenleri paylaşan, ücretsiz ve ücretli sürüm gibi birden fazla APK varyasyonunda bulunan bir uygulama geliştirirken
Her iki durumda da yeniden kullanmak istediğiniz dosyaları bir kitaplık modülüne taşıyın ve ardından kitaplığı her bir uygulama modülü için bağımlılık olarak ekleyin.
Bu sayfada, Android kitaplık modülünün nasıl oluşturulacağı ve kullanılacağı açıklanmaktadır. Kitaplık yayınlama konusunda yardım için Kitaplığınızı yayınlama bölümüne bakın.
Kitaplık modülü oluşturma
Projenizde yeni bir kitaplık modülü oluşturmak için aşağıdaki adımları uygulayın:
- Dosya > Yeni > Yeni Modül'ü tıklayın.
- Açılan Yeni Modül Oluştur iletişim kutusunda Android Kitaplığı'nı ve ardından İleri'yi tıklayın.
Ayrıca, geleneksel bir JAR dosyası oluşturan bir Kotlin veya Java kitaplığı oluşturma seçeneğiniz de vardır. JAR dosyaları birçok projede (özellikle de diğer platformlarla kod paylaşmak istediğinizde) kullanışlı olsa da Android kaynakları veya manifest dosyaları eklemenize izin vermez. Bunlar, Android projelerinde kodların yeniden kullanımı için oldukça kullanışlıdır. Bu kılavuz, Android kitaplıkları oluşturmaya odaklanmaktadır.
- Kitaplığınıza bir ad verin ve kitaplıktaki kod için minimum SDK sürümü seçin, ardından Son'u tıklayın.
Gradle proje senkronizasyonu tamamlandıktan sonra, kitaplık modülü Proje bölmesinde görünür. Yeni modül klasörünü görmüyorsanız bölmede Android görünümünün gösterildiğinden emin olun.
Uygulama modülünü kitaplık modülüne dönüştürme
Yeniden kullanmak istediğiniz kod içeren mevcut bir uygulama modülünüz varsa bunu aşağıdaki şekilde kitaplık modülüne dönüştürebilirsiniz:
- Groovy kullanıyorsanız modül düzeyindeki
build.gradle
dosyasını, Kotlin komut dosyası kullanıyorsanızbuild.gradle.kts
dosyasını açın. applicationId
hattını silin. Bunu yalnızca bir Android uygulama modülü tanımlayabilir.- Dosyanın üst kısmında bulunan "plugins" bloğunu bulun. Bu blok aşağıdaki gibi görünür:
Modern
plugins { id 'com.android.application' }
Kotlin
plugins { id("com.android.application") }
Bunu aşağıdaki şekilde değiştirin:
Modern
plugins { id 'com.android.library' }
Kotlin
plugins { id("com.android.library") }
- Dosyayı kaydedin ve File > Sync Project with Gradle Files'ı (Dosya > Projeyi Gradle Dosyalarıyla Senkronize Et) tıklayın.
Modülün yapısı değişmemiştir ancak şu anda bir Android kitaplığı olarak çalışmaktadır. Derleme, APK yerine bir AAR dosyası oluşturur.
AAR dosyasını oluşturmak istediğinizde, Proje penceresinde kitaplık modülünü seçin ve Oluştur > APK Derleme'yi tıklayın.
Proje Yapısı iletişim kutusunu kullanarak bağımlılık ekleyin
Projenize bağımlılık eklemek için Proje Yapısı iletişim kutusunu kullanabilirsiniz. Aşağıdaki bölümlerde, bağımlılık eklemek için iletişim kutusunun nasıl kullanılacağı açıklanmaktadır.
Kitaplığınızı aynı proje içinde kullanma
Yeni Android kitaplığınızın kodunu aynı proje içindeki başka bir uygulamada veya kitaplık modülünde kullanmak için proje düzeyinde bağımlılık ekleyin:
- Dosya > Proje Yapısı > Bağımlılıklar'a gidin.
- Kitaplığı eklemek istediğiniz modülü seçin.
- Bildirilen Bağımlılıklar sekmesinde
simgesini tıklayıp menüden Modül Bağımlılığı'nı seçin.
Modül Bağımlılığı Ekle iletişim kutusunda kitaplık modülünüzü seçin.
Bu bağımlılığı gerektiren yapılandırmayı seçin veya tüm yapılandırmalar için geçerliyse uygulama'yı seçip Tamam'ı tıklayın.
Android Studio, bağımlılığı eklemek için modülünüzün build.gradle
veya build.gradle.kts
dosyasını aşağıdaki biçimde düzenler:
Modern
implementation project(path: ":example-library")
Kotlin
implementation(project(":example-library"))
Kitaplığınızı başka projelerde kullanma
Bağımlılıkları (JAR'lar ve AAR'ler) paylaşmanın önerilen yolu, Maven Central gibi bir hizmette barındırılan bir Maven deposu veya yerel diskinizdeki bir dizin yapısı ile kullanmaktır. Maven depolarını kullanma hakkında daha fazla bilgi için Uzak depolar bölümüne bakın.
Bir Maven deposunda Android kitaplığı yayınlandığında, kitaplık bağımlılıklarının tüketen derlemeye dahil edilmesi için meta veriler dahil edilir. Bu, kitaplığın birden fazla yerde kullanılması durumunda otomatik olarak tekilleştirilmesini sağlar.
Android kitaplığınızın kodunu farklı bir projedeki başka bir uygulama modülünde kullanmak için aşağıdaki adımları uygulayın:
- Dosya > Proje Yapısı > Bağımlılıklar'a gidin.
- Bildirilen Bağımlılıklar sekmesinde
simgesini tıklayıp menüden Kitaplık Bağımlılığı'nı seçin.
Kitaplık Bağımlılığı Ekle iletişim kutusunda, arama kutusunu kullanarak eklenecek kitaplığı bulun. Bu form,
settings.gradle
veyasettings.gradle.kts
dosyasındakidependencyResolutionManagement { repositories {...}}
blokunda belirtilen depolarda arama yapar.Bu bağımlılığı gerektiren yapılandırmayı seçin veya tüm yapılandırmalar için geçerliyse uygulama'yı seçip Tamam'ı tıklayın.
Seçtiğiniz derleme yapılandırmasına bağlı olarak aşağıdakine benzer bir bildirimin göründüğünü onaylamak için uygulamanızın build.gradle
veya build.gradle.kts
dosyasını kontrol edin:
Modern
implementation 'com.example:examplelibrary:1.0.0'
Kotlin
implementation("com.example:examplelibrary:1.0.0")
AAR veya JAR'nizi bağımlılık olarak ekleyin
Android kitaplığınızın kodunu başka bir uygulama modülünde kullanmak için aşağıdaki adımları uygulayın:
- Dosya > Proje Yapısı > Bağımlılıklar'a gidin.
- Bildirilen Bağımlılıklar sekmesinde
simgesini tıklayıp menüden Jar Bağımlılığı'nı seçin.
Jar/Aar Bağımlılığı Ekle iletişim kutusunda, AAR veya JAR dosyanızın yolunu girin ve ardından bağımlılığın geçerli olduğu yapılandırmayı seçin. Kitaplığın tüm yapılandırmalar için kullanılabilir olması gerekiyorsa uygulama yapılandırmasını seçin.
Aşağıdakine benzer bir bildirimin göründüğünü onaylamak için (seçtiğiniz derleme yapılandırmasına bağlı olarak) uygulamanızın
build.gradle
veyabuild.gradle.kts
dosyasını kontrol edin:Modern
implementation files('my_path/my_lib.aar')
Kotlin
implementation(files("my_path/my_lib.aar"))
Android Studio dışında çalışan Gradle derlemesine olan bir bağımlılığı içe aktarmak için uygulamanızın build.gradle
veya build.gradle.kts
dosyasına bağımlılığın yolunu ekleyin. Örneğin:
Modern
dependencies { implementation fileTree(dir: "libs", include: ["*.jar", "*.aar"]) }
Kotlin
dependencies { implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar", "*.aar")))) }
Gradle bağımlılıkları ekleme hakkında daha fazla bilgi için Derleme bağımlılıkları ekleme bölümüne bakın.
Herkese açık bir kaynak bildirin
Kaynaklar, projenizin res/
dizinindeki tüm dosyaları (ör. resimler) içerir. Kitaplıktaki tüm kaynaklar varsayılan olarak herkese açıktır. Tüm kaynakları dolaylı olarak gizli hale getirmek için en az bir belirli özelliği herkese açık olarak tanımlamanız gerekir.
Herkese açık kaynak tanımlamak için kitaplığınızın public.xml
dosyasına <public>
bildirimi ekleyin. Daha önce herkese açık kaynaklar eklemediyseniz public.xml
dosyasını kitaplığınızın res/values/
dizininde oluşturmanız gerekir.
Aşağıdaki örnek kod, mylib_app_name
ve mylib_public_string
adlarında iki herkese açık dize kaynağı oluşturur:
<resources> <public name="mylib_app_name" type="string"/> <public name="mylib_public_string" type="string"/> </resources>
Kitaplığınızdaki kullanıcıların yalnızca dahili kullanıma yönelik kaynaklara erişmesini engellemek için bir veya daha fazla herkese açık kaynak bildirerek bu otomatik gizli tanımlama sistemini kullanın. Alternatif olarak boş bir <public />
etiketi ekleyerek tüm kaynakları gizli hale getirebilirsiniz. Bu işlem, hiçbir öğeyi herkese açık olarak işaretlemez ve tüm kaynakları gizli hale getirir.
Kitaplığınızı kullanan geliştiriciler tarafından görünür kalmasını istediğiniz tüm kaynaklar herkese açık hale getirilmelidir.
Özniteliklerin dolaylı olarak gizli yapılması, kitaplığınızın kullanıcılarının dahili kitaplık kaynaklarından kod tamamlama önerileri almasını engeller ve kullanıcıların, kitaplığınızın istemcilerini bozmadan özel kaynakları yeniden adlandırmasına veya kaldırmasına olanak tanır. Özel kaynaklar filtrelenerek kod tamamlamadan çıkarılır. Özel bir kaynağa referansta bulunmaya çalıştığınızda lint aracı sizi uyarır.
Android Gradle eklentisi, kitaplık oluştururken genel kaynak tanımlarını alır ve bunları public.txt
dosyasına çıkarır. Bu dosya, daha sonra AAR dosyası içinde paketlenir.
Kütüphane modüllerinin geliştirilmesinde dikkat edilmesi gereken noktalar
Kitaplık modüllerinizi ve bağımlı uygulamalarınızı geliştirirken aşağıdaki davranışlara ve sınırlamalara dikkat edin.
Kitaplıklar öncelik sırasına göre birleştirilir.
Android uygulama modülünüze kitaplık modüllerine referanslar ekledikten sonra, bunların göreli önceliklerini ayarlayabilirsiniz. Derleme zamanında, kitaplıklar en düşük öncelikten en yükseğe doğru tek tek uygulamayla birleştirilir.
Kaynak birleştirme çakışmalarını önleyin.
Derleme araçları, bir kitaplık modülündeki kaynakları bağımlı bir uygulama modülündeki kaynaklarla birleştirir. Her iki modülde de belirli bir kaynak kimliği tanımlanırsa uygulamadaki kaynak kullanılır.
Birden fazla AAR kitaplığı arasında çakışma olursa bağımlılıklar listesinde ilk sırada (
dependencies
bloğunun en üstüne en yakın) listelenen kitaplıktaki kaynak kullanılır.Kaynak çakışmalarını önlemek için geçişsiz
R
sınıflarını kullanın. Bu mümkün değilse modüle özel (veya tüm proje modüllerinde benzersiz olan) bir önek veya başka bir tutarlı adlandırma şeması kullanabilirsiniz.Çok modüllü derlemelerde JAR bağımlılıkları geçişli bağımlılıklar olarak değerlendirilir.
AAR sağlayan bir kitaplık projesine JAR bağımlılığı eklediğinizde JAR, kitaplık modülü tarafından işlenir ve AAR ile paketlenir.
Bununla birlikte, projenizde uygulama modülü tarafından kullanılan bir kitaplık modülü varsa uygulama modülü, kitaplığın yerel JAR bağımlılığını geçişli bir bağımlılık olarak değerlendirir. Bu durumda, yerel JAR, kitaplık modülü tarafından değil, onu kullanan uygulama modülü tarafından işlenir. Bu da, kitaplığın kodunda yapılan değişikliklerin neden olduğu artımlı derlemeleri hızlandırır.
Yerel JAR bağımlılıklarının neden olduğu Java kaynak çakışmaları, kitaplığı kullanan uygulama modülünde çözülmelidir.
Kitaplık modülü, harici bir JAR kitaplığına bağlı olabilir.
Harici bir kitaplığa dayalı bir kitaplık modülü geliştirebilirsiniz. Bu durumda, bağımlı modül harici kitaplığı içeren bir hedefe göre derleme yapmalıdır.
Hem kitaplık modülünün hem de bağımlı uygulamanın, manifest dosyalarında harici kitaplığı bir
<uses-library>
öğesinde tanımlaması gerektiğini unutmayın.Uygulama modülünün
minSdkVersion
öğesi, kitaplık tarafından tanımlanan sürüme eşit veya bundan daha büyük olmalıdır.Kitaplık, bağımlı uygulama modülünün parçası olarak derlenir. Bu nedenle, kitaplık modülünde kullanılan API'ler, uygulama modülünün desteklediği platform sürümüyle uyumlu olmalıdır.
Her kitaplık modülü kendi
R
sınıfını oluşturur.Bağımlı uygulama modülleri derlediğinizde, kitaplık modülleri bir AAR dosyasında derlenir ve ardından uygulama modülüne eklenir. Bu nedenle, her kitaplığın paket adına göre adlandırılmış kendi
R
sınıfı vardır.Ana modülden ve kitaplık modülünden oluşturulan
R
sınıfı, ana modülün paketi ve kitaplıkların paketleri dahil olmak üzere gerekli olan tüm paketlerde oluşturulur.Kitaplık modülü kendi ProGuard yapılandırma dosyasını içerebilir.
AAR oluşturmak ve yayınlamak için kullandığınız bir kitaplık projeniz varsa kitaplığınızın derleme yapılandırmasına bir ProGuard yapılandırma dosyası ekleyebilirsiniz. Bunu yaparsanız Android Gradle eklentisi, belirttiğiniz ProGuard kurallarını uygular. Derleme araçları, bu dosyayı kitaplık modülü için oluşturulan AAR dosyasına yerleştirir. Kitaplığı bir uygulama modülüne eklediğinizde, kitaplığın ProGuard dosyası uygulama modülünün ProGuard yapılandırma dosyasına (
proguard.txt
) eklenir.Kitaplık modülünüze bir ProGuard dosyası yerleştirerek, kitaplığınıza bağlı olan uygulama modüllerinin, kitaplığınızı kullanmak için ProGuard dosyalarını manuel olarak güncellemek zorunda kalmamalarını sağlarsınız. Android Studio derleme sistemi uygulamanızı derlerken hem uygulama modülündeki hem de kitaplıktaki yönergeleri kullanır. Dolayısıyla kitaplıkta ayrı bir adımda bir kod küçültücü çalıştırmaya gerek yoktur.
ProGuard kurallarını kitaplık projenize eklemek için dosyanızın adını, kitaplığınızın
build.gradle
veyabuild.gradle.kts
dosyasındakidefaultConfig
bloğundakiconsumerProguardFiles
özelliğiyle belirtin.Örneğin, aşağıdaki snippet,
lib-proguard-rules.txt
öğesini kitaplığın ProGuard yapılandırma dosyası olarak ayarlar:Modern
android { defaultConfig { consumerProguardFiles 'lib-proguard-rules.txt' } ... }
Kotlin
android { defaultConfig { consumerProguardFiles("lib-proguard-rules.txt") } ... }
Bununla birlikte, kitaplık modülünüz bir APK'da derlenen çok modüllü bir derlemenin parçasıysa ve bir AAR oluşturmayansa kodu yalnızca kitaplığı tüketen uygulama modülünde çalıştırın. ProGuard kuralları ve kullanımları hakkında daha fazla bilgi edinmek için Uygulamanızı küçültme, gizleme ve optimize etme konulu makaleyi okuyun.
-
Kitaplık modülünün test edilmesi, uygulamanın test edilmesiyle neredeyse aynıdır.
Temel fark, kitaplığın ve bağımlılıklarının otomatik olarak test APK'sının bağımlılıkları olarak dahil edilmesidir. Yani test APK'sı yalnızca kendi kodunu değil, aynı zamanda kitaplığın AAR'sini ve tüm bağımlılıklarını da içerir. Test edilen ayrı bir uygulama olmadığından,
androidTest
görevi yalnızca test APK'sını yükler (ve kaldırır).Gradle, birden fazla manifest dosyasını birleştirirken varsayılan öncelik sırasını uygular ve kitaplığın manifestini, test APK'sının ana manifestiyle birleştirir.
AAR dosyasının anatomisi
AAR dosyasının dosya uzantısı .aar
, Maven yapı türü de aar
şeklindedir. Dosyanın kendisi bir ZIP dosyasıdır. Zorunlu tek giriş /AndroidManifest.xml
.
AAR dosyası, aşağıdaki isteğe bağlı girişlerden birini veya daha fazlasını da içerebilir:
/classes.jar
/res/
/R.txt
/public.txt
/assets/
/libs/name.jar
/jni/abi_name/name.so
(burada abi_name, Android tarafından desteklenen ABI'lerden biridir)/proguard.txt
/lint.jar
/api.jar
- Yerel kitaplıkları dışa aktarmak için
/prefab/