Derleme bağımlılıkları ekleme

Android Studio'daki Gradle derleme sistemi, harici ikili programları veya diğer kitaplık modüllerini derlemenize bağımlılık olarak ekleyin. İlgili içeriği oluşturmak için kullanılan makinenizde veya uzaktaki bir depoda bulunabilir. Ayrıca, doğrudan dahil edilen geçişli bağımlılıklar da otomatik olarak dahil edilir. Bu sayfada, şunlar dahil olmak üzere Android projenizde bağımlılıkları nasıl kullanacağınız açıklanmaktadır: spesifik davranış ve yapılandırmalarla ilgili ayrıntılara Android Gradle eklentisi (AGP). Gradle hakkında daha ayrıntılı bir kavramsal rehber için nasıl etkilediğini de Bağımlılık yönetimi için Gradle rehberi , ancak Android projenizin yalnızca bağımlılık yapılandırmaları.

Kitaplık veya eklenti bağımlılığı ekleme

Derleme bağımlılığı eklemenin ve yönetmenin en iyi yolu sürüm kataloglarını, yeni projelerin varsayılan olarak kullandığı yöntemdir. Bu bölümde, proje yönetimiyle ilgili Android projeleri için kullanılan yapılandırma türleri; bu sayfaya Gradle belgeleri daha fazla seçenek için. Sürüm kataloglarını kullanan bir uygulama örneği için bkz. Şimdi Android'de. Halihazırda bağımlılıklar ayarlamışsanız sürüm katalogları olmadan ve çok modüllü bir projeniz varsa, taşıma.

Yerel bağımlılıklar ekleme ve yönetme (yaygın değildir) hakkında bilgi edinmek için Yerel bağımlılıklar.

Aşağıdaki örnekte, varsayılan olarak bir uzaktan ikili program bağımlılık (Jetpack Macrobenchmark) kitaplık), yerel kitaplık modülü bağımlılık (myLibrary) ve bir eklenti bağımlılığı (Android Gradle eklentisi) oldu. Genel bilgiler projenize eklemeniz için bazı adımlara ihtiyacınız var:

  1. Sürüm kataloğu dosyasının [versions] bölümü. libs.versions.toml (gradle dizininden Android görünümünde Proje görünümü veya Gradle Komut Dosyaları):

    [versions]
    agp = "8.3.0"
    androidx-macro-benchmark = "1.2.2"
    my-library = "1.4"
    
    [libraries]
    ...
    
    [plugins]
    ...
    

    Takma adlar kısa çizgi veya alt çizgi içerebilir. Bu takma adlar, iç içe yerleştirilmiş değerler oluşturur kullanabileceğiniz bir kaynaktır. Referanslar, libs.versions.toml kataloğunun libs bölümü. Zaman kataloğunu kullanırken, Google Etiket Yöneticisi'ni kullanarak "libs."

  2. [libraries] öğesinde bağımlılık için bir takma ad ekleyin ( uzak ikili programlar veya yerel kitaplık modülleri) veya [plugins] ( eklentileri) libs.versions.toml dosyasının bölümlerini içerir.

    [versions]
    ...
    
    [libraries]
    androidx-benchmark-macro = { group = "androidx.benchmark", name = "benchmark-macro-junit4", version.ref = "androidx-macro-benchmark" }
    my-library = { group = "com.myapplication", name = "mylibrary", version.ref = "my-library" }
    
    [plugins]
    androidApplication = { id = "com.android.application", version.ref = "agp" }
    

    Bazı kitaplıklar, kitaplık ailelerini ve sürümlerini gruplandırır. Web sitenize BOM, ve bu sürümleri sizin yerinize yönetmesine izin verip yeni sürüm kataloğu oluşturarak dosya oluşturabilir ve geliştirebilirsiniz. Görüntüleyin Ayrıntılar için Malzeme Listesi'ni kullanma başlıklı makaleye göz atın.

  3. Şunun derleme komut dosyasına bağımlılık takma adına bir referans ekleyin: veya bağımlılık gerektiren modüller oluşturabilirsiniz. Takma adı dönüştürün alt çizgi ve tire noktalara dönüştürür. Modül düzeyinde oluşturma komut dosyamız şöyle görünecektir:

    Kotlin

    plugins {
      alias(libs.plugins.androidApplication)
    }
    
    dependencies {
      implementation(libs.androidx.benchmark.macro)
      implementation(libs.my.library)
    }
    

    Eski

    plugins {
      alias 'libs.plugins.androidApplication'
    }
    
    dependencies {
      implementation libs.androidx.benchmark.macro
      implementation libs.my.library
    }
    

    Eklenti referanslarında, katalog adından sonra plugins ve sürüm referansları, katalog adından (sürüm) versions sonra referanslar yaygın değildir; Bağımlılıklar konusuna bakın için aynı sürüm numaralarını kullanın.) Kütüphane referanslar libraries niteleyici içermediğinden Bir kitaplığın başında versions veya plugins takma ad'dır.

