Android Studio'da Gradle nasıl yapılandırılır ve bağımlılıklar doğru şekilde nasıl yönetilir

Kerem Aydın·9 Temmuz 2026·⏱3 dk

Kısa cevap: Gradle, kök dosyalar (settings.gradle, build.gradle veya build.gradle.kts, gradle.properties) ve modül düzeyindeki build.gradle dosyaları aracılığıyla yapılandırılır; bunlarda eklentiler, android{} bloğu (compileSdk, defaultConfig), buildTypes ve productFlavors tanımlanır, bağımlılıklar ise dependencies bloğunda belirtilir; sürüm yönetimini tek bir kaynağa taşımak (version catalog, buildSrc veya constants) daha iyidir.

Projedeki Gradle yapısı ve her dosyanın sorumluluğu

  • settings.gradle / settings.gradle.kts — modüllerin eklenmesi, pluginManagement ve dependencyResolutionManagement.
  • Kök build.gradle — depolar, eklenti ayarları, ortak betikler (eski şemalar için bazen classpath).
  • gradle.properties — performans bayrakları ve kullanıcı tanımlı özellikler (API_URL vb.).
  • Modül düzeyindeki build.gradle (app) — eklentiler, android{}, buildTypes, productFlavors, dependencies.

Modülde minimal bir android bloğu örneği:

plugins { id 'com.android.application' id 'org.jetbrains.kotlin.android' }

android {
  namespace "com.example.app"
  compileSdk 34
  defaultConfig {
    applicationId "com.example.app"
    minSdk 24
    targetSdk 34
    versionCode 1
    versionName "1.0"
  }
}

Proje büyükse modülerlik uygulayın (feature/core/library) ve tek bir sürüm kaynağı kullanın (libs.versions.toml veya buildSrc).

buildTypes, productFlavors ve derleme varyantlarının pratik yapılandırması

  • buildTypes: genellikle debug ve release. Debug'da debuggable etkinleştirin, minify devre dışı bırakın; release'de minify etkinleştirin ve proguard/consumer-rules kullanın.
  • productFlavors: ortamlar (dev/prod), sürümler (free/paid) veya pazarlar için kullanılır. flavorDimensions mutlaka tanımlayın.

Kombinasyon örneği:

android {
  flavorDimensions "env"
  productFlavors {
    dev { dimension "env"; applicationIdSuffix ".dev"; buildConfigField "String","BASE_URL","\"https://dev.api\""}
    prod { dimension "env"; buildConfigField "String","BASE_URL","\"https://api\""}
  }
  buildTypes {
    debug { applicationIdSuffix ".debug"; versionNameSuffix "-debug" }
    release { minifyEnabled true; proguardFiles(getDefaultProguardFile('proguard-android-optimize.txt'),'proguard-rules.pro') }
  }
}

Gradle devDebug, devRelease, prodDebug, prodRelease oluşturacaktır.

CI için belirli varyantlara göre artefakt üretmek uygundur: ./gradlew assembleProdRelease veya assembleDevDebug.

Bağımlılık ve sürüm yönetimi — en iyi uygulamalar

  • Konfigürasyonları kullanın: implementation, api (yalnızca bağımlılıkları "geçirmek" gerekiyorsa), compileOnly, runtimeOnly, testImplementation, androidTestImplementation.
  • Kütüphane modüllerinde api kullanımından kaçının — bu, bağlamayı ve derleme süresini artırır.
  • Sürümleri merkezi hale getirin: version catalog (gradle/libs.versions.toml) — modern ve önerilen yöntem; alternatifler — buildSrc veya ayrı bir dependencies.gradle dosyası.

Version Catalog kullanım örneği:

# gradle/libs.versions.toml
[versions]
core = "1.13.1"
[libraries]
androidx-core = { group="androidx.core", name="core-ktx", version.ref="core" }

Modülde: implementation libs.androidx.core

Yerel modüllerle çalışma

  • Dahili modüller için implementation project(":core") kullanın. Genel API'ler için api project(":ui-common") dikkatli şekilde kullanın.
  • Sürüm uyumluluğunu koruyun ve CI'da dependencyUpdates (eklenti) çalıştırın.

Sürümleri birçok modüle dağıtmayın — bu çoğunlukla çakışmalara ve zor okunan derleme hatalarına yol açar.

Derleme süresi optimizasyonu (temel adımlar)

  • gradle.properties içinde şunları etkinleştirin: org.gradle.jvmargs=-Xmx4096m, org.gradle.daemon=true, org.gradle.parallel=true.
  • Önbellekleme kullanın: build cache ve configuration cache (eklenti uyumluluğunu kontrol edin).
  • kapt/annotation processor sayısını minimize edin veya testler için devre dışı bırakın.
  • Projeyi modüllere ayırın, böylece yeniden derleme daha az kodu etkiler.

Sık yapılan hatalar

  • Yanlış yapılandırılmış flavorDimensions — "All flavors must now belong to a flavor dimension" hatasına yol açar.
  • implementation ile yetinebilecek yerde api kullanımı — modül bağlamasını artırır.
  • Kütüphane sürümlerinin modüllere dağıtılması — runtime/compile çakışmaları ortaya çıkar.
  • Doğru proguard-rules olmadan minify etkinleştirilmesi — obfuscation uygulamanın çalışmasını bozar.

SSS

  • gradle.properties içindeki değişkenleri build.gradle'da nasıl kullanırım?
    • Kotlin DSL'de: val apiUrl: String = project.findProperty("API_URL") as String; Groovy'de: project.property("API_URL").
  • Hangisi daha iyi — libs.versions.toml mi yoksa buildSrc mi?
    • libs.versions.toml daha basittir ve resmi olarak desteklenir; buildSrc esneklik sağlar (Kotlin), ancak derlemeyi karmaşıklaştırır.
  • Tüm buildVariants listesini hızlıca nasıl görebilirim?
    • Android Studio'da: View -> Tool Windows -> Build Variants; konsolda ./gradlew tasks --all çalıştırın ve assemble arayın.

Gerekirse hazır build.gradle.kts şablonları, proguard-rules örnekleri veya belirli varyantların derlenmesi için CI adımları ekleyebilirim.