Android kitaplığı, yapısal olarak Android uygulama modülüyle aynıdır. Kaynak kodu, kaynak dosyaları ve Android manifesti dahil olmak üzere uygulama derlemek için gereken her şeyi içerir.
Ancak Android kitaplığı, cihazda çalışan bir APK'yı derlemek yerine Android uygulama modülünde bağımlılık olarak kullanabileceğiniz bir Android Arşivi (AAR) dosyası olarak derler. 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. Böylece, Kotlin veya Java sınıflarının ve yöntemlerinin yanı sıra düzenler ve çekilebilir öğeler gibi paylaşılan kaynakları paket halinde sunabilirsiniz.
- 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şenlerin bazılarını kullanan birden fazla uygulama derlarken
- Temel bileşenleri paylaşan, ücretsiz ve ücretli sürümler gibi birden fazla APK varyasyonunda bulunan bir uygulama oluştururken
Her iki durumda da yeniden kullanmak istediğiniz dosyaları bir kitaplık modülüne taşıyın ve kitaplığı, her 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. Bir kitaplığın nasıl yayınlanacağıyla ilgili 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:
- File > New > New Module (Dosya > Yeni > Yeni Modül) seçeneğini tıklayın.
- Yeni Modül Oluştur iletişim kutusunda Android Kitaplığı'nı, ardından İleri'yi tıklayın.
Geleneksel bir JAR dosyası oluşturan Kotlin veya Java kitaplığı da oluşturabilirsiniz. JAR dosyası birçok proje için, özellikle de diğer platformlarla kod paylaşmak istediğinizde faydalı olsa da, Android kaynaklarını veya manifest dosyalarını eklemenize izin vermez. Bu dosyalar, Android projelerinde kodların yeniden kullanımı için son derece faydalıdır. Bu kılavuzda, Android kitaplıkları oluşturmaya odaklanılmıştır.
- Kitaplığınıza bir ad verin ve kitaplıktaki kod için minimum SDK sürümünü seçin, ardından Son'u tıklayın.
Gradle projesi 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 bir uygulama modülünüz varsa bunu aşağıdaki şekilde bir kitaplık modülüne dönüştürebilirsiniz:
- Groovy kullanıyorsanız modül düzeyindeki
build.gradle
dosyasını, Kotlin komut dosyasını kullanıyorsanızbuild.gradle.kts
dosyasını açın. applicationId
satırını silin. Bunu yalnızca bir Android uygulama modülü tanımlayabilir.- Dosyanın üst kısmındaki şuna benzeyen "plugins" bloğunu bulun:
Eski
plugins { id 'com.android.application' }
Kotlin
plugins { id("com.android.application") }
Şu şekilde değiştirin:
Eski
plugins { id 'com.android.library' }
Kotlin
plugins { id("com.android.library") }
- Dosyayı kaydedin ve Dosya > Projeyi Gradle Dosyalarıyla Senkronize Et'i tıklayın.
Modülün yapısı değişmedi ancak artık bir Android kitaplığı olarak çalışıyor. Derleme, APK yerine AAR dosyası oluşturur.
AAR dosyası oluşturmak istediğinizde, Proje penceresinde kitaplık modülünü seçin ve Derleme > APK Derleme'yi tıklayın.
Proje Yapısı iletişim kutusuyla bağımlılık ekleme
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çinden kullanma
Yeni Android kitaplığınızın kodunu aynı projedeki başka bir uygulama 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.
- Tanımlanan Bağımlılıklar sekmesinde simgesini tıklayın ve 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ı veya tüm yapılandırmalar için geçerliyse uygulamayı 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:
Eski
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'lar) paylaşmak için önerilen yöntem, Maven Central gibi bir hizmette veya yerel diskinizdeki bir dizin yapısında barındırılan bir Maven deposu kullanmaktır. Maven depolarını kullanma hakkında daha fazla bilgi için Remote depoları'na bakın.
Maven deposunda Android kitaplığı yayınlandığında, kitaplığın bağımlılıklarının tüketen derlemeye dahil edilmesi için meta veriler dahil edilir. Böylece, kitaplık birden fazla yerde kullanılıyorsa otomatik olarak tekilleştirilebilir.
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.
- Tanımlanan Bağımlılıklar sekmesinde simgesini tıklayın ve menüden Kitaplık Bağımlılığı'nı seçin.
Kitaplık Bağımlılığı Ekle iletişim kutusunda, eklenecek kitaplığı bulmak için arama kutusunu kullanın. Bu form,
settings.gradle
veyasettings.gradle.kts
dosyasındakidependencyResolutionManagement { repositories {...}}
blokunda belirtilen depolarda arama yapar.Bu bağımlılığı gerektiren yapılandırmayı veya tüm yapılandırmalar için geçerliyse uygulamayı seçip Tamam'ı tıklayın.
Aşağıdakine benzer bir beyanın göründüğünü onaylamak için uygulamanızın build.gradle
veya build.gradle.kts
dosyasını kontrol edin (seçtiğiniz derleme yapılandırmasına bağlı olarak):
Eski
implementation 'com.example:examplelibrary:1.0.0'
Kotlin
implementation("com.example:examplelibrary:1.0.0")
AAR veya JAR'ınızı 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.
- Belirtilen Bağımlılıklar sekmesinde simgesini tıklayın ve 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ık tüm yapılandırmalar için kullanılabilir olacaksa uygulama yapılandırmasını seçin.
Aşağıdakine benzer bir bildirimin (seçtiğiniz derleme yapılandırmasına bağlı olarak) göründüğünü onaylamak için uygulamanızın
build.gradle
veyabuild.gradle.kts
dosyasını kontrol edin:Eski
implementation files('my_path/my_lib.aar')
Kotlin
implementation(files("my_path/my_lib.aar"))
Android Studio dışında çalışan Gradle derlemesine 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. Örnek:
Eski
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 kaynağı bildirme
Kaynaklar, projenizin res/
dizinindeki görüntüler gibi tüm dosyaları içerir. Bir kitaplıktaki tüm kaynaklar varsayılan olarak herkese açıktır. Tüm kaynakları dolaylı yoldan gizli hale getirmek için en az bir özelliği herkese açık olarak tanımlamanız gerekir.
Herkese açık bir kaynağı beyan etmek için kitaplığınızın public.xml
dosyasına <public>
bildirimi ekleyin. Daha önce herkese açık kaynak 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
adlı iki ortak dize kaynağı oluşturur:
<resources> <public name="mylib_app_name" type="string"/> <public name="mylib_public_string" type="string"/> </resources>
Kitaplığınızın kullanıcılarının yalnızca şirket içi kullanıma yönelik kaynaklara erişmesini engellemek için bir veya daha fazla herkese açık kaynak beyan ederek bu otomatik özel tanımlama mekanizmasını kullanın. Alternatif olarak, boş bir <public />
etiketi ekleyerek tüm kaynakları gizli hale getirebilirsiniz. Bu işlem, hiçbir içeriği herkese açık olarak işaretlemez ve tüm kaynakları gizli hale getirir.
Kitaplığınızı kullanan geliştiricilerin görebilmesini istediğiniz tüm kaynaklar herkese açık hale getirilmelidir.
Özelliklerin 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. lint aracı, gizli bir kaynağa referansta bulunmaya çalıştığınızda sizi uyarır.
Android Gradle eklentisi bir kitaplık oluştururken genel kaynak tanımlarını alır ve bunları public.txt
dosyasına çıkarır. Daha sonra bu dosya, AAR dosyası içinde paketlenir.
Kütüphane modülleri için geliştirmeyle ilgili dikkat edilmesi gereken noktalar
Kitaplık modüllerinizi ve bağımlı uygulamalarınızı geliştirirken aşağıdaki davranış 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 sırasında kitaplıklar, en düşük öncelikli olandan en yüksek önceliğe sahip olacak şekilde 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. Belirli bir kaynak kimliği her iki modülde de tanımlanmışsa uygulamadaki kaynak kullanılır.
Birden fazla AAR kitaplığı arasında çakışma meydana gelirse bağımlılıklar listesinde ilk sırada listelenen kitaplıktaki (
dependencies
bloğunun en üstüne en yakın) kaynak kullanılır.Kaynak çakışmalarını önlemek için geçişli olmayan
R
sınıflarını kullanın. Bu mümkün değilse modüle özel (veya tüm proje modüllerinde benzersiz) bir ön ek veya başka bir tutarlı adlandırma şeması kullanmayı düşünün.Çok modüllü derlemelerde JAR bağımlılıkları geçişli bağımlılıklar olarak kabul edilir.
AAR üreten 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ü bulunuyorsa uygulama modülü, kitaplığın yerel JAR bağımlılığını geçişli bağımlılık olarak ele alır. Bu durumda yerel JAR, kitaplık modülü tarafından değil, onu kullanan uygulama modülü tarafından işlenir. Bu, kitaplığın kodunda yapılan değişikliklerden kaynaklanan artımlı derlemeleri hızlandırır.
Yerel JAR bağımlılıklarının neden olduğu tüm Java kaynak çakışmaları, kitaplığı kullanan uygulama modülünde çözümlenmelidir.
Kitaplık modülü harici bir JAR kitaplığına bağlı olabilir.
Harici bir kitaplığa bağlı bir kitaplık modülü geliştirebilirsiniz. Bu durumda, bağımlı modülün harici kitaplığı içeren bir hedefe göre derlemesi gerekir.
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
değeri, kitaplık tarafından tanımlanan sürüme eşit veya sürümden büyük olmalıdır.Bağımlı uygulama modülünün bir parçası olarak bir kitaplık 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üllerini derlediğinizde kitaplık modülleri, bir AAR dosyası olarak 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ül ve kitaplık modülünden oluşturulan
R
sınıfı, ana modülün paketi ve kitaplıkların paketleri de dahil olmak üzere gereken tüm paketlerde oluşturulur.Bir 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 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üncellemesine gerek kalmamasını sağlarsınız. Android Studio derleme sistemi uygulamanızı oluştururken hem uygulama modülündeki hem de kitaplıktaki yönergeleri kullanır. Bu nedenle, kitaplıkta ayrı bir adımda kod daraltıcı çalıştırmanız gerekmez.
ProGuard kurallarını kitaplık projenize eklemek için dosyanın adını, kitaplığınızın
build.gradle
veyabuild.gradle.kts
dosyasınındefaultConfig
bloğundakiconsumerProguardFiles
özelliğiyle belirtin.Örneğin, aşağıdaki snippet,
lib-proguard-rules.txt
dosyasını kitaplığın ProGuard yapılandırma dosyası olarak ayarlar:Eski
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 olarak derlenen ve AAR oluşturmayan çok modüllü bir derlemenin parçasıysa kodu yalnızca kitaplığı kullanan uygulama modülünde çalıştırın. ProGuard kuralları ve bunların kullanımı hakkında daha fazla bilgi edinmek için Uygulamanızı küçültme, kodunu karartma ve optimize etme bölümünü 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ına bağımlılık olarak dahil edilmesidir. Bu, test APK'sının yalnızca kendi kodunu değil, aynı zamanda kitaplığın AAR'sini ve tüm bağımlılıklarını da içerdiği anlamına gelir. Test edilen ayrı bir uygulama olmadığından,
androidTest
görevi yalnızca test APK'sını yükler (ve kaldırır).Birden fazla manifest dosyasını birleştirirken Gradle, varsayılan öncelik sırasını izler 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
ve Maven yapı türü de aar
şeklindedir. Dosyanın kendisi bir ZIP dosyasıdır. Tek zorunlu giriş /AndroidManifest.xml
.
Bir 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/