Derleme bağımlılıkları ekleme

Android Studio'daki Gradle derleme sistemi, derlemenize harici ikili programları veya diğer kitaplık modüllerini bağımlılık olarak eklemeyi kolaylaştırır. Bağımlılıklar makinenizde veya uzak bir depoda bulunabilir. Ayrıca bildirdikleri tüm geçişli bağımlılıklar da otomatik olarak dahil edilir. Bu sayfada, Gradle için Android eklentisine özgü davranış ve yapılandırmalarla ilgili ayrıntılar dahil olmak üzere Android projenizde bağımlılıkları nasıl kullanacağınız açıklanmaktadır. Gradle bağımlılıkları hakkında daha kapsamlı bir kavramsal kılavuz için Bağımlılık yönetimiyle ilgili Gradle kılavuzunu da incelemeniz gerekir. Ancak Android projenizin yalnızca bu sayfada tanımlanan bağımlılık yapılandırmalarını kullanması gerektiğini unutmayın.

Bağımlılık türleri

Projenize bağımlılık eklemek için modülünüzün build.gradle.kts dosyasının dependencies bloğunda implementation gibi bir bağımlılık yapılandırması belirtin.

Örneğin, bir uygulama modülü için aşağıdaki build.gradle.kts dosyası üç farklı tür bağımlılık içerir:

Kotlin

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

android { ... }

dependencies {
    // Dependency on a local library module
    implementation(project(":mylibrary"))

    // Dependency on local binaries
    implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar"))))

    // Dependency on a remote binary
    implementation("com.example.android:app-magic:12.3")
}

Modern

plugins {
    id 'com.android.application'
}

android { ... }

dependencies {
    // Dependency on a local library module
    implementation project(':mylibrary')

    // Dependency on local binaries
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    // Dependency on a remote binary
    implementation 'com.example.android:app-magic:12.3'
}

Bunların her biri aşağıdaki gibi farklı türde bir kitaplık bağımlılığı ister:

Yerel kitaplık modülü bağımlılığı

Kotlin

implementation(project(":mylibrary"))

Modern

implementation project(':mylibrary')

Bu, "mylibrary" adlı Android kitaplık modülüne bağımlılığı tanımlar (bu ad settings.gradle.kts dosyanızda include: ile tanımlanan kitaplık adıyla eşleşmelidir). Uygulamanızı derlediğinizde derleme sistemi, kitaplık modülünü derler ve ortaya çıkan derlenmiş içeriği uygulamada paketler.

Yerel ikili bağımlılık

Kotlin

  implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar"))))
  

Modern

  implementation fileTree(dir: 'libs', include: ['*.jar'])
  

Gradle, projenizin module_name/libs/ dizinindeki JAR dosyalarında bağımlılıklar bildirir (çünkü Gradle, yolları build.gradle.kts dosyasına göre okur).

Alternatif olarak, aşağıdaki gibi dosyaları tek tek belirtebilirsiniz:

Kotlin

  implementation(files("libs/foo.jar", "libs/bar.jar"))
  

Modern

  implementation files('libs/foo.jar', 'libs/bar.jar')
  
Uzaktan ikili program bağımlılığı

Kotlin

  implementation("com.example.android:app-magic:12.3")
  

Modern

  implementation 'com.example.android:app-magic:12.3'
  

Bu, aslında şunun kısa halidir:

Kotlin

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

Modern

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

Bu, "com.example.android" ad alanı grubu içinde "app-magic" kitaplığının 12.3 sürümüne bağımlılığı tanımlar.

Not: Bunun gibi uzaktan bağımlılıklar, Gradle'ın kitaplığı araması gereken uygun uzaktan depoları bildirmenizi gerektirir. Kitaplık halihazırda yerel olarak mevcut değilse derleme için gerekli olduğunda (örneğin, Projeyi Gradle Dosyalarıyla Senkronize Et'i tıkladığınızda veya bir derleme çalıştırdığınızda) Gradle bunu uzak siteden çeker.

Derleme zamanında bir AGP bağımlılığı kullanıyorsanız bunu açık bağımlılık olarak eklediğinizden emin olun. AGP dahili olarak api/implementation yapılandırmalarını kullandığından, bazı yapılar derleme sınıf yolunuzdan kaldırılabilir ve derleme sınıf yolunuz değişebilir.

Yerel bağımlılıklar

Android Gradle eklentisi 4.0 sürümünden itibaren yerel bağımlılıklar bu sayfada açıklanan şekilde de içe aktarılabilir.

Yerel kitaplıkları gösteren bir AAR'ye bağlı olarak, yerel kitaplıklar otomatik olarak externalNativeBuild tarafından kullanılan derleme sisteminde kullanılabilir hale gelir. Kitaplıklara kodunuzdan erişmek için yerel derleme komut dosyalarınızda bağlantı oluşturmanız gerekir. Bu sayfadaki Yerel bağımlılıkları kullanma bölümüne bakın.

Bağımlılık yapılandırmaları

dependencies bloğunun içinde, birkaç farklı bağımlılık yapılandırmasından birini (yukarıda gösterilen implementation gibi) kullanarak bir kitaplık bağımlılığı beyan edebilirsiniz. Her bağımlılık yapılandırması, Gradle'a bağımlılığın nasıl kullanılacağıyla ilgili farklı talimatlar sağlar. Aşağıdaki tabloda, Android projenizdeki bir bağımlılık için kullanabileceğiniz yapılandırmaların her biri açıklanmaktadır. Tablo ayrıca bu yapılandırmaları, Android Gradle eklentisi 3.0.0 sürümü itibarıyla kullanımdan kaldırılan yapılandırmalarla da karşılaştırır.

Yapılandırma Davranış
implementation Gradle, bağımlılığı derleme sınıf yoluna ekler ve bağımlılığı derleme çıktısına paketler. Bununla birlikte, modülünüz implementation bağımlılığını yapılandırdığında, derleme sırasında modülün bağımlılığı diğer modüllere sızdırmasını istemediğinizi Gradle'a bildirir. Yani bağımlılık yalnızca çalışma zamanında diğer modüller için kullanılabilir.

api veya compile (kullanımdan kaldırıldı) yerine bu bağımlılık yapılandırmasının kullanılması, derleme sisteminin yeniden derlemesi için gereken modüllerin sayısını azalttığından önemli derleme süresi iyileştirmelerine yol açabilir. Örneğin, bir implementation bağımlılığı API'sini değiştirirse Gradle yalnızca bu bağımlılığı ve doğrudan ona bağlı olan modülleri yeniden derler. Çoğu uygulama ve test modülü bu yapılandırmayı kullanır.

api Gradle, bağımlılığı derleme sınıf yoluna ve derleme çıkışına ekler. Bir modül api bağımlılığı içerdiğinde, Gradle'ın bu bağımlılığı diğer modüllere geçişli olarak dışa aktarmak istediğini bilmesini sağlar. Böylece, hem çalışma zamanında hem de derleme zamanında bu bağımlılar tarafından kullanılabilir.

Bu yapılandırma, compile (artık kullanımdan kaldırılmıştır) gibi davranır ancak dikkatli bir şekilde ve yalnızca diğer yukarı akış tüketicilerine geçişli olarak aktarmanız gereken bağımlılıklarla birlikte kullanmalısınız. Bunun nedeni, bir api bağımlılığı harici API'sini değiştirirse Gradle'ın derleme sırasında bu bağımlılığa erişimi olan tüm modülleri yeniden derlenmesidir. Dolayısıyla, çok sayıda api bağımlılığının olması, derleme süresini önemli ölçüde artırabilir. Bir bağımlılığın API'sini ayrı bir modüle göstermek istemiyorsanız kitaplık modülleri implementation bağımlılıklarını kullanmalıdır.

compileOnly Gradle, bağımlılığı yalnızca derleme sınıf yoluna ekler (yani derleme çıkışına eklenmez). Bu, bir Android modülü oluşturduğunuzda ve derleme sırasında bağımlılığa ihtiyacınız olduğunda yararlı olur ancak çalışma zamanında mevcut olması isteğe bağlıdır.

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 içermelidir. Daha sonra bu koşul sağlanmasa da özelliğin çalışmaya devam edebilmesi için davranışını gerektiği şekilde değiştirin. Bu, kritik olmayan geçici bağımlılıkları eklemeyerek son uygulamanın boyutunu küçültmeye yardımcı olur. Bu yapılandırma, provided (artık kullanımdan kaldırılmıştır) gibi davranır.

Not: compileOnly yapılandırmasını AAR bağımlılıklarıyla kullanamazsınız.

runtimeOnly Gradle, çalışma zamanında kullanılmak üzere bağımlılığı yalnızca derleme çıkışına ekler. Yani derleme sınıf yoluna eklenmez. Bu yapılandırma, apk (artık kullanımdan kaldırılmıştır) gibi davranır.
annotationProcessor

Ek açıklama işlemcisi olan bir kitaplığa bağımlılık eklemek için annotationProcessor yapılandırmasını kullanarak ek açıklama işleyici sınıf yoluna eklemeniz gerekir. Bunun nedeni, bu yapılandırmanın kullanılması, derleme sınıf yolunu ek açıklama işlemci sınıf yolundan ayırarak derleme performansını artırmasıdır. Gradle, derleme sınıf yolunda ek açıklama işlemcileri bulursa derleme süresini olumsuz etkileyen derleme önlemeyi devre dışı bırakır (Gradle 5.0 ve sonraki sürümler, derleme sınıf yolunda bulunan ek açıklama işlemcilerini yoksayar).

Android Gradle eklentisi JAR dosyası aşağıdaki dosyayı içeriyorsa bir bağımlılığın ek açıklama işlemcisi olduğunu varsayar:

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

Eklenti, derleme sınıf yolunda bulunan bir ek açıklama işlemcisi algılarsa yapı hatası oluşturur.

Not: Kotlin projeleri, ek açıklama işlemcisi bağımlılıklarını tanımlamak için kapt yöntemini kullanmalıdır.

lintChecks

Projenizi oluştururken Gradle'ın yürütmesini istediğiniz lint kontrollerini eklemek için bu yapılandırmayı kullanın.

Not: Android Gradle eklentisi 3.4.0 ve sonraki sürümleri kullanılırken bu bağımlılık yapılandırması artık Android Kitaplığı projelerinizde lint kontrollerini paketlemez. AAR kitaplıklarınıza lint kontrolü bağımlılıklarını eklemek için aşağıda açıklanan lintPublish yapılandırmasını kullanın.

lintPublish Gradle'ın bir lint.jar dosyası ve AAR'nizde paket halinde derlemesini istediğiniz lint kontrollerini eklemek için Android kitaplık projelerinde bu yapılandırmayı kullanın. Bu, AAR'nizi kullanan projelerin bu hata analizi kontrollerini de uygulamasını sağlar. Yayınlanan AAR'ye lint kontrollerini eklemek için daha önce lintChecks bağımlılık yapılandırmasını kullandıysanız bu bağımlılıkları, bunun yerine lintPublish yapılandırmasını kullanacak şekilde taşımanız gerekir.

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"))
}

Modern

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')
}
apk Gradle, çalışma zamanında kullanılmak üzere bağımlılığı yalnızca derleme çıkışına ekler. Yani derleme sınıf yoluna eklenmez. Bu yapılandırmanın desteği sonlandırılmıştır (AGP 1.0-4.2 sürümlerinde kullanılabilir).
compile Gradle, bağımlılığı derleme sınıf yoluna ve derleme çıkışına ekler ve bağımlılığı diğer modüllere aktarır. Bu yapılandırmanın desteği sonlandırılmıştır (AGP 1.0-4.2 arasında kullanılabilir).
provided Gradle, bağımlılığı yalnızca derleme sınıf yoluna ekler (yani derleme çıkışına eklenmez). Bu yapılandırmanın desteği sonlandırılmıştır (AGP 1.0-4.2 arasında kullanılabilir).

