Android Studio'da Gradle Bağımlılıklarıyla Çalışma
Kısaca özetlemek gerekirse: Kütüphaneleri build.gradle(.kts) içindeki dependencies bloğu aracılığıyla ekleyin; versions, BOM gibi eklentiler ve merkezi yönetim (Version Catalog) ile sürümleri güncelleyin; exclusion, force veya resolutionStrategy kullanarak çatışmaları çözün ve ./gradlew
Bağımlılıklarla çalışmak tekrarlayan bir dizi işlemden oluşur: koordinatları bulma, bunları modüle ekleme, senkronize etme ve test etme. Aşağıda kısa adım adım talimatlar ve hazır komutlar yer almaktadır.
İçindekiler {{TOC_AUTOMATIC}}
Kütüphaneleri Nasıl Eklersiniz
- Kütüphane dokümantasyonundan koordinatları (group:artifact:version) bulun.
- Kök dizinde depoların bağlı olduğundan emin olun (settings.gradle.kts veya build.gradle.kts): google(), mavenCentral().
- Modüle bağımlılığı ekleyin (Kotlin DSL önerilir):
dependencies {
implementation("androidx.core:core-ktx:1.13.1")
implementation("com.squareup.retrofit2:retrofit:2.11.0")
implementation("com.squareup.retrofit2:converter-gson:2.11.0")
}
- "Sync Project with Gradle Files" düğmesine tıklayın ve Build > Make Project işlemini gerçekleştirin.
- Kütüphanenin Project Structure > Dependencies bölümünde göründüğünü ve çalışma zamanında çalıştığını doğrulayın.
Kotlin DSL (build.gradle.kts) kullanın: otomatik tamamlama sunar ve daha az sözdizimi hatası yapmanıza olanak tanır.
Bağımlılıkları Güvenli Şekilde Nasıl Güncellersiniz
Otomasyon ve aşamalı yaklaşım, başarılı bir güncelleme için anahtar unsurlardır.
-
Araçlar:
- Raporlama için versions eklentisi (com.github.ben-manes.versions): ./gradlew dependencyUpdates
- Gradle/AGP eklentisini güncellemek için Android Studio'daki AGP Upgrade Assistant.
- Uygun sürüm kümeleri için BOM (örneğin Firebase için): implementation(platform("com.google.firebase:firebase-bom:VERSION")).
- Sürümlerin merkezi yönetimi için Version Catalog (libs.versions.toml).
-
Süreç:
- Her seferinde 1–2 kütüphaneyi güncelleyin.
- Değişiklik günlüğünü (changelog) okuyun ve CI/yerel testleri çalıştırın.
- Bir şey bozulursa — VCS üzerinden geri alın.
Eklentinin kök build.gradle.kts dosyasında kullanım örneği:
plugins {
id("com.github.ben-manes.versions") version "0.51.0"
}
Çalıştırma: ./gradlew dependencyUpdates
Üretim ortamında her şeyi aynı anda yükseltmeyin — aşamalı olarak ve testlerle ilerleyin.
Gradle Çatışmalarını Nasıl Teşhis Edip Çözersiniz
Tipik belirtiler: Duplicate class, NoSuchMethodError, Version mismatch, Resolution failed.
Teşhis adımları:
- Bağımlılık ağacını inceleyin: ./gradlew :app:dependencies --configuration implementation
- Ayrıntılar için --stacktrace ile derleme yapın: ./gradlew assembleDebug --stacktrace
Temel çözüm yolları:
- Zorunlu sürüm (force):
dependencies {
implementation("com.google.code.gson:gson:2.10.1")
}
configurations.all {
resolutionStrategy {
force("com.google.code.gson:gson:2.10.1")
}
}
- Geçişli bağımlılıkların hariç tutulması:
implementation("some.library:artifact:1.0") {
exclude(group = "com.google.code.gson", module = "gson")
}
- Modül kümeleri için BOM ve tek bir sürüm belirleme noktası.
- Sürüm farklılıklarından kaçınmak için libs.versions.toml veya buildSrc aracılığıyla sürümlerin merkezileştirilmesi.
Sürüm çatışmasını görüntülemek için teknik komut:
- ./gradlew :app:dependencies --configuration implementation
Tablo — Tipik çatışmalar ve hızlı çözümler
| Çatışma | Neden | Çözüm |
|---|---|---|
| Farklı Gson sürümleri | Geçişli bağımlılıklar farklı sürümleri çekiyor | force("com.google.code.gson:gson:2.10.1") veya exclude ile istenen sürümü ekleme |
| Kotlin stdlib uyumsuzluğu | Modüllerde farklı kotlin_version değerleri | Kök dizindeki kotlin_version değerini senkronize etme |
| OkHttp vs Glide/Coil | Taşıma katmanının çoğaltılması | okhttp'i bir modülden hariç tutma veya sürümleri eşitleme |
| Firebase modülleri | Modül sürümlerinin tutarsızlığı | Firebase BOM kullanma |
Sık Yapılan Hatalar
- settings.gradle.kts içindeki depolar senkronize edilmedi → Resolution failed.
- Çok sayıda kütüphane aynı anda güncellendi → derlemeyi neyin bozduğu belirsiz hale geldi.
- Gereksiz yere api yerine implementation kullanıldı → APK boyutu arttı ve daha fazla geçişli çatışma oluştu.
- İnternetten kopyalanan satırların sürüm ve AGP/Kotlin uyumluluğu kontrol edilmeden kullanılması.
SSS
-
Hangi kütüphanenin çatışan bağımlılığı çektiğini hızlıca nasıl görebilirim?
- ./gradlew :app:dependencies komutunu çalıştırın ve ağaçta sürüm kaynağını bulun.
-
BOM'u ne zaman kullanmak daha iyidir?
- Kütüphane bir dizi modül sunduğunda (örneğin Firebase) ve tutarlı sürüm yönetimi önemli olduğunda.
-
Her zaman force kullanmalı mıyım?
- Hayır. force son çaredir; önce exclude ve Catalog/BOM aracılığıyla standartlaştırmayı deneyin.
-
Çok sayıda modülde sürümleri nasıl yönetebilirim?
- Version Catalog (libs.versions.toml) veya buildSrc — sürümler ve artefaktlar için merkezi bir konum.
Bu makaledeki araçlar, komutlar ve şablonlar, kütüphaneleri hızlıca eklemenize, sürümleri dikkatlice güncellemenize ve çatışmaları çözmenize yardımcı olacaktır. Belirli bir çatışma çözülmüyorsa, ./gradlew build --stacktrace çıktısını ve bağımlılık ağacını ekleyin; bu, teşhisi hızlandıracaktır. İyi geliştirmeler!