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 eklemeyi kolaylaştırır. Bağımlılıklar makinenizde veya uzak bir depoda bulunabilir. Bildirdikleri 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 da 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 ayrıntılı kavramsal kılavuz için Bağımlılık yönetimi için Gradle rehberini de 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 bir 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ık bildirir (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 elde edilen derlenen 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/ dizini içinde JAR dosyalarına bağımlılık bildirir (çünkü Gradle, yolları build.gradle.kts dosyasına göre okur).

Alternatif olarak, dosyaları tek tek de belirtebilirsiniz:

Kotlin

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

Modern

  implementation files('libs/foo.jar', 'libs/bar.jar')
  
Uzak 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ısaltılmış 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ı grubunda "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 yerel olarak mevcut değilse Gradle, 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) uzak siteden çeker.

Derleme zamanında bir AGP bağımlılığına bağımlıysanı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 ile birlikte, yerel bağımlılıklar da bu sayfada açıklanan şekilde içe aktarılabilir.

Yerel kitaplıkları açığa çıkaran bir AAR'ye bağlı olarak, yerel kitaplıklar externalNativeBuild tarafından kullanılan derleme sisteminde otomatik olarak kullanılabilir hale gelir. Kitaplıklara koddan erişmek için yerel derleme komut dosyalarınızda kitaplıklara bağlantı oluşturmanız gerekir. Bu sayfada 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 (yukarıda gösterilen implementation gibi) birini kullanarak bir kitaplık bağımlılığı bildirebilirsiniz. Her bir bağımlılık yapılandırması, Gradle'a bu bağımlılığın nasıl kullanılacağı konusunda farklı talimatlar sunar. Aşağıdaki tabloda, Android projenizde bir bağımlılık için kullanabileceğiniz yapılandırmaların her biri açıklanmaktadır. Tabloda bu yapılandırmalar, Android Gradle eklentisi 3.0.0 itibarıyla desteği sonlandırılan yapılandırmalarla da karşılaştırılır.

Yapılandırma Davranış
implementation Gradle, bu bağımlılığı derleme sınıf yoluna ekler ve bağımlılığı derleme çıkışı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 diğer modüller için yalnızca çalışma zamanında 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 derleme süresinde önemli iyileştirmeler yapılmasına neden olabilir. Ö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ı kullanmalıdır.

api Gradle, derleme sınıf yoluna ve derleme çıkışına bağımlılığı ekler. Modül api bağımlılığı içerdiğinde, modülün bu bağımlılığı diğer modüllere geçişli olarak dışa aktarmak istediğini Gradle'a bildirir. 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 gibi davranır (artık kullanımdan kaldırılmıştı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 derler. Bu nedenle, ç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 sunmak istemediğiniz sürece kitaplık modülleri, bunun yerine 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 özellik, 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. Ardından, sağlanmadığı durumlarda da çalışabilmesi için davranışını incelikle değiştirmelidir. Bu, kritik olmayan geçici bağımlılıkları eklemeyerek nihai uygulamanın boyutunu küçültmeye yardımcı olur. Bu yapılandırma, provided ile aynı şekilde davranır (artık kullanımdan kaldırılmıştı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 ile aynı şekilde davranmaktadır (artık kullanımdan kaldırılmıştır).
annotationProcessor

Ek açıklama işlemcisi olan bir kitaplığa bağımlılık eklemek için annotationProcessor yapılandırmasını kullanarak bunu ek açıklama işlemcisi sınıf yoluna eklemeniz gerekir. Bunun nedeni, bu yapılandırmanın kullanılması, derleme sınıf yolunu ek açıklama işleyici 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ının aşağıdaki dosyayı içermesi durumunda 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ına neden olur.

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 denetimlerini 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 AAR'nizdeki bir lint.jar dosyası ve pakette 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ına neden olur. Yayınlanan AAR'ye lint kontrollerini dahil etmek için daha önce lintChecks bağımlılık yapılandırmasını kullandıysanız bu bağımlılıkları taşımak yerine lintPublish yapılandırmasını kullanmanı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ırma kullanımdan kaldırılmıştır (AGP 1.0-4.2'de kullanılabilir).
compile Gradle, bu bağımlılığı derleme sınıf yoluna ve derleme çıkışına ekleyip diğer modüllere aktarır. Bu yapılandırmanın desteği sonlandırılmıştır (AGP 1.0-4.2 sürümlerinde 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 sürümlerinde 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 kümesi veya bir test kaynağı kümesi için bağımlılık bildirmek isterseniz yapılandırma adını büyük harfle yazmalı ve önüne derleme varyantının ya da test kaynağı kümesinin adını koymanız gerekir.

Örneğin, yalnızca "ücretsiz" ürün türünüze (uzaktan ikili bağımlılığı kullanarak) bir implementation bağımlılığı eklemek için aşağıdaki gibi 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 çeşidini ve derleme türünü birleştiren varyant için bağımlılık eklemek isterseniz configurations bloğunda yapılandırma adını ilk kullanıma hazırlamanı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 enstrümanlı testlerinize implementation bağımlılıkları eklemek için yöntem ş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ğı için 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 ile bağımlılığınızı aşağıdaki 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 artık android-apt eklentisini desteklememektedir.

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

Bağımsız değişkenleri bir ek açıklama işlemcisine 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ümleri kullanırken, dosya veya dizinleri temsil eden işlemci bağımsız değişkenlerini Gradle'ın CommandLineArgumentProvider arayüzünü kullanarak iletmeniz gerekir.

CommandLineArgumentProvider kullanıldığında, her bağımsız değişkene artımlı derleme özelliği türü ek açıklamaları uygulanarak artımlı ve önbelleğe alınmış temiz derlemelerin doğruluğu ve performansını iyileştirebilirsiniz. Bu sayede, ek açıklama işleyicisi de geliştirebilirsiniz.

Örneğin, aşağıdaki sınıf CommandLineArgumentProvider işlemini 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 uygulayan bir sınıf tanımladıktan sonra, aşağıda gösterildiği gibi bir örnek oluşturmanız ve annotationProcessorOptions.compilerArgumentProvider yöntemini kullanarak bu örneği 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ı uygulamanı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

İhtiyacınız olmayan ek açıklama işlemcilerini içeren derleme sınıf yolunda bağımlılıklarınız varsa aşağıdakini 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 derleme sınıf yolunda ek açıklama işlemcilerine izin verebilirsiniz. Ancak, bu özelliğin true olarak 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 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) gibi çeşitli bağımlılıklar içerebilir. Artık ihtiyacınız olmayan geçişli bağımlılıkları hariç tutmak için exclude anahtar kelimesini aşağıda belirtildiği şekilde 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. Çünkü test yapılandırması (ö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 aşağıda gösterildiği gibi yürütme sırasında bunu 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 edilmeyen geçişli bağımlılıkları atlamak 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ü için bağımlılıkların yapılandırılması diğer tüm modüllerinkine benzer. Yani Wear OS modülleri, implementation ve compileOnly gibi aynı bağımlılık yapılandırmalarını kullanır.

Wear modülleri, varyanta 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 dosyaları settings.gradle dosyanızın dependencyResolutionManagement { repositories {...} } bloğunda belirtilen çevrimiçi depolardaki dosyalarda 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 Graadle, bağımlılığı A deposundan indirir.

Aşağıda gösterildiği gibi, yeni Android Studio projelerinde varsayılan olarak Google'ın Maven deposu, 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 almak istiyorsanız mavenLocal() komutunu 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 gibi de tanımlayabilirsiniz:

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 son sürümleri Google'ın Maven deposunda mevcuttur:

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

Derlemenize bu kitaplıklardan birini eklemek için Google'ın Maven deposunu üst düzey build.gradle.kts dosyanıza 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/'.
    }
}

Daha sonra, istediğiniz kitaplığı modülünüzün dependencies bloğuna ekleyin. Örneğin,appcompat 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ışıyorsanız ve bağımlılığınız başarısız olursa Maven deposunda mevcut değildir ve kitaplığı çevrimdışı depodan almanız gerekir.

Programlı erişim

Google'ın Maven yapılarına programatik 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 olarak adlandırılır.

SDK Yöneticisi'nden çevrimdışı depo

Google Maven deposunda bulunmayan kitaplıklarda (genellikle daha eski kitaplık sürümleri) çevrimdışı Google Repository paketini SDK Yöneticisi'nden 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, yerel kitaplıkları tüketicilere gösteren AAR'ler de oluşturabilir.

Yerel bağımlılıkları kullanma

Android Gradle eklentisi 4.0 ile başlayarak, C/C++ bağımlılıkları build.gradle dosyanıza bağlı AAR'lerden içe aktarılabilir. Gradle, bunları otomatik olarak yerel derleme sisteminde kullanılabilir hale getirir 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 için Android Kitaplığı oluşturma ve bu kitaplığı projenize entegre etme.
  • Ö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 odaklanmaktadı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 kullanması için yerel kitaplıkları açığa çıkarabilir. AAR'nin içindeki prefab dizini, yerel bağımlılığın başlıklarını ve kitaplıklarını içeren bir Prefab paketi içerir.

Her bağımlılık, bir veya daha fazla modül içeren en fazla bir Prefab paketi sunabilir. Prefab modülü paylaşılan, statik veya yalnızca başlık kitaplığı olabilen tek bir kitaplıktır.

Kitaplıklardan yararlanabilmek 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ı öğrenmek için bağımlılığın belgelerine bakın.

Derleme sistemi yapılandırması

prefab özelliği, Android Gradle modülünüz için 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ü ihtiyaçlarınıza 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 üzerinden CMake'e uygulanı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ştiriyorsa atamak yerine değişkeni eklediğinizden emin olun.

Her bağımlılık, derlemenize bir yapılandırma dosyası paketi sunar. Bunlar find_package komutuyla içe aktarılır. Bu komut, belirtilen paket adı ve sürümüyle eşleşen yapılandırma dosyası paketlerini arar ve tanımladığı hedefleri derlemenizde kullanılmak üzere gösterir. Örneğin, uygulamanız libapp.so öğesini tanımlıyorsa 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" yapabiliyor. libapp.so, derleme sırasında libcurl.so ile otomatik olarak bağlanacak ve libcurl.so uygulamaya dahil edilecek.

AAR'lerde yerel kitaplıklar yayınlama

Yerel AAR'ler oluşturma özelliği 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ındaki android bloğuna şunu 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 bağlı dosyaları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: İlk kitaplık ikinciden daha önceliklidir, ikincisi üçüncüden daha önceliklidir ve bu şekilde devam eder. Bu sıra, kaynakların birleştirilmesi veya kitaplıklardan uygulamanıza manifest öğelerinin birleştirilmesi durumunda önemlidir.

Örneğin, projenizde aşağıdakiler tanımlanıyorsa:

  • LIB_A ve LIB_B bağımlılıkları (bu sırayla)
  • LIB_A ise LIB_C ve LIB_D öğelerine (bu sırayla) bağlıdır
  • Ayrıca LIB_B, LIB_C aracına da bağlıdır

Ardından, 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 sayede hem LIB_A hem de LIB_B, LIB_C değerini geçersiz kılabilir. Ayrıca LIB_A (buna bağlıdır) LIB_B ile karşılaştırıldığında daha yüksek önceliğe sahip olduğundan LIB_D yine LIB_B önceliğine göre daha ö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üleme

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 bir geçişli bağımlılığı manuel olarak bildirmenizi gerektirmek yerine, bunları sizin için otomatik olarak toplayıp ekler. Gradle Android eklentisi, Gradle'ın belirli bir modül için çözdüğü bağımlılıkların listesini gösteren bir görev sağlar.

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ğı kümesinin sınıf yolunu derleme ile ilgili örnek rapor bulunmaktadır.

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 > Tasks > android'i 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çılmalıdı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önetimi ile ilgili temel bilgiler bölümüne göz atı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 Gezinme > 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. Sonuçları, sınıfı içeren bağımlılıklar için inceleyin.

Aşağıdaki bölümlerde, karşılaşabileceğiniz farklı türlerde bağımlılık çözümü hataları 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 program bağımlılığı, uygulamanızın aynı zamanda doğrudan bağımlılık olarak içerdiği bir kitaplığı içerir. Örneğin, uygulamanız A Kitaplığı ve B Kitaplığı'na doğrudan bağımlılık beyan ediyor, ancak A Kitaplığı B Kitaplığı'nı ikili kodunda zaten içeriyor.
    • Bu sorunu çözmek için doğrudan bağımlılık olarak B Kitaplığı'nı kaldırın.
  • Uygulamanız hem yerel bir ikili program bağımlılığı hem de aynı kitaplıkta uzaktan ikili program bağımlılığı bulunuyor.
    • 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. Diğer 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ının hiyerarşisi Şekil 1'de açıklanmıştır.

Şekil 1. Birden fazla 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ık sürümü içerdiğinde ve bir kitaplık modülü runtimeOnly yapılandırmasını kullanarak bağımlılığın farklı bir sürümünü içerdiğinde, aynı bağımlılığın farklı sürümlerinin birden fazla sınıf yolunda göründüğü bir çakışma meydana gelebilir.

Android Graadle eklentisi 3.3.0 ve sonraki sürümleri, çalışma zamanınızdaki bağımlılıkları çözümlerken 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ık A sürüm 2.0'ı, derleme sınıf yolu ise Kitaplığı A sürüm 1.0'ı içeriyorsa eklenti, hataları önlemek için derleme sınıf yoluna olan bağımlılığı otomatik olarak Kitaplık A sürüm 2.0 ile 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, Kitaplık A sürüm 2.0'ı içeriyorsa eklenti, derleme sınıf yolunun bağımlılığını Kitaplık A sürüm 1.0'a düşürmez ve 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ığı bildirebilirsiniz ancak her modülün bağımlılığın aynı 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 yararlı olabilecek ileri düzey konular açıklanmaktadır.

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

Bir kütüphane, diğer projelerin veya alt projelerin kullanmak isteyebileceği işlevlere sahip olabilir. Kitaplık yayınlama, kitaplığın tüketicilere sunma 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üketmesi 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ğlı bir bağımlılık olabilir ve bu durum, bağımlılık çakışmalarına yol açabilir. Örneğin, projeniz A modülünün 1 sürümü ile B modülünün sürüm 2'sini bağdaşıyorsa ve A modülü geçişli olarak modülü B sürümünü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 şu 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 en yüksek sürüm numarasına sahip 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 gereken 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 eklentisinde, her bir varyantın yapılandırma nesnelerine erişmek için kullanabileceğiniz alıcılar bulunur. 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

Uygulamanızı oluştururken AGP, 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 inceleyerek uygulamanızın kullandığı bağımlılıklar ve SDK'larla ilgili bilinen sorunlar hakkında uyarı verir 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 saklanı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, yazarları tarafından Google Play SDK Dizini'nde eski olarak işaretlenmiş herkese açık SDK'lar için build.gradle.kts ile build.gradle dosyalarında ve Proje Yapısı İletişim Kutusu'nda lint uyarıları gösterir. Eski sürümlerin kullanılması, gelecekte Google Play Console'da içerik yayınlamanızı engelleyebileceği için bu, söz konusu bağımlıların güncellenmesine yönelik bir sinyaldir.