Bağımlılıkları yapılandırma

dependencies blokunda, aşağıdakilerden birini kullanarak bir kitaplık bağımlılığı tanımlayabilirsiniz: birkaç farklı bağımlılık yapılandırmasının (ör. implementation) önce). Her bağımlılık yapılandırması, Gradle'a farklı ve bağımlılığın nasıl kullanılacağına dair talimatlar. Aşağıdaki tabloda her bir Android projenizde bağımlılık için kullanabileceğiniz yapılandırma sayısı.

Yapılandırma Davranış
implementation Gradle, derleme sınıf yoluna bağımlılığı ekler ve bağımlılığı derleme çıkışına paketler. modülü bir implementation bağımlılığı yapılandırdığında modülün bazı güvenlik verilerini sızdırmasını istemediğinizi diğer modüllere bağımlılığının ortaya çıkmasıdır. Yani bağımlılık şu anki modüle bağlı diğer modüllerde kullanılamaz modülünü kullanabilirsiniz.

Şunun yerine bu bağımlılık yapılandırmasını kullanma: api, derleme süresinde önemli artışlar sağlayabilir çünkü derleme sisteminin ihtiyaç duyduğu modüllerin sayısını azaltır yeniden derlemek için kullanılabilir. Örneğin, implementation bağımlılık, API'sini değiştirirken Gradle da yalnızca o bağımlılığı yeniden derler. ve doğrudan buna bağımlı modüller. Çoğu uygulama ve test modüllerin bu yapılandırmayı kullanması gerekir.

api Gradle, derleme sınıf yoluna ve derlemeye bağımlılığı ekler çıktı. Bir modül api bağımlılığı içerdiğinde modülün geçişli olarak dışa aktarmak istediğini Gradle'a bildirerek sunulabilmesini sağlamak, böylece diğer modüllere hem çalışma zamanı hem de derleme süresini destekler.

Bu yapılandırmayı dikkatli bir şekilde ve yalnızca diğer yukarı akış tüketicilerine geçişli olarak ihracat yapmanız gerekir. Bir api bağımlılığı, harici API'sini (Gradle) değiştiriyor derlerken, bu bağımlılığa erişimi olan tüm modülleri yeniden derler gerekir. Çok sayıda api bağımlılığınızın olması ve derleme süresini önemli ölçüde artırır. Belirli bir içeriği bağımlılığının API'sini ayrı bir modüle yükleyebilirsiniz. implementation bağımlılıklarını kullanabilirsiniz.

compileOnly Gradle, bağımlılığı yalnızca derleme sınıf yoluna ekler (yani derleme çıkışına eklenmez). Bu, özellikle de bir Android modülü oluşturuyorsanız ve olsa da çalışma zamanında mevcut olması isteğe bağlıdır. Örneğin, Örneğin, yalnızca derleme zamanı ek açıklamaları içeren (genellikle kod oluşturmak için kullanılır ancak çoğu zaman derleme çıktısına dahil edilmez) bir kitaplığa bağımlıysanız bu kitaplığı compileOnly olarak işaretleyebilirsiniz.

Bu yapılandırmayı kullanırsanız kitaplık modülünüz bağımlılığın mevcut olup olmadığını kontrol etmek için bir çalışma zamanı koşulu ekleme kullanmaya devam etmesini sağlamak için de davranışlarını işlevini kullanın. Bu da reklam öğelerinin boyutunu uygulamanızın son hâlini değerlendirin.

Not: compileOnly kullanamazsınız .

runtimeOnly Gradle, bağımlılığı yalnızca derleme çıkışına ekler. yardımcı olabilir. Yani, derleme sınıf yoluna eklenmez. Bu ad, Android'de nadiren kullanılır ancak sunucuda yaygın olarak kullanılır. günlük kaydı uygulamaları sağlayan uygulamalardır. Örneğin, kitaplığının, hakkında bilgi edindiniz. Söz konusu kitaplığın kullanıcıları, kitaplığı implementation bağımlılığı ve bir Gerçek günlük kaydı için runtimeOnly bağımlılığı bahsedeceğiz.
ksp
kapt
annotationProcessor

Bu yapılandırmalar, ek açıklamaları işleyen kitaplıklar sağlar ve diğer simgeleri kodlayın. Genellikle veya ek kod oluşturarak, başvurabileceğiniz biraz zaman alabilir.

Böyle bir bağımlılığı eklemek için ksp, kapt veya annotationProcessor yapılandırmalarını kullanarak ek açıklama işlemcisi sınıf yoluna eklemeniz gerekir. Bunları kullanmak yapılandırmaları, derlemeyi ayırarak derleme performansını iyileştirir sınıf yolu. Gradle derleme sınıf yolunda ek açıklama işlemcileri olmadan, derleme süresini olumsuz etkileyen, derlemeden kaçınma (Gradle Derlemede bulunan 5.0 ve üzeri ek açıklama işlemcilerini yoksayar sınıf yolu).

Android Gradle eklentisi, bağımlılığın bir ek açıklama olduğunu varsayar işlemcisini ekleyin:

META-INF/services/javax.annotation.processing.Processor

Eklenti, sınıf yolunu derler, bir derleme hatası oluşturur.

ksp bir Kotlin Sembolü İşlemcisidir ve Kotlin derleyicisi.

kapt ve apt, iki farklı araç görevi görür ek açıklamaları işlemden geçirmeye çalışın.

Hangi yapılandırmanın kullanılacağına karar verirken takip etmek için:

  • Bir işlemci Kotlin Sembol İşlemci olarak mevcutsa bir ksp bağımlılığı olarak gösterir. kapt'tan ksp'ye geçiş konusuna bakın adresine göz atın.
  • İşlemci, Kotlin Sembol İşlemcisi olarak mevcut değilse:
    • Projeniz Kotlin kaynağı içeriyorsa (ancak aynı zamanda Java kaynağını ekleyin), kapt kullanın dahil edin.
    • Projeniz yalnızca Java kaynağı kullanıyorsa dahil etmek için annotationProcessor.

Ek açıklama işlemcilerini kullanma hakkında daha fazla bilgi için Ek açıklama işlemcileri ekleyin.

lintChecks

Lint içeren bir kitaplık eklemek için bu yapılandırmayı kullanın Android uygulamanızı oluştururken Gradle'ın yürütmesini istediğiniz kontroller belirler.

lint.jar dosyası içeren AAR'lerin söz konusu lint.jar dosyasında tanımlanan kontrolleri otomatik olarak çalıştırır; açık bir lintChecks bağımlılığı eklemeniz gerekmez. Bu, kitaplıkları ve ilişkili lint kontrollerini tek bir hesapta tanımlamanıza olanak tanır. bağımlılığınızı artırırsınız. Kontrollerinizin, tüketiciler kitaplığını açar.

lintPublish Android kitaplık projelerinde lint eklemek için bu yapılandırmayı kullanın Gradle'ın bir lint.jar dosyası olarak derlemesini istediğiniz kontrolleri AAR'nize ekleyin. Bu durum, AAR'yi kullanarak bu hata analizi kontrollerini de uygulayabilirsiniz. Bu hesabı önceden lint'i dahil etmek için lintChecks bağımlılık yapılandırması AAR'de bu bağımlıları taşımanız gerekir. bunun yerine lintPublish yapılandırmasını kullanın.

Kotlin

dependencies {
  // Executes lint checks from the ":checks" project at build time.
  lintChecks(project(":checks"))
  // Compiles lint checks from the ":checks-to-publish" into a
  // lint.jar file and publishes it to your Android library.
  lintPublish(project(":checks-to-publish"))
}

Eski

dependencies {
  // Executes lint checks from the ':checks' project at build time.
  lintChecks project(':checks')
  // Compiles lint checks from the ':checks-to-publish' into a
  // lint.jar file and publishes it to your Android library.
  lintPublish project(':checks-to-publish')
}

Belirli bir derleme varyantı için bağımlılıkları yapılandırma

Önceki yapılandırmaların tümü, tüm derleme varyantlarına bağımlılık uygular. Eğer Bunun yerine yalnızca belirli bir derleme için bağımlılık tanımlamak istiyorsunuz değişken kaynak kümesi veya test kaynağı için kümesi kullanıyorsanız yapılandırmada büyük harf adını ve önüne derleme varyantının veya test kaynağı grubunun adını ekleyin.

Örneğin, yalnızca "ücretsiz" değerine bir uzak ikili program bağımlılığı eklemek için ürün lezzetini implementation yapılandırmasını kullanarak almak için şunu kullanın:

Kotlin

dependencies {
    freeImplementation("com.google.firebase:firebase-ads:21.5.1")
}

Eski

dependencies {
    freeImplementation 'com.google.firebase:firebase-ads:21.5.1'
}

Ancak bir ürünü birleştiren varyant için bağımlılık eklemek istiyorsanız armağan ve derleme türü olarak tanımlarsanız yapılandırma adını ilk kullanıma hazırlamanız gerekir:

Kotlin

// Initializes a placeholder for the freeDebugImplementation dependency configuration.
val freeDebugImplementation by configurations.creating

dependencies {
    freeDebugImplementation(project(":free-support"))
}

Eski

configurations {
    // Initializes a placeholder for the freeDebugImplementation dependency configuration.
    freeDebugImplementation {}
}

dependencies {
    freeDebugImplementation project(":free-support")
}

Yerel testleriniz ve araçlı testlerinize implementation bağımlılıkları eklemek için kodu aşağıdaki gibi görünür:

Kotlin

dependencies {
    // Adds a remote binary dependency only for local tests.
    testImplementation("junit:junit:4.12")

    // Adds a remote binary dependency only for the instrumented test APK.
    androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
}

Eski

dependencies {
    // Adds a remote binary dependency only for local tests.
    testImplementation 'junit:junit:4.12'

    // Adds a remote binary dependency only for the instrumented test APK.
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
}

Ancak belirli yapılandırmalar bu durumda anlamlı olmaz. Örneğin, diğer modüller androidTest ürününe bağlı olmadığından androidTestApi yapılandırmasını kullanıyorsanız uyarı verir:

WARNING: Configuration 'androidTestApi' is obsolete and has been replaced with
'androidTestImplementation'.

Bağımlılık sırası

Bağımlılıklarınızı listelediğiniz sıra, bağımlılıklarınızın her birinin önceliğini gösterir: ilk kitaplık ikinciden daha önceliklidir, ikinci kitaplık ise daha önceliklidir öncelik üçüncüden daha fazla olabilir. Bu sıra aşağıdaki durumlarda önemlidir: kaynakların birleştirilmesi manifest öğeleri birleştirildi çıkarmanıza yardımcı olabilir.

Örneğin, projenizde aşağıdakiler beyan ediliyorsa:

  • LIB_A ve LIB_B öğelerine bağımlılık (bu sırayla)
  • LIB_A ise LIB_C ve LIB_D metriğine bağlıdır (bu sırayla)
  • Ayrıca LIB_B, LIB_C metriğine de bağlıdır

Bu durumda sabit bağımlılık sırası aşağıdaki gibi olacaktır:

  1. LIB_A
  2. LIB_D
  3. LIB_B
  4. LIB_C

Bu, hem LIB_A hem de LIB_B öğesinin geçersiz kılmasını sağlar. LIB_C; ve LIB_D hâlâ şuna göre daha yüksek önceliğe sahip: LIB_B nedeniyle LIB_A (buna bağlı olarak değişir) LIB_B ile karşılaştırıldığında daha yüksek önceliğe sahip.

Farklı projelerden alınan manifest dosyaları hakkında daha fazla bilgi kaynaklar/bağımlılıklar birleştirilir, bkz. Birden çok manifest dosyasını birleştirme.

Play Console için bağımlılık bilgileri

AGP, uygulamanızı oluştururken kitaplığı tanımlayan meta verileri dahil eder olduğunu tespit etmenizi sağlar. Google Play, uygulamanızı yüklerken Console, SDK'larla ilgili bilinen sorunlar hakkında uyarı sağlamak için bu meta verileri inceler ve bağımlılıklarını gösterir ve bazı durumlarda, kullanabileceğiniz yardımcı olmaktır.

Veriler bir Google Play imzalama anahtarı tarafından sıkıştırılır, şifrelenir ve sürüm uygulamanızın imza bloğu. Bu bağımlılıkları korumayı güvenli ve olumlu bir kullanıcı deneyimi için dosyaları dahil etmelisiniz. Kapsam dışında kalmak için takip ediliyor dependenciesInfo bloğunu modülünüzün build.gradle.kts dosyasında bulabilirsiniz.

android {
    dependenciesInfo {
        // Disables dependency metadata when building APKs.
        includeInApk = false
        // Disables dependency metadata when building Android App Bundles.
        includeInBundle = false
    }
}

Politikalarımız ve bağımlılıklarla ilgili olası sorunlar hakkında daha fazla bilgi için destek sayfamızı uygulamanızda üçüncü taraf SDK'lar kullanma.

SDK analizleri

Android Studio, sürüm katalog dosyasında ve Projede lint uyarıları gösteriyor Şurada herkese açık SDK'lar için Yapı İletişim Kutusu: Aşağıdaki sorunlar söz konusu olduğunda Google Play SDK Dizini:

  • SDK'lar, yazarları tarafından "güncel değil" olarak işaretlenir.
  • SDK'lar, Play politikalarını ihlal ediyor.

Uyarılar bu bağımlılıkları güncellemeniz gerektiğini gösteren sinyallerdir çünkü eski sürümlerin kullanılması Google Play'de uygulama yayınlamanızı engelleyebilir kullanıma sunmuş olursunuz.

Sürüm katalogları olmadan derleme bağımlılıkları ekleme

Bağımlılıkları eklemek ve yönetmek için sürüm kataloglarını kullanmanızı öneririz ancak ihtiyaç duymayabilir. sürüm katalogları:

Kotlin

plugins {
    id("com.android.application")
}

android { ... }

dependencies {
    // Dependency on a remote binary
    implementation("com.example.android:app-magic:12.3")
    // Dependency on a local library module
    implementation(project(":mylibrary"))
}

Eski

plugins {
    id 'com.android.application'
}

android { ... }

dependencies {
    // Dependency on a remote binary
    implementation 'com.example.android:app-magic:12.3'
    // Dependency on a local library module
    implementation project(':mylibrary')
}

Bu derleme dosyası "app-magic"in 12.3 sürümüne bağımlılık bildiriyor "com.example.android" kitaplığının içindeki ad alanı grubudur. Uzak ikili program bağımlılık beyanı şu ifadenin kısaltmasıdır:

Kotlin

implementation(group = "com.example.android", name = "app-magic", version = "12.3")

Eski

implementation group: 'com.example.android', name: 'app-magic', version: '12.3'

Derleme dosyası ayrıca adlı Android kitaplığı modülüne bağımlılığı da bildirir "mylibrary"; bu ad, şurada bir include: ile tanımlanan kitaplık adıyla eşleşmelidir: settings.gradle.kts dosyanız. Derleme sistemi, uygulamanızı derlerken kitaplık modülünü derler ve sonuç olarak elde edilen derlenmiş içeriği uygulamasını indirin.

Derleme dosyası ayrıca Android Gradle eklentisine bağımlılığı da bildirir (com.application.android). Aynı eklentisine sahip değilseniz derleme sınıf yolunda eklentinin yalnızca tek bir sürümüne sahip olabilirsiniz. entegre eder. Modülün her birinde sürümü belirtmek yerine eklenti bağımlılığını kök derleme komut dosyasına eklemeniz gerekir belirtin ve uygulanmayacağını belirtin. apply false eklendiğinde sağlanan bilgiler Eklentinin sürümünü not etmek ancak kök derlemede kullanmamak için Gradle yapın. Bu plugins bloğu dışında kök derleme komut dosyası genellikle boş olur.

Kotlin

plugins {
    id("org.jetbrains.kotlin.android") version "1.9.0" apply false
}

Eski

plugins {
    id com.android.application version 8.3.0-rc02 apply false
}

Tek modüllü bir projeniz varsa sürümü açıkça modül düzeyinde derleme komut dosyasını kullanın ve proje düzeyindeki derleme komut dosyasını boş bırakın:

Kotlin

plugins {
    id("com.android.application") version "8.3.0"
}

Eski

plugins {
    id 'com.android.application' version '8.3.0-rc02'
}