Yukarıdaki yapılandırmaların hepsi, tüm derleme varyantlarına bağımlılık uygular. Bunun yerine yalnızca belirli bir derleme varyantı kaynak grubu veya bir test kaynağı grubu için bağımlılık bildirmek isterseniz yapılandırma adını büyük harfle yazmanız ve derleme varyantının veya test kaynağı grubunun adını ön ek olarak koymanız gerekir.

Örneğin, bir implementation bağımlılığını yalnızca "ücretsiz" ürün türünüze eklemek (uzaktan ikili bağımlılığı kullanarak) şu şekilde görünür:

Kotlin

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

Modern

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

Ancak ürün niteliğini ve derleme türünü birleştiren bir varyant için bağımlılık eklemek istiyorsanız configurations bloğunda yapılandırma adını başlatmanız gerekir. Aşağıdaki örnek, "freeDebug" derleme varyantınıza bir runtimeOnly bağımlılığı ekler (yerel ikili bağımlılığı kullanarak).

Kotlin

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

dependencies {
    freeDebugRuntimeOnly(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar"))))
}

Modern

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

dependencies {
    freeDebugRuntimeOnly fileTree(dir: 'libs', include: ['*.jar'])
}

Yerel ve araçlı testlerinize implementation bağımlılıkları eklemek için şu şekilde 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")
}

Modern

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 öğesine bağlı olamayacağından androidTestApi yapılandırmasını kullanırsanız aşağıdaki uyarıyı alırsınız:

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

Ek açıklama işlemcileri ekleme

Derleme sınıf yolunuza ek açıklama işlemcileri eklerseniz aşağıdakine benzer bir hata mesajı görürsünüz:

Error: Annotation processors must be explicitly declared now.

Bu hatayı çözmek için annotationProcessor kullanarak bağımlılığınızı aşağıda gösterildiği gibi yapılandırarak projenize ek açıklama işlemcileri ekleyin:

Kotlin

dependencies {
    // Adds libraries defining annotations to only the compile classpath.
    compileOnly("com.google.dagger:dagger:version-number")
    // Adds the annotation processor dependency to the annotation processor classpath.
    annotationProcessor("com.google.dagger:dagger-compiler:version-number")
}

Modern

dependencies {
    // Adds libraries defining annotations to only the compile classpath.
    compileOnly 'com.google.dagger:dagger:version-number'
    // Adds the annotation processor dependency to the annotation processor classpath.
    annotationProcessor 'com.google.dagger:dagger-compiler:version-number'
}

Not: Gradle 3.0.0+ için Android eklentisi android-apt eklentisini desteklememektedir.

Bağımsız değişkenleri ek açıklama işlemcilerine iletme

Bir ek açıklama işlemcisine bağımsız değişkenler aktarmanız gerekiyorsa bunu modülünüzün derleme yapılandırmasındaki AnnotationProcessorOptions bloğunu kullanarak yapabilirsiniz. Örneğin, temel veri türlerini anahtar/değer çiftleri olarak iletmek isterseniz aşağıda gösterildiği gibi argument özelliğini kullanabilirsiniz:

Kotlin

android {
    ...
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                arguments += mapOf("key1" to "value1",
                                   "key2" to "value2")
            }
        }
    }
}

Modern

android {
    ...
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                argument 'key1', 'value1'
                argument 'key2', 'value2'
            }
        }
    }
}

Ancak Android Gradle eklentisi 3.2.0 ve sonraki sürümlerini kullanırken, dosya veya dizinleri temsil eden işlemci bağımsız değişkenlerini Gradle'ın CommandLineArgumentProvider arayüzünü kullanarak aktarmanız gerekir.

CommandLineArgumentProvider kullanımı, sizin veya ek açıklama işleyenin yazarının, her bağımsız değişkene artımlı derleme özelliği türü ek açıklamaları uygulayarak artımlı ve önbelleğe alınmış temiz derlemelerin doğruluğunu ve performansını iyileştirmesine olanak tanır.

Örneğin, aşağıdaki sınıf CommandLineArgumentProvider uygular ve işlemci için her bağımsız değişkene ek açıklama ekler.

Kotlin

class MyArgsProvider(
    // Annotates each directory as either an input or output for the
    // annotation processor.
    @get:InputFiles
    // Using this annotation helps Gradle determine which part of the file path
    // should be considered during up-to-date checks.
    @get:PathSensitive(PathSensitivity.RELATIVE)
    val inputDir: FileCollection,

    @get:OutputDirectory
    val outputDir: File
) : CommandLineArgumentProvider {
    // Specifies each directory as a command line argument for the processor.
    // The Android plugin uses this method to pass the arguments to the
    // annotation processor.

    override fun asArguments(): Iterable<String> {
        // Use the form '-Akey[=value]' to pass your options to the Java compiler.
        return listOf("-AinputDir=${inputDir.singleFile.absolutePath}",
                      "-AoutputDir=${outputDir.absolutePath}")
    }
}

android {...}

Modern

class MyArgsProvider implements CommandLineArgumentProvider {

    // Annotates each directory as either an input or output for the
    // annotation processor.
    @InputFiles
    // Using this annotation helps Gradle determine which part of the file path
    // should be considered during up-to-date checks.
    @PathSensitive(PathSensitivity.RELATIVE)
    FileCollection inputDir

    @OutputDirectory
    File outputDir

    // The class constructor sets the paths for the input and output directories.
    MyArgsProvider(FileCollection input, File output) {
        inputDir = input
        outputDir = output
    }

    // Specifies each directory as a command line argument for the processor.
    // The Android plugin uses this method to pass the arguments to the
    // annotation processor.
    @Override
    Iterable<String> asArguments() {
        // Use the form '-Akey[=value]' to pass your options to the Java compiler.
        ["-AinputDir=${inputDir.singleFile.absolutePath}",
         "-AoutputDir=${outputDir.absolutePath}"]
    }
}

android {...}

CommandLineArgumentProvider yöntemini uygulayan bir sınıf tanımladıktan sonra, aşağıda gösterildiği gibi bir örnek oluşturup annotationProcessorOptions.compilerArgumentProvider yöntemini kullanarak Android eklentisine iletmeniz gerekir.

