Android Projesinde build.gradle Nasıl Yapılandırılır
build.gradle dosyalarında AGP ve Kotlin sürümleri, compileSdk/minSdk, bağımlılıklar ve derleme kuralları belirlenir; yani APK/AAB'nin doğru şekilde derlenmesi için gereken her şey burada tanımlanır. Aşağıda, doğrudan kopyalayıp kullanabileceğiniz pratik bir yapı ve hazır şablonlar yer almaktadır.
Proje Seviyesi (kök): Eklentiler ve Depolar
Kök dizindeki dosya, eklenti sürümlerini ve ortak depoları yönetir. plugins bloğu, AGP ve Kotlin sürümlerini sabitler; bu durum güncellemeler sırasında oluşabilecek çakışmaları önler.
Örnek (settings.gradle.kts veya kökteki build.gradle ile eklentiler):
plugins {
id 'com.android.application' version '8.7.2' apply false
id 'com.android.library' version '8.7.2' apply false
id 'org.jetbrains.kotlin.android' version '2.0.20' apply false
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
gradlePluginPortal()
}
}
Pratik tavsiye: Eklenti sürümlerini kök düzeyde sabitleyin ve bunları modül bazlı build dosyalarında tekrarlamayın.
Sürüm katalogları (libs.versions.toml) aracılığıyla sürümleri yönetmek için settings.gradle(.kts) kullanın; böylece sürüm yönetimi daha kolay ve merkezi hale gelir.
Uygulama Seviyesi: android { }, dependencies ve buildTypes
Ana dosya app/build.gradle(.kts)'dir. Burada namespace, compileSdk, defaultConfig, buildTypes, signingConfigs ve bağımlılıklar belirtilir.
Örnek (Groovy):
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
id 'kotlin-kapt'
}
android {
namespace 'com.example.myapp'
compileSdk 36
defaultConfig {
applicationId "com.example.myapp"
minSdk 24
targetSdk 36
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
kotlinOptions { jvmTarget = "17" }
}
Bağımlılık örnekleri (amaçlarına göre gruplayın):
dependencies {
// Core
implementation 'androidx.core:core-ktx:1.15.0'
implementation 'androidx.appcompat:appcompat:1.7.0'
// Network
implementation 'com.squareup.retrofit2:retrofit:2.11.0'
implementation 'com.squareup.retrofit2:converter-gson:2.11.0'
// DI
implementation 'com.google.dagger:hilt-android:2.52'
kapt 'com.google.dagger:hilt-compiler:2.52'
}
Derlemeler, flavor'lar, imzalama ve CI
- Product flavors, paralel kurulumlar için applicationIdSuffix ve versionNameSuffix kullanır:
productFlavors {
free { applicationIdSuffix ".free"; versionNameSuffix "-free" }
pro { applicationIdSuffix ".pro" }
}
- CI için signingConfigs: Gizli bilgileri ortam değişkenlerinde saklayın, depo dosyalarında değil:
signingConfigs {
release {
storeFile file(System.getenv("KEYSTORE_PATH"))
storePassword System.getenv("KEYSTORE_PASS")
keyAlias System.getenv("KEY_ALIAS")
keyPassword System.getenv("KEY_PASS")
}
}
- CI'da derleme: ./gradlew assembleRelease veya bundleRelease ile AAB derlemesi yapın. Hızlandırmak için --no-daemon parametresini ve Gradle önbelleğini etkinleştirin.
Eski yapılandırmaları kopyalamayın: AGP 8+ Java 17 ve uyumlu eklentiler gerektirir.
Sık Karşılaşılan Hatalar
- Kütüphane sürüm çakışmaları → dependencyConstraints veya resolutionStrategy kullanın.
- Depoda gizli bilgilerin (keystore, şifreler) sabit kodlanması → CI secrets içinde saklayın.
- Uyumsuz JDK/AGP → Güncelleme öncesi JavaVersion ve AGP sürümlerini kontrol edin.
- Release için unutulmuş minify/proguard → APK boyutunu artırır ve sızıntı risklerini yükseltir.
SSS
-
Kotlin DSL'e nasıl geçilir?
build.gradle dosyasını build.gradle.kts'e taşıyın, tür güvenli eklentiler kullanın ve bağımlılık sözdizimini güncelleyin; CI branch'ında test edin. -
Bir kütüphane güncellendikten sonra uygulama neden çöker?
Genellikle API değişiklikleri veya transitif bağımlılık çakışmalarından kaynaklanır; sürümleri sabitleyin ve changelog'u kontrol edin. -
Debug için minifyEnabled etkinleştirilmeli mi?
Hayır. Minify release için faydalıdır (optimizasyon ve obfuscation), debug'da hata ayıklamayı zorlaştırır.
Bu set, build.gradle yapılandırmasına ilişkin çoğu görevi kapsar: sürümleri kökte sabitleyin, bağımlılıkları amaçlarına göre gruplayın, gizli bilgileri depo dışında saklayın ve derlemeleri yerel ortamla aynı JDK üzerinde CI'da test edin.