Android Studio'daki Gradle derleme sistemi, harici ikili programları veya diğer kitaplık modüllerini bağımlılık olarak derlemenize dahil etmenize olanak tanır. Bağımlılıklar makinenizde veya uzak bir depoda bulunabilir ve beyan ettikleri tüm geçişli bağımlılıklar da otomatik olarak dahil edilir. Bu sayfada, Android Gradle eklentisine (AGP) özgü davranışlar ve yapılandırmalarla ilgili ayrıntılar da dahil olmak üzere Android projenizde bağımlılıkların nasıl kullanılacağı açıklanmaktadır. Gradle bağımlılıkları hakkında daha ayrıntılı bir kavramsal kılavuz için Bağımlılık yönetimi için Gradle kılavuzu'nu inceleyin ancak Android projenizin yalnızca bu sayfada tanımlanan bağımlılık yapılandırmalarını kullanması gerektiğini unutmayın.
Kitaplık veya eklenti bağımlılığı ekleme
Derleme bağımlılıklarını eklemenin ve yönetmenin en iyi yolu, yeni projelerin varsayılan olarak kullandığı yöntem olan sürüm kataloglarını kullanmaktır. Bu bölümde, Android projeleri için kullanılan en yaygın yapılandırma türleri ele alınmaktadır. Diğer seçenekler için Gradle belgelerine bakın. Sürüm kataloglarını kullanan bir uygulama örneği için Now in Android'e bakın. Sürüm katalogları olmadan ayarlanmış derleme bağımlılıklarınız varsa ve çok modüllü bir projeniz varsa taşıma yapmanızı öneririz.
Yerel bağımlılıkları (yaygın değildir) ekleme ve yönetme ile ilgili bilgi için Yerel bağımlılıklar başlıklı makaleyi inceleyin.
Aşağıdaki örnekte projeye bir uzak ikili program bağımlılığı (Jetpack Macrobenchmark kitaplığı), yerel kitaplık modülü bağımlılığı (myLibrary) ve bir eklenti bağımlılığı (Android Gradle eklentisi) eklenmiştir. Bu bağımlılıkları projenize eklemek için genel adımlar şunlardır:
Sürüm kataloğu dosyasının
[versions]bölümünde, istediğiniz bağımlılık sürümü için bir takma ad ekleyin. Bu dosyanın adılibs.versions.tomlşeklindedir (Proje görünümündegradledizininin altında veya Android görünümünde Gradle Komut Dosyaları altında):[versions] agp = "8.3.0" androidx-macro-benchmark = "1.2.2" my-library = "1.4" [libraries] ... [plugins] ...Takma adlar tire veya alt çizgi içerebilir. Bu takma adlar, derleme komut dosyalarında referans verebileceğiniz iç içe yerleştirilmiş değerler oluşturur. Referanslar, kataloğun adıyla başlar.
libs.versions.tomlifadesininlibskısmı. Tek sürüm kataloğu kullanırken varsayılan "libs" değerini korumanızı öneririz.libs.versions.tomldosyasının[libraries](uzak ikili programlar veya yerel kitaplık modülleri için) ya da[plugins](eklentiler için) bölümlerinde bağımlılık için bir takma ad ekleyin.[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ıran yayınlanmış bir Malzeme Listesi'nde (BOM) bulunur. Sürüm kataloğunuza ve derleme dosyalarınıza bir BOM ekleyebilir ve bu sürümleri sizin için yönetmesini sağlayabilirsiniz. Ayrıntılar için BoM'u kullanma başlıklı makaleyi inceleyin.
Bağımlılığı gerektiren modüllerin derleme komut dosyasına bağımlılık takma adı için bir referans ekleyin. Takma adı bir derleme komut dosyasından referans verirken takma adın alt çizgilerini ve tirelerini noktalara dönüştürün. Modül düzeyindeki derleme komut dosyamız şu şekilde görünür:
Kotlin
plugins { alias(libs.plugins.androidApplication) } dependencies { implementation(libs.androidx.benchmark.macro) implementation(libs.my.library) }
Modern
plugins { alias 'libs.plugins.androidApplication' } dependencies { implementation libs.androidx.benchmark.macro implementation libs.my.library }
Eklenti referansları, katalog adından sonra
pluginsiçerir ve sürüm referansları, katalog adından sonraversionsiçerir (Sürüm referansları yaygın değildir. Sürüm referansları örnekleri için Aynı sürüm numaralarına sahip bağımlılıklar bölümüne bakın.) Kitaplık referanslarılibrariesniteleyicisi içermez. Bu nedenle, kitaplık takma adının başındaversionsveyapluginskullanamazsınız.
Bağımlılıkları yapılandırma
dependencies bloğunda, birkaç farklı bağımlılık yapılandırmasından birini (ör. daha önce gösterilen implementation) kullanarak kitaplık bağımlılığı tanımlayabilirsiniz. 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 açıklanmaktadır.
| Yapılandırma | Davranış |
|---|---|
implementation |
Gradle, bağımlılığı derleme sınıf yoluna ekler ve bağımlılığı derleme çıkışına paketler. Modülünüz bir implementation bağımlılığı yapılandırdığında Gradle'a, modülün derleme zamanında bağımlılığı diğer modüllere sızdırmasını istemediğinizi bildirir. Yani bağımlılık, mevcut modüle bağlı olan diğer modüller tarafından kullanılamaz.
|
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'a, modülün bu bağımlılığı diğer modüllere geçişli olarak aktarmak istediğini bildirir. Böylece bağımlılık, hem çalışma zamanında hem de derleme süresinde diğer modüller tarafından kullanılabilir.
Bu yapılandırmayı dikkatli bir şekilde ve yalnızca diğer üst tüketicilere geçişli olarak aktarmanız gereken bağımlılıklarla kullanın. Bir |
compileOnly |
Gradle, bağımlılığı yalnızca derleme sınıf yoluna ekler
(yani derleme çıkışına eklenmez). Bu, bir Android modülü oluştururken ve derleme sırasında bağımlılığa ihtiyaç duyduğunuzda kullanışlıdır ancak çalışma zamanında mevcut olması isteğe bağlıdır. Örneğin, yalnızca derleme süresi ek açıklamalarını içeren bir kitaplığa bağımlıysanız (genellikle kod oluşturmak için kullanılır ancak derleme çıktısına dahil edilmez) bu kitaplığı compileOnly olarak işaretleyebilirsiniz.
Bu yapılandırmayı kullanırsanız kitaplık modülünüz, bağımlılığın kullanılabilir olup olmadığını kontrol etmek için bir çalışma zamanı koşulu içermelidir. Ardından, bağımlılık sağlanmazsa çalışmaya devam edebilmesi için davranışını kontrollü bir şekilde değiştirmelidir. Bu, kritik olmayan geçici bağımlılıkları eklemeyerek nihai uygulamanın boyutunu küçültmeye yardımcı olur.
Not: |
runtimeOnly |
Gradle, bağımlılığı yalnızca derleme çıkışına ekler ve çalışma zamanında kullanılır. Yani derleme sınıf yoluna eklenmez.
Bu, Android'de nadiren kullanılır ancak sunucu uygulamalarında günlük kaydı uygulamaları sağlamak için yaygın olarak kullanılır. Örneğin, bir kitaplık, uygulama içermeyen bir Logging API kullanabilir. Bu kitaplığın kullanıcıları, kitaplığı implementation bağımlılığı olarak ekleyebilir ve kullanılacak gerçek günlük kaydı uygulaması için bir runtimeOnly bağımlılığı ekleyebilir.
|
ksp |
Bu yapılandırmalar, kodunuz derlenmeden önce kodunuzdaki ek açıklamaları ve diğer simgeleri işleyen kitaplıklar sağlar. Genellikle kodunuzu doğrular veya ek kod oluşturarak yazmanız gereken kod miktarını azaltırlar. Bu tür bir bağımlılık eklemek için Android Gradle eklentisi, JAR dosyasında aşağıdaki dosya varsa bağımlılığın bir ek açıklama işleyicisi olduğunu varsayar:
Eklenti, derleme sınıf yolunda bir ek açıklama işleyicisi algılarsa derleme hatası oluşturur.
Hangi yapılandırmayı kullanacağınıza karar verirken aşağıdakileri göz önünde bulundurun:
Ek açıklama işleyicileri kullanma hakkında daha fazla bilgi için Ek açıklama işleyicileri ekleme başlıklı makaleyi inceleyin. |
lintChecks |
Gradle'ın Android uygulama projenizi oluştururken yürütmesini istediğiniz lint kontrollerini içeren bir kitaplık eklemek için bu yapılandırmayı kullanın.
|
lintPublish |
Gradle'ın bir lint.jar dosyasına derlemesini ve AAR'nizde paketlemesini istediğiniz lint kontrollerini dahil etmek için Android kitaplık projelerinde bu yapılandırmayı kullanın. Bu, AAR'nizi kullanan projelerin de bu lint kontrollerini 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ı kullanıyorsanız bu bağımlılıkları lintPublish yapılandırmasını kullanacak şekilde taşımanız gerekir.
Kotlindependencies { // 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")) } Moderndependencies { // 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 değişkeni için bağımlılıkları yapılandırma
Yukarıdaki yapılandırmaların tümü, bağımlılıkları tüm derleme değişkenlerine uygular. Bunun yerine, yalnızca belirli bir derleme değişkeni kaynak grubu veya test kaynak grubu için bağımlılık tanımlamak istiyorsanız yapılandırma adını büyük harfle yazmanız ve önüne derleme değişkeninin veya test kaynak grubunun adını eklemeniz gerekir.
Örneğin, implementation yapılandırmasını kullanarak yalnızca "ücretsiz" ürün türünüze uzak ikili bağımlılık eklemek için şunu kullanın:
Kotlin
dependencies { freeImplementation("com.google.firebase:firebase-ads:21.5.1") }
Modern
dependencies { freeImplementation 'com.google.firebase:firebase-ads:21.5.1' }
Ancak bir ürün türü ile derleme türünü birleştiren bir değişken için bağımlılık eklemek istiyorsanı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")) }
Modern
configurations { // Initializes a placeholder for the freeDebugImplementation dependency configuration. freeDebugImplementation {} } dependencies { freeDebugImplementation project(":free-support") }
Yerel testleriniz ve araçlı testleriniz için implementation bağımlılıklarını eklemek istiyorsanız
ş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.6.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.6.1' }
Ancak bu durumda bazı yapılandırmalar mantıklı değildir. Örneğin, diğer modüller androidTest modülüne 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'.
Bağımlılık sırası
Bağımlılıklarınızı listelediğiniz sıra, her birinin önceliğini gösterir. Örneğin, ilk kitaplık ikinciden daha yüksek önceliğe sahiptir ve ikinci kitaplık da üçüncüden daha yüksek önceliğe sahiptir. Bu sıra, kaynaklar birleştirildiğinde veya manifest öğeleri kitaplıklardan uygulamanızda birleştirildiğinde önemlidir.
Örneğin, projeniz aşağıdakileri beyan ediyorsa:
LIB_AveLIB_B'e bağımlılık (bu sırayla)LIB_A,LIB_CveLIB_D'ye bağlıdır (bu sırayla)LIB_B,LIB_C'e de bağlıdır
Bu durumda, düz bağımlılık sırası aşağıdaki gibi olur:
LIB_ALIB_DLIB_BLIB_C
Bu sayede hem LIB_A hem de LIB_B,
LIB_C kuralını geçersiz kılabilir ve LIB_D,
LIB_B kuralından daha yüksek önceliğe sahip olmaya devam eder. Bunun nedeni, kuralına bağlı olan LIB_A kuralının
LIB_B kuralından daha yüksek önceliğe sahip olmasıdır.
Farklı proje kaynaklarından veya bağımlılıklarından gelen manifest dosyalarının nasıl birleştirildiği hakkında daha fazla bilgi için Birden fazla manifest dosyasını birleştirme başlıklı makaleyi inceleyin.
Google 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 verileri ekler. Play Console, uygulamanızı yüklerken bu meta verileri inceleyerek uygulamanızın kullandığı SDK'lar ve bağımlılıklarla ilgili bilinen sorunlar hakkında uyarılar verir ve bazı durumlarda bu sorunları çözmek için uygulanabilir geri bildirimler sağlar.
Veriler sıkıştırılır, Google Play imzalama anahtarıyla şifrelenir ve yayın uygulamanızın imzalama bloğunda saklanır. Güvenli ve olumlu bir kullanıcı deneyimi için bu bağımlılıklar dosyasını saklamanızı öneririz. Modülünüzün build.gradle.kts dosyasına aşağıdaki dependenciesInfo bloğunu ekleyerek bu özelliği devre dışı bırakabilirsiniz.
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 ile ilgili destek sayfamızı inceleyin.
SDK analizleri
Android Studio, Google Play SDK Dizini'ndeki herkese açık SDK'lar için sürüm kataloğu dosyasında ve Proje Yapısı İletişim Kutusu'nda aşağıdaki sorunlar geçerli olduğunda lint uyarıları gösterir:
- SDK'lar, yazarları tarafından eski olarak işaretlenmiştir.
- SDK'lar Google Play politikalarını ihlal ediyor.
- SDK'larda bilinen güvenlik açıkları var.
- SDK'ların desteği, geliştiricileri tarafından sonlandırıldı.
Bu uyarılar, söz konusu bağımlılıkları güncellemeniz gerektiğine dair sinyallerdir. Eski sürümleri kullanmak, gelecekte Google Play Console'da yayın yapmanızı engelleyebilir.
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 basit projelerde bunlara ihtiyaç duyulmayabilir. Sürüm kataloglarını kullanmayan bir derleme dosyası örneği:
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")) }
Modern
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ı, "com.example.android" ad alanı grubundaki "app-magic" kitaplığının 12.3 sürümüne bağımlılık bildiriyor. Uzak ikili program bağımlılık beyanı, aşağıdakilerin kısaltmasıdır:
Kotlin
implementation(group = "com.example.android", name = "app-magic", version = "12.3")
Modern
implementation group: 'com.example.android', name: 'app-magic', version: '12.3'
Derleme dosyası, "mylibrary" adlı bir Android kitaplık modülüne olan bağımlılığı da tanımlar. Bu ad, settings.gradle.kts dosyanızda include: ile tanımlanan kitaplık adıyla eşleşmelidir. Uygulamanızı oluşturduğunuzda derleme sistemi, kitaplık modülünü derler ve elde edilen derlenmiş içerikleri uygulamada paketler.
Derleme dosyası, Android Gradle eklentisine (com.application.android) olan bağımlılığı da tanımlar. Aynı eklentiyi kullanan birden fazla modülünüz varsa tüm modüllerde derleme sınıf yolunda eklentinin yalnızca tek bir sürümü bulunabilir. Sürümü her bir modül derleme komut dosyasında belirtmek yerine, sürümle birlikte kök derleme komut dosyasına eklenti bağımlılığını eklemeniz ve uygulamamanız gerekir. apply false eklemek, Gradle'a eklentinin sürümünü not etmesini ancak kök derlemede kullanmamasını söyler.
Genellikle kök derleme komut dosyası, bu plugins bloğu dışında boştur.
Kotlin
plugins { id("org.jetbrains.kotlin.android") version "1.9.0" apply false }
Modern
plugins { id 'com.android.application' version '8.3.0-rc02' apply false }
Tek modüllü bir projeniz varsa sürümü modül düzeyindeki derleme komut dosyasında açıkça belirtebilir ve proje düzeyindeki derleme komut dosyasını boş bırakabilirsiniz:
Kotlin
plugins { id("com.android.application") version "8.3.0" }
Modern
plugins { id 'com.android.application' version '8.3.0-rc02' }