Kotlin

// This is in your module's build.gradle file.
android {
    defaultConfig {
        javaCompileOptions {
            annotationProcessorOptions {
                // Creates a new MyArgsProvider object, specifies the input and
                // output paths for the constructor, and passes the object
                // to the Android plugin.
                compilerArgumentProvider(MyArgsProvider(files("input/path"),
                                                          file("output/path")))
            }
        }
    }
}

Modern

// This is in your module's build.gradle file.
android {
    defaultConfig {
        javaCompileOptions {
            annotationProcessorOptions {
                // Creates a new MyArgsProvider object, specifies the input and
                // output paths for the constructor, and passes the object
                // to the Android plugin.
                compilerArgumentProvider new MyArgsProvider(files("input/path"),
                                         new File("output/path"))
            }
        }
    }
}

CommandLineArgumentProvider uygulamasının derleme performansını iyileştirmeye nasıl yardımcı olduğu hakkında daha fazla bilgi edinmek için Java projelerini önbelleğe alma bölümünü okuyun.

Ek açıklama işlemcisi hata kontrolünü devre dışı bırak

Derleme sınıf yolunda ihtiyacınız olmayan ek açıklama işlemcilerini içeren bağımlılıklarınız varsa aşağıdaki kodu build.gradle.kts dosyanıza ekleyerek hata kontrolünü devre dışı bırakabilirsiniz. Derleme sınıf yoluna eklediğiniz ek açıklama işlemcilerinin yine de işlemci sınıf yoluna eklenmediğini unutmayın.

Kotlin

android {
    ...
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                argument("includeCompileClasspath", "false")
            }
        }
    }
}

Modern

android {
    ...
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                includeCompileClasspath false
            }
        }
    }
}

Kotlin ve kapt kullanıyorsanız:

Kotlin

android {
    ...
    defaultConfig {
        ...
        kapt {
            includeCompileClasspath = false
        }
    }
}

Modern

android {
    ...
    defaultConfig {
        ...
        kapt {
            includeCompileClasspath false
        }
    }
}

Projenizin ek açıklama işlemcilerini işlemci sınıf yoluna taşıdıktan sonra sorun yaşarsanız includeCompileClasspath değerini true olarak ayarlayarak ek açıklama işlemcilerine, derleme sınıf yolunda izin verebilirsiniz. Ancak, bu özelliğin true değerine ayarlanması önerilmez ve ayarlama seçeneği Android eklentisinin gelecekteki bir güncellemesinde kaldırılacaktır.

Geçişli bağımlılıkları hariç tutma

Uygulama kapsamı genişledikçe doğrudan bağımlılıklar ve geçişli bağımlılıklar (uygulamanızın içe aktarılan kitaplıklarının bağımlı olduğu kitaplıklar) dahil olmak üzere bir dizi bağımlılığı içerebilir. Artık ihtiyaç duymadığınız geçişli bağımlılıkları hariç tutmak için exclude anahtar kelimesini aşağıda gösterildiği gibi kullanabilirsiniz:

Kotlin

dependencies {
    implementation("some-library") {
        exclude(group = "com.example.imgtools", module = "native")
    }
}

Modern

dependencies {
    implementation('some-library') {
        exclude group: 'com.example.imgtools', module: 'native'
    }
}

Geçişli bağımlılıkları test yapılandırmalarından hariç tutma

Belirli geçişli bağımlılıkları testlerinizden hariç tutmanız gerekirse yukarıda gösterilen kod örneği beklendiği gibi çalışmayabilir. Bunun nedeni, test yapılandırmasının (ör. androidTestImplementation) modülün implementation yapılandırmasını genişletir. Yani Gradle yapılandırmayı çözümlediğinde her zaman implementation bağımlılıkları içerir.

Bu nedenle, geçişli bağımlılıkları testlerinizden hariç tutmak için bunu aşağıda gösterildiği gibi yürütme sırasında yapmanız gerekir:

Kotlin

android.testVariants.all {
    compileConfiguration.exclude(group = "com.jakewharton.threetenabp", module = "threetenabp")
    runtimeConfiguration.exclude(group = "com.jakewharton.threetenabp", module = "threetenabp")
}

Modern

android.testVariants.all { variant ->
    variant.getCompileConfiguration().exclude group: 'com.jakewharton.threetenabp', module: 'threetenabp'
    variant.getRuntimeConfiguration().exclude group: 'com.jakewharton.threetenabp', module: 'threetenabp'
}

Not: Test yapılandırmasına özel olan ve diğer yapılandırmalara dahil olmayan geçişli bağımlılıkları hariç tutmak için Geçişli bağımlılıkları hariç tutma bölümündeki orijinal kod örneğinde gösterildiği gibi bağımlılık bloğunda exclude anahtar kelimesini kullanmaya devam edebilirsiniz.

Wear OS uygulama bağımlılıklarını yapılandırın

Wear OS modülünde bağımlılıkları yapılandırmak diğer herhangi bir modülünkine benzerdir. Yani Wear OS modüllerinde implementation ve compileOnly gibi aynı bağımlılık yapılandırmaları kullanılır.

Wear modülleri, varyant duyarlı bağımlılık yönetimini de destekler. Bunun sonucunda, temel uygulama modülünüzün bir Wear modülüne bağımlılığı varsa temel modülün her varyantı, Wear modülündeki eşleşen varyantı tüketir.

Uzak depolar

Bağımlılığınız yerel kitaplık veya dosya ağacı dışında bir şey olduğunda Gradle, settings.gradle dosyanızın dependencyResolutionManagement { repositories {...} } bloğunda belirtilen online depolardaki dosyaları arar. Her bir depoyu listeleme sıranız, Gradle'ın her bir proje bağımlılığı için depoları arama sırasını belirler. Örneğin, hem A hem de B deposunda bir bağımlılık mevcutsa ve önce A'yı listelerseniz Gradle, bağımlılığı A deposundan indirir.

Aşağıda gösterildiği gibi, yeni Android Studio projelerinde varsayılan olarak Google'ın Maven deposu ve projenin settings.gradle dosyasındaki depo konumları olarak Maven merkezi depo konumu belirtilir:

Kotlin


dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
    }
}

Modern


dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
    }
}

Yerel bir depodan öğe istiyorsanız mavenLocal() öğesini kullanın:

Kotlin


dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
        mavenLocal()
    }
}

Modern


dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
        mavenLocal()
    }
}

Belirli Maven veya Ivy depolarını aşağıdaki şekilde de belirtebilirsiniz:

Kotlin


dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        maven(url = "https://repo.example.com/maven2")
        maven(url = "file://local/repo/")
        ivy(url = "https://repo.example.com/ivy")
    }
}

Modern


dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        maven {
            url 'https://repo.example.com/maven2'
        }
        maven {
            url 'file://local/repo/'
        }
        ivy {
            url 'https://repo.example.com/ivy'
        }
    }
}

Daha fazla bilgi için Gradle Kod Depoları kılavuzuna bakın.

Google'ın Maven deposu

Aşağıdaki Android kitaplıklarının en yeni sürümleri Google'ın Maven deposunda mevcuttur:

Mevcut tüm yapıları Google'ın Maven deposu dizininde görebilirsiniz (programatik erişim için aşağıya bakın).

Derlemenize bu kitaplıklardan birini eklemek için üst düzey build.gradle.kts dosyanıza Google'ın Maven deposunu ekleyin:

Kotlin


dependencyResolutionManagement {

    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()

        // If you're using a version of Gradle lower than 4.1, you must instead use:
        // maven {
        //     url = "https://maven.google.com"
        // }
        // An alternative URL is "https://dl.google.com/dl/android/maven2/".
    }
}

Modern


dependencyResolutionManagement {

    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()

        // If you're using a version of Gradle lower than 4.1, you must instead use:
        // maven {
        //     url 'https://maven.google.com'
        // }
        // An alternative URL is 'https://dl.google.com/dl/android/maven2/'.
    }
}

Ardından istediğiniz kitaplığı modülünüzün dependencies bloğuna ekleyin. Örneğin,uygulama kitaplığı aşağıdaki gibi görünür:

Kotlin


dependencies {
    implementation("com.android.support:appcompat-v7:28.0.0")
}

Modern


dependencies {
    implementation 'androidx.appcompat:appcompat:1.6.1'
}

Ancak yukarıdaki kitaplıkların daha eski bir sürümünü kullanmaya çalışırsanız ve bağımlılığınız başarısız olursa Maven deposunda kullanılamaz ve kitaplığı çevrimdışı depodan almanız gerekir.

Programatik erişim

Google'ın Maven yapılarına programlı erişim için maven.google.com/master-index.xml adresinden yapı gruplarının XML listesini alabilirsiniz. Ardından, herhangi bir grubun kitaplık adlarını ve sürümlerini şurada görüntüleyebilirsiniz:

maven.google.com/group_path/group-index.xml

Örneğin, android.arch.lifecycle grubundaki kitaplıklar maven.google.com/android/arch/lifecycle/group-index.xml adresinde listelenir.

POM ve JAR dosyalarını şu adresten de indirebilirsiniz:

maven.google.com/group_path/library/version /library-version.ext

Örneğin: maven.google.com/android/arch/lifecycle/derr/1.0.0/derr-1. 0.0.pom.

SDK Manager'dan çevrimdışı depo

Google Maven deposunda bulunmayan kitaplıklar için (genellikle eski kitaplık sürümleri) SDK Yöneticisi'nden çevrimdışı Google Repository paketini indirmeniz gerekir.

Ardından bu kitaplıkları her zamanki gibi dependencies blokunuza ekleyebilirsiniz.

Çevrimdışı kitaplıklar android_sdk/extras/ dosyasına kaydedilir.

Android Gradle eklentisiyle yerel bağımlılıklar

AAR kitaplıkları, Android Gradle Eklentisi'nin tüketebileceği yerel bağımlılıklar içerebilir. AGP, tüketicilerine yerel kitaplıkları gösteren AAR'ler üretebilir.

Yerel bağımlılıkları kullanma

C/C++ bağımlılıkları, Android Gradle eklentisi 4.0 sürümünden itibaren build.gradle dosyanıza bağlı AAR'lerden içe aktarılabilir. Gradle, bunları otomatik olarak yerel derleme sisteminin kullanımına sunar ancak derleme sisteminiz, içe aktarılan kitaplıkları ve üst bilgileri kullanacak şekilde yapılandırılmalıdır. C/C++ bağımlılıkları AAR'ler olarak dağıtıldığından, genel AAR'lerle ilgili aşağıdaki bağlantılar yararlı olabilir:

  • Özellikle AAR'yi yerel bir C/C++ bağımlılığı olarak kullanmak istediğinizde, genel AAR belgeleri ve bunu projenize nasıl entegre edeceğiniz için bir Android Kitaplığı oluşturma.
  • Özellikle uzaktan bağımlılıklar için, build.gradle dosyanıza bağımlılık ekleme hakkında bilgi edinmek için derleme bağımlılıkları ekleyin.

Bu belge, yerel derleme sisteminizi nasıl yapılandıracağınıza odaklanır ve projenizin Gradle derleme ortamına zaten bir C/C++ bağımlılık AAR'si eklediğiniz varsayılır.

AAR'lerde yerel bağımlılıklar

Gradle modüllerinizin AAR bağımlılıkları, uygulamanızın kullanabileceği yerel kitaplıkları açığa çıkarabilir. AAR'nin içindeki prefab dizini, yerel bağımlılığın üst bilgilerini ve kitaplıklarını içeren bir Prefab paketi içerir.

Her bağımlılık, bir veya daha fazla modülden oluşan en fazla bir Prefab paketi gösterebilir. Prefab modülü tek bir kitaplıktır. Bu kitaplık paylaşımlı, statik veya yalnızca başlık kitaplığı olabilir.

