Android kitaplığı oluşturma

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:

  1. Dosya > Yeni > Yeni Modül'ü tıklayın.
  2. 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.

  3. 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:

  1. Groovy kullanıyorsanız modül düzeyindeki build.gradle dosyasını, Kotlin komut dosyası kullanıyorsanız build.gradle.kts dosyasını açın.
  2. applicationId hattını silin. Bunu yalnızca bir Android uygulama modülü tanımlayabilir.
  3. 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")
      }
      
  4. 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:

  1. Dosya > Proje Yapısı > Bağımlılıklar'a gidin.
  2. Kitaplığı eklemek istediğiniz modülü seçin.
  3. Bildirilen Bağımlılıklar sekmesinde simgesini tıklayıp menüden Modül Bağımlılığı'nı seçin.

  4. Modül Bağımlılığı Ekle iletişim kutusunda kitaplık modülünüzü seçin.

    Proje Yapısı İletişim Kutusuna modül bağımlılığı ekleme

  5. 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:

  1. Dosya > Proje Yapısı > Bağımlılıklar'a gidin.
  2. Bildirilen Bağımlılıklar sekmesinde simgesini tıklayıp menüden Kitaplık Bağımlılığı'nı seçin.

  3. Kitaplık Bağımlılığı Ekle iletişim kutusunda, arama kutusunu kullanarak eklenecek kitaplığı bulun. Bu form, settings.gradle veya settings.gradle.kts dosyasındaki dependencyResolutionManagement { repositories {...}} blokunda belirtilen depolarda arama yapar.

    Proje Yapısı İletişim Kutusuna kitaplık bağımlılığı ekleme

  4. 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:

  1. Dosya > Proje Yapısı > Bağımlılıklar'a gidin.
  2. Bildirilen Bağımlılıklar sekmesinde simgesini tıklayıp menüden Jar Bağımlılığı'nı seçin.

  3. 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.

    Proje Yapısı İletişim Kutusuna AAR bağımlılığı ekleme

    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 veya build.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 veya build.gradle.kts dosyasındaki defaultConfig bloğundaki consumerProguardFiles ö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: