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

  1. File > New > New Module (Dosya > Yeni > Yeni Modül) seçeneğini tıklayın.
  2. 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.

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

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

  1. Dosya > Proje Yapısı > Bağımlılıklar'a gidin.
  2. Kitaplığı eklemek istediğiniz modülü seçin.
  3. Tanımlanan Bağımlılıklar sekmesinde simgesini tıklayın ve 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ığı ekleyin

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

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

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

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

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

  1. Dosya > Proje Yapısı > Bağımlılıklar'a gidin.
  2. Belirtilen Bağımlılıklar sekmesinde simgesini tıklayın ve 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ık tüm yapılandırmalar için kullanılabilir olacaksa uygulama yapılandırmasını seçin.

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

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