Kitaplıkları kullanabilmek için paket ve modül adlarının bilinmesi gerekir. Kural olarak, paket adı Maven yapı adıyla, modül adı da C/C++ kitaplık adıyla eşleşir ancak bu zorunlu değildir. Kullandığı adları belirlemek için bağımlılığın belgelerine bakın.

Sistem yapılandırması oluşturun

Android Gradle modülünüz için prefab özelliği etkinleştirilmiş olmalıdır.

Bunu yapmak için modülünüzün build.gradle dosyasındaki android bloğuna aşağıdaki kodu ekleyin:

Kotlin

buildFeatures {
  prefab = true
}

Modern

buildFeatures {
  prefab true
}

İsteğe bağlı olarak projenizin gradle.properties dosyasında bir sürümü yapılandırın:

android.prefabVersion=2.0.0

Genellikle seçilen AGP varsayılan sürümü gereksinimlerinize uygundur. Düzeltmeniz gereken bir hata veya istediğiniz yeni bir özellik varsa farklı bir sürüm seçmeniz gerekir.

Bir AAR'den içe aktarılan bağımlılıklar, CMAKE_FIND_ROOT_PATH aracılığıyla CMake'e maruz bırakılır. Bu değer, CMake çağrıldığında Gradle tarafından otomatik olarak ayarlanır. Bu nedenle, derlemeniz bu değişkeni değiştirirse değişken atamak yerine eklediğinizden emin olun.

Her bağımlılık, derlemenize bir yapılandırma dosyası paketi sunar. Bu dosyalar find_package komutuyla içe aktarılır. Bu komut, belirtilen paket adı ve sürümle eşleşen yapılandırma dosyası paketlerini arar ve tanımladığı hedefleri derlemenizde kullanılmak üzere sunar. Örneğin, uygulamanız libapp.so öğesini tanımlıyor ve cURL kullanıyorsa CMakeLists.txt aşağıdakileri içermelidir:

add_library(app SHARED app.cpp)

# Add these two lines.
find_package(curl REQUIRED CONFIG)
target_link_libraries(app curl::curl)

app.cpp artık #include "curl/curl.h" işlemini gerçekleştirebilir, libapp.so uygulama geliştirme sırasında libcurl.so ile otomatik olarak bağlanır ve libcurl.so uygulamaya dahil edilir.

AAR'lerde yerel kitaplıklar yayınlama

Yerel AAR'ler oluşturma olanağı ilk olarak AGP 4.1'de eklenmiştir.

Yerel kitaplıklarınızı dışa aktarmak için kitaplık projenizin build.gradle.kts dosyasının android bloğuna aşağıdakileri ekleyin:

Kotlin


buildFeatures {
    prefabPublishing = true
}

prefab {
    create("mylibrary") {
      headers = "src/main/cpp/mylibrary/include"
    }

    create("myotherlibrary") {
        headers = "src/main/cpp/myotherlibrary/include"
    }
}

Modern


buildFeatures {
    prefabPublishing true
}

prefab {
    mylibrary {
      headers "src/main/cpp/mylibrary/include"
    }

    myotherlibrary {
        headers "src/main/cpp/myotherlibrary/include"
    }
}

Bu örnekte, ndk-build veya CMake harici yerel derlemenizdeki mylibrary ve myotherlibrary kitaplıkları, derlemeniz tarafından oluşturulan AAR'de paketlenir ve her biri, başlıkları belirtilen dizinden kendi bağımlılarına dışa aktarır.

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

Bağımlılıklarınızı listelediğiniz sıra, her birinin önceliğini gösterir: Birinci kitaplık ikinciden daha önceliklidir, ikincisi üçüncüden daha önceliklidir vb. Bu sıra, kaynakların veya kitaplıklardan uygulamanızın manifest öğelerinin birleştirilmesi durumunda önemlidir.

Örneğin, projenizde aşağıdakiler belirtilmişse:

  • LIB_A ve LIB_B ürünlerine (bu sırayla) olan bağımlılık
  • LIB_A ise LIB_C ve LIB_D ürünlerine 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 olur:

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

Bu, hem LIB_A hem de LIB_B'nin LIB_C değerini geçersiz kılmasını sağlar. Ayrıca, LIB_A (buna bağlıdır) LIB_B'den daha yüksek önceliğe sahip olduğu için LIB_D, LIB_B değerinden daha yüksek önceliklidir.

Farklı proje kaynaklarından/bağımlılıklarından gelen manifestlerin nasıl birleştirildiği hakkında daha fazla bilgi için Birden fazla manifest dosyasını birleştirme bölümüne bakın.

Modül bağımlılıklarını görüntüleyin

Bazı doğrudan bağımlılıkların kendi bağımlılıkları olabilir. Bunlara geçişli bağımlılıklar denir. Gradle, her geçişli bağımlılığı manuel olarak bildirmenizi şart koşmak yerine, bunları otomatik olarak toplar ve sizin için ekler. Gradle için Android eklentisi, Gradle'ın belirli bir modül için çözdüğü bağımlılıkların listesini gösteren bir görev sunar.

Rapor her modül için bağımlılıkları derleme varyantına, test kaynağı kümesine ve sınıf yoluna göre de gruplandırır. Aşağıda, bir uygulama modülünün hata ayıklama derleme varyantına ait çalışma zamanı sınıf yolu ve göstergeli test kaynağı grubunun derleme sınıf yolunun örnek raporu verilmiştir.

debugRuntimeClasspath - Dependencies for runtime/packaging
+--- :mylibrary (variant: debug)
+--- com.google.android.material:material:1.0.0@aar
+--- androidx.appcompat:appcompat:1.0.2@aar
+--- androidx.constraintlayout:constraintlayout:1.1.3@aar
+--- androidx.fragment:fragment:1.0.0@aar
+--- androidx.vectordrawable:vectordrawable-animated:1.0.0@aar
+--- androidx.recyclerview:recyclerview:1.0.0@aar
+--- androidx.legacy:legacy-support-core-ui:1.0.0@aar
...

debugAndroidTest
debugAndroidTestCompileClasspath - Dependencies for compilation
+--- androidx.test.ext:junit:1.1.0@aar
+--- androidx.test.espresso:espresso-core:3.1.1@aar
+--- androidx.test:runner:1.1.1@aar
+--- junit:junit:4.12@jar
...

Görevi çalıştırmak için aşağıdaki adımları uygulayın:

  1. Görünüm > Araç Pencereleri > Gradle'ı seçin (veya araç pencereleri çubuğunda Gradle simgesini tıklayın).
  2. AppName > Görevler > android öğesini genişletin ve androidDependencies'i çift tıklayın. Gradle görevi yürüttükten sonra, çıkışı görüntülemek için Çalıştır penceresi açılır.

Gradle'da bağımlılıkları yönetme hakkında daha fazla bilgi için Gradle Kullanıcı Kılavuzu'nda Bağımlılık yönetimiyle ilgili temel bilgiler bölümüne bakın.

Bağımlılık çözümleme hatalarını düzeltme

Uygulama projenize birden fazla bağımlılık eklediğinizde bu doğrudan ve geçişli bağımlılıklar birbiriyle çakışabilir. Android Gradle eklentisi bu çakışmaları sorunsuz bir şekilde çözmeye çalışır ancak bazı çakışmalar, derleme zamanı veya çalışma zamanı hatalarına neden olabilir.

Hangi bağımlılıkların hatalara katkıda bulunduğunu araştırmanıza yardımcı olması için uygulamanızın bağımlılık ağacını inceleyin ve birden fazla kez görünen veya çakışan sürümleri olan bağımlılıkları arayın.

Yinelenen bağımlılığı kolayca belirleyemiyorsanız Android Studio'nun kullanıcı arayüzünü kullanarak kopya sınıfı içeren bağımlılıkları aşağıdaki gibi arayabilirsiniz:

  1. Menü çubuğundan Git > Sınıf'ı seçin.
  2. Pop-up arama iletişim kutusunda Proje olmayan öğeleri dahil et seçeneğinin yanındaki kutunun işaretli olduğundan emin olun.
  3. Yapı hatasında görünen sınıfın adını yazın.
  4. Sınıfı içeren bağımlılıklar için sonuçları inceleyin.

Aşağıdaki bölümlerde, karşılaşabileceğiniz farklı türlerde bağımlılık çözümlemeleri ve bunların nasıl düzeltileceği açıklanmaktadır.

Yinelenen sınıf hatalarını düzeltme

Bir sınıf, çalışma zamanı sınıf yolunda birden fazla kez görünüyorsa aşağıdakine benzer bir hata alırsınız:

Program type already present com.example.MyClass

Bu hata genellikle aşağıdaki durumlardan birinden kaynaklanır:

  • İkili bağımlılık, uygulamanızın doğrudan bağımlılık olarak dahil ettiği bir kitaplığı içerir. Örneğin, uygulamanız A Kitaplığı ve B Kitaplığı'na doğrudan bağımlı olduğunu beyan eder, ancak A Kitaplığı B kitaplığını zaten ikili olarak içerir.
    • Bu sorunu çözmek için doğrudan bağımlılık olarak B Kitaplığını kaldırın.
  • Uygulamanız, yerel bir ikili bağımlılığa ve aynı kitaplıkta uzaktan ikili bağımlılığa sahip.
    • Bu sorunu çözmek için ikili bağımlılıklardan birini kaldırın.

Sınıf yolları arasındaki çakışmaları düzeltme

Gradle, derleme sınıf yolunu çözümlediğinde önce çalışma zamanı sınıf yolunu çözümler ve sonucu kullanarak derleme sınıf yoluna hangi bağımlılık sürümlerinin eklenmesi gerektiğini belirler. Başka bir deyişle, çalışma zamanı sınıf yolu, aşağı akış sınıf yollarındaki özdeş bağımlılıklar için gerekli sürüm numaralarını belirler.

Uygulamanızın çalışma zamanı sınıf yolu, Gradle'ın, uygulamanın test APK'sı için çalışma zamanı sınıf yolundaki bağımlılıkları eşleştirmek için ihtiyaç duyduğu sürüm numaralarını da belirler. Sınıf yolları hiyerarşisi, Şekil 1'de açıklanmıştır.

Şekil 1. Birden çok sınıf yolunda görünen bağımlılıkların sürüm numaraları bu hiyerarşiye göre eşleşmelidir.

Örneğin, uygulamanız implementation bağımlılık yapılandırmasını kullanan bir bağımlılığın sürümünü içeriyorsa ve bir kitaplık modülü, runtimeOnly yapılandırmasını kullanarak bağımlılığın farklı bir sürümünü içeriyorsa aynı bağımlılığın farklı sürümlerinin birden fazla sınıf yolunda göründüğü bir çakışma meydana gelebilir.

Android Gradle eklentisi 3.3.0 ve sonraki sürümleri, çalışma zamanınızdaki bağımlılıkları çözerken ve zaman sınıf yollarını derlerken belirli aşağı akış sürümü çakışmalarını otomatik olarak düzeltmeye çalışır. Örneğin, çalışma zamanı sınıf yolu, Kitaplığı A 2.0 sürümünü ve derleme sınıf yolu da Kitaplık A sürüm 1.0'ı içeriyorsa eklenti, hataları önlemek için derleme sınıfı yolu üzerindeki bağımlılığı Kitaplık A sürüm 2.0'a otomatik olarak günceller.

Bununla birlikte, çalışma zamanı sınıf yolu, Kitaplık A sürüm 1.0'ı ve derleme sınıf yolu da Kitaplık A sürüm 2.0'ı içeriyorsa eklenti, derleme sınıf yolu üzerindeki bağımlılığı Kitaplık A sürüm 1.0'a düşürmez. Yine de aşağıdakine benzer bir hata alırsınız:

Conflict with dependency 'com.example.library:some-lib:2.0' in project 'my-library'.
Resolved versions for runtime classpath (1.0) and compile classpath (2.0) differ.

Bu sorunu çözmek için aşağıdakilerden birini yapın:

  • Bağımlılığın istediğiniz sürümünü, kitaplık modülünüze api bağımlılığı olarak ekleyin. Yani bağımlılığı yalnızca kitaplık modülünüz tanımlar ancak uygulama modülü de geçişli olarak kendi API'sine erişebilir.
  • Alternatif olarak, her iki modülde de bağımlılığı beyan edebilirsiniz ancak her modülün aynı bağımlı sürümünü kullandığından emin olmanız gerekir. Her bir bağımlılığın sürümlerinin projeniz boyunca tutarlı kalmasını sağlamak için proje genelinde mülkler yapılandırmayı düşünün.

Özel derleme mantığı uygulayın

Bu bölümde, Android Gradle eklentisini genişletmek veya kendi eklentinizi yazmak istediğinizde faydalı olacak ileri düzey konular açıklanmaktadır.

Varyant bağımlılıklarını özel mantıkta yayınlayın

Bir kitaplık, diğer projelerin veya alt projelerin kullanmak isteyebileceği işlevlere sahip olabilir. Kitaplık yayınlama, kitaplığın tüketicilerine sunulma sürecidir. Kitaplıklar, derleme zamanında ve çalışma zamanında tüketicilerinin hangi bağımlılıklara erişebileceğini kontrol edebilir.

Her sınıf yolunun geçişli bağımlılıklarını içeren iki ayrı yapılandırma vardır. Bu yapılandırmaların tüketiciler tarafından aşağıda açıklandığı gibi kitaplığı tüketmek için kullanılması gerekir:

  • variant_nameApiElements: Bu yapılandırma, derleme sırasında tüketicilere sunulan geçişli bağımlılıkları barındırır.
  • variant_nameRuntimeElements: Bu yapılandırma, çalışma zamanında tüketicilere sunulan geçişli bağımlılıkları barındırır.

Farklı yapılandırmalar arasındaki ilişkiler hakkında daha fazla bilgi edinmek için Java Kitaplığı eklenti yapılandırmaları bölümüne gidin.

Özel bağımlılık çözüm stratejileri

Bir projede aynı kitaplığın iki farklı sürümüne bağımlılık olabilir, bu da bağımlılık çakışmalarına yol açabilir. Örneğin, projeniz A modülünün 1 ve B modülünün 2 sürümünü kullanıyorsa ve A modülü geçişli olarak B modülün 3 sürümüne bağımlıysa bir bağımlılık sürümü çakışması ortaya çıkar.

Android Gradle eklentisi bu çakışmayı çözmek için aşağıdaki bağımlılık çözümü stratejisini kullanır: Eklenti, bağımlılık grafiğinde aynı modülün farklı sürümlerinin yer aldığını algıladığında varsayılan olarak sürüm numarası en yüksek olanı seçer.

Ancak bu strateji her zaman istediğiniz gibi çalışmayabilir. Bağımlılık çözümü stratejisini özelleştirmek için bir varyantın göreviniz için gerekli olan belirli bağımlılıklarını çözmek üzere aşağıdaki yapılandırmaları kullanın:

  • variant_nameCompileClasspath: Bu yapılandırma, belirli bir varyantın derleme sınıfı yolu için çözüm stratejisini içerir.
  • variant_nameRuntimeClasspath: Bu yapılandırma, belirli bir varyantın çalışma zamanı sınıf yolu için çözüm stratejisini içerir.

Android Gradle eklentisi, her bir varyantın yapılandırma nesnelerine erişmek için kullanabileceğiniz alıcılar içerir. Bu nedenle, aşağıdaki örnekte gösterildiği gibi bağımlılık çözünürlüğünü sorgulamak için varyant API'sini kullanabilirsiniz:

Kotlin

android {
    applicationVariants.all {
        // Return compile configuration objects of a variant.
        compileConfiguration.resolutionStrategy {
        // Use Gradle's ResolutionStrategy API
        // to customize how this variant resolves dependencies.
            ...
        }
        // Return runtime configuration objects of a variant.
        runtimeConfiguration.resolutionStrategy {
            ...
        }
        // Return annotation processor configuration of a variant.
        annotationProcessorConfiguration.resolutionStrategy {
            ...
        }
    }
}

Modern

android {
    applicationVariants.all { variant ->
        // Return compile configuration objects of a variant.
        variant.getCompileConfiguration().resolutionStrategy {
        // Use Gradle's ResolutionStrategy API
        // to customize how this variant resolves dependencies.
            ...
        }
        // Return runtime configuration objects of a variant.
        variant.getRuntimeConfiguration().resolutionStrategy {
            ...
        }
        // Return annotation processor configuration of a variant.
        variant.getAnnotationProcessorConfiguration().resolutionStrategy {
            ...
        }
    }
}

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

AGP, uygulamanızı derlerken uygulamanızda derlenen kitaplık bağımlılıklarını açıklayan meta veriler içerir. Play Console, uygulamanızı yüklerken bu meta verileri inceler ve uygulamanızın kullandığı SDK'lar ve bağımlılıklarla ilgili bilinen sorunlar hakkında uyarı vermek ve bazı durumlarda bu sorunları çözmek için uygulanabilir geri bildirimler sağlar.

Veriler sıkıştırılır, bir Google Play imzalama anahtarıyla şifrelenir ve sürüm uygulamanızın imzalama bloğunda depolanır. Güvenli ve olumlu bir kullanıcı deneyimi için bu bağımlılık dosyasını saklamanızı öneririz. Modülünüzün build.gradle.kts dosyasına aşağıdaki dependenciesInfo bloğunu ekleyerek kapsam dışında kalmayı seçebilirsiniz.

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 uygulamanızda üçüncü taraf SDK'ları kullanma konulu destek sayfamıza bakın.

SDK analizleri

Android Studio, Google Play SDK Dizini'te yazarları tarafından eski olarak işaretlenmiş herkese açık SDK'larla ilgili build.gradle dosyalarda ve Proje Yapısı İletişim kutusunda lint uyarıları gösterir. Eski sürümlerin kullanılması ileride Google Play Console'da içerik yayınlamanızı engelleyebileceği için bu, söz konusu bağımlılıkların güncellenmesine yönelik bir işarettir.