Gradle: Android ve build.gradle için derleme sisteminin özü

Yazar: IT Sectr Yayınlanma: 2026-02-12 Okuma süresi: 9 dk

Gradle, Android uygulamalarının derlenmesini, test edilmesini ve paketlenmesini otomatikleştiren bir derleme sistemidir. Apache Ant veya Maven'ın aksine, artımlı derleme ve sonuçları önbelleğe almayı destekler. Özellikleri hakkında daha fazla bilgi için resmi Gradle belgelerine bakın. 2013'ten bu yana araç, Android Studio'da Android projeleri için standart derleme sistemi olarak kullanılmaktadır.

Önemli Noktalar

  • Gradle — 2013'ten beri Android için standart derleme sistemi, Ant ve Maven'ın yerini aldı
  • Build.gradle.kts Kotlin DSL ile — tip denetimli modern yapılandırma standardı
  • Build variants farklı uygulama sürümleri için derleme türlerini ve ürün çeşnitlerini birleştirir
  • Eklentiler işlevselliği genişletir: Android araçlarını uygulamaktan derlemeleri yayınlamaya kadar
  • Artımlı derleme ve önbelleğe alma yeniden derleme süresini birkaç kat azaltır

Gradle nedir?

Gradle, Java ile yazılmış ve JVM'de çalışan açık kaynaklı bir derleme otomasyon aracıdır. Girdi olarak kaynak kodu, bağımlılıkları ve kaynakları alır ve çıktı olarak Android için APK veya AAB gibi hazır bir uygulama üretir. Temelinde Gradle, her bir görevin atomik bir çalışma birimi olduğu ve aralarındaki bağlantıların yürütme sırasını belirlediği bir Yönlendirilmiş Döngüsel Olmayan Grafik (DAG) kavramını kullanır. Make veya Ant'ın aksine, Gradle adımların sırasını manuel olarak tanımlamayı gerektirmez: görevler arasındaki bağımlılıkları bildirmek yeterlidir ve sistem en uygun sırayı kendisi belirleyecektir. Bu yaklaşım, Gradle'ı her boyuttaki proje için esnek ve ölçeklenebilir kılar.

Sistem üç yürütme aşaması kullanır: başlatma (katılan projeleri belirleme), yapılandırma (görev grafiğini oluşturma) ve yürütme (görevleri gerekli sırayla çalıştırma). Yapılandırma aşaması Gradle'ın önemli bir farkıdır: görevler başlamadan önce tüm derleme betiği çalışır ve koşullara bağlı olarak grafikte dinamik değişikliklere izin verir. Bu, örneğin, kodu tekrarlamadan yalnızca belirli derleme varyantları için görev eklemeyi mümkün kılar. Derleyici Groovy ile yazılmıştır, ancak yapılandırma dosyaları iki dili destekler: Groovy DSL ve Kotlin DSL.

Gradle Android proje derlemesini nasıl yönetir?

Gradle için Android eklentisi, Android araçlarıyla çalışmak için projeye görevler ekleyen com.android.application ve com.android.library'den oluşur. Bir geliştirici derlemeyi başlattığında, Gradle sırayla düzinelerce görevi yürütür: javac veya kotlinc aracılığıyla Kotlin ve Java derleme, AAPT2 aracılığıyla kaynak işleme, R.java oluşturma, D8 veya R8 aracılığıyla bayt kodunu DEX'e derleme, APK imzalama ve sıkıştırma. Her görev, girdi verilerinin değişip değişmediğini kontrol eder ve değişmemişse önbelleğe alınmış sonucu kullanır. Bu mekanizmaya artımlı derleme denir ve tam yeniden derlemeye kıyasla yeniden derlemeyi %60–80 oranında hızlandırır.

Android modül yapılandırması, build.gradle.kts dosyasının android bloğunda ayarlanır. Blok içinde compileSdk, minSdk, targetSdk, uygulama sürümü, imzalar ve diğer parametreler tanımlanır. Gradle, her modül için otomatik olarak birden çok derleme varyantı oluşturur — tür (release, debug) ve çeşnitin bir kombinasyonu. Örneğin, iki çeşniti ve iki türü olan bir modül için Gradle dört görev oluşturur: assembleDemoDebug, assembleDemoRelease, assembleFullDebug, assembleFullRelease. Tüm bu görevler ayrı ayrı yürütülebilir veya tüm varyantlar için aynı anda tek bir komutla çalıştırılabilir.

Build.gradle ve build.gradle.kts: yapılandırma yapısı

Her Android projesi iki düzey yapılandırma içerir: kök build.gradle.kts (tüm modüller için ayarlar) ve modül düzeyindeki build.gradle.kts (belirli bir modül için ayarlar). Kök dosyada eklentiler uygulanmadan bildirilir, depolar ve ortak değişkenler tanımlanır. Modül dosyasında, eklentiler belirli modüle uygulanır ve derleme parametreleri yapılandırılır. Bu yaklaşım, bir sürüm kataloğu veya ext bloğu aracılığıyla bağımlılık sürümlerinin merkezi olarak yönetilmesine olanak tanır.

Kotlin
@Suppress("UnstableApiUsage")
plugins {
    id("com.android.application") version "8.2.2"
    id("org.jetbrains.kotlin.android") version "1.9.22"
}

android {
    namespace = "com.example.myapp"
    compileSdk = 34

    defaultConfig {
        applicationId = "com.example.myapp"
        minSdk = 24
        targetSdk = 34
        versionCode = 1
        versionName = "1.0"
    }
}

dependencies bloğu, build.gradle.kts'in bir diğer kritik öğesidir. Uygulamanın ihtiyaç duyduğu kitaplıkları, modülleri ve dosya bağımlılıklarını listeler. Gradle birden çok bağımlılık yapılandırmasını destekler: implementation (yalnızca geçerli modülde kullanılabilir), api (bağımlı modüllerde de kullanılabilir), testImplementation (yalnızca testler için), androidTestImplementation (enstrümante testler için) ve compileOnly (yalnızca derleme zamanında). Her yapılandırma, bağımlılık grafiğinde sınıf görünürlüğünü yönetir; bu da derleme süresini ve nihai yapıt boyutunu etkiler.

Kotlin
dependencies {
    implementation("androidx.core:core-ktx:1.12.0")
    implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.7.0")
    implementation("androidx.activity:activity-compose:1.8.2")
    testImplementation("junit:junit:4.13.2")
    androidTestImplementation("androidx.test.ext:junit:1.1.5")
}

Build variants: uygulama derleme seçenekleri

Build variant, benzersiz ayarlar, kod ve kaynaklarla bir uygulama sürümünü tanımlayan derleme türü ve ürün çeşnitinin bir kombinasyonudur. Derleme türü paketleme parametrelerini tanımlar: debug (hata ayıklama ve .debug soneki ile) veya release (karartma ve imza ile). Ürün çeşniti işlevsel varyantları tanımlar: örneğin, demo (sınırlı sürüm) ve full (ek özelliklere sahip tam sürüm). Gradle her kombinasyon için otomatik olarak görevler oluşturur ve tüm sürümlerin tek bir komutla derlenmesine olanak tanır.

Kotlin
android {
    buildTypes {
        release {
            isMinifyEnabled = true
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            )
        }
        debug {
            applicationIdSuffix = ".debug"
        }
    }
    flavorDimensions += "version"
    productFlavors {
        create("demo") {
            dimension = "version"
            applicationIdSuffix = ".demo"
        }
        create("full") {
            dimension = "version"
            applicationIdSuffix = ".full"
        }
    }
}

Her build variant'ın ayrı bir kaynak kümesi vardır. Gradle, belirli bir varyant için benzersiz kaynakları, bildirimleri ve kaynak dosyalarını depolayan src/demo/release, src/full/debug ve diğer dizinleri kullanır. Ortak kod src/main içinde kalır. Bu yaklaşım, ana mantığı yeniden kullanmaya ve yalnızca farklı parçaları değiştirmeye olanak tanır: dizeler, simgeler, API uç noktaları veya yapılandırma dosyaları. Bir kaynak kümesi, main'deki herhangi bir kaynağı (bildirim, drawable, values ve hatta Kotlin sınıfları) geçersiz kılabilir. Belirli bir varyant derlenirken Gradle, main'den ve ilgili kaynak kümesinden dosyaları birleştirir ve varyantın dosyaları önceliklidir.

Android için Gradle eklentileri: yetenekleri genişletme

Gradle eklenti ekosistemi, Android uygulama geliştirmenin tüm aşamalarını kapsar. Google'dan resmi eklentiler arasında com.android.application (uygulama modülü için), com.android.library (kitaplık modülü için), com.android.test (test modülleri için) ve JetBrains'ten Kotlin eklentileri bulunur. Eklentiler projeye yeni görevler ekler, DSL'yi yeni yapılandırma bloklarıyla genişletir ve ek araçları bağlar. com.android.application eklentisi olmadan bir proje APK derleyemez: bu eklenti tüm Android'e özgü görevleri kaydeder ve bunları derleme grafiğine bağlar.

Üçüncü taraf eklentiler daha spesifik görevleri çözer. Google Services (com.google.gms.google-services), Firebase ve Google Play Services'i entegre ederek otomatik olarak google-services.json'ı derlemeye ekler. Hilt (dagger.hilt.android.plugin) derleme zamanında bağımlılık enjeksiyon kodu oluşturur. Safe Args (androidx.navigation.safeargs.kotlin) fragmentlar arasında gezinme için tür güvenli sınıflar oluşturur. Her eklenti, kök build.gradle.kts içinde plugins bloğu aracılığıyla eklenir ve genellikle minimum yapılandırma gerektirir. Gradle, eklentiler arasındaki geçişli bağımlılıkları otomatik olarak çözer ve Bom dosyaları ve sürüm katalogları aracılığıyla sürüm uyumluluğunu sağlar.

Gradle görevleri: derleme süreçlerini otomatikleştirme

Görev (task), Gradle'da atomik bir çalışma birimidir. Her görevin girdi verileri, çıktı verileri ve bir eylemi vardır. Android için yerleşik görevler arasında assemble (tüm varyantları derleme), lint (kod denetimi), test (birim testlerini çalıştırma) ve clean (geçici dosyaları temizleme) bulunur. Geliştiriciler, Groovy veya Kotlin DSL kullanarak kendi görevlerini ekleyebilir. Özel görevler, rapor oluşturma, yapıtları kopyalama, test cihazlarına dağıtma veya CI sistemleriyle entegrasyon gibi rutin işlemleri otomatikleştirmek için kullanışlıdır.

Kotlin
tasks.register("printBuildInfo") {
    description = "Derleme bilgilerini görüntüler"
    group = "custom"
    doLast {
        println("Build variant: ${project.name}")
        println("Version: ${android.defaultConfig.versionName}")
    }
}

Her görev, dependsOn mekanizması aracılığıyla diğer görevlere bağımlı olabilir. Görev A, görev B'ye bağımlıysa, Gradle B'nin A'dan önce yürütüleceğini garanti eder. Sistem her çift için sırayı manuel olarak belirtmeyi gerektirmez — bağımlılıkları bildirmek yeterlidir ve Gradle, bağımsız görevlerin paralel yürütülmesi için optimize edilmiş yönlendirilmiş bir grafik oluşturacaktır. Android eklentisinin yerleşik görevleri zaten birbirine bağlıdır: lint derlemeye bağlıdır, test assemble'a bağlıdır, assembleDebug compileDebugKotlin'e bağlıdır. Geliştiriciler, dependsOn, mustRunAfter veya shouldRunAfter kullanarak grafiğin herhangi bir düğümüne kendi görevlerini ekleyebilir.

Gradle ile çalışırken yaygın hatalar

Sık karşılaşılan sorunlardan biri, iki kitaplığın aynı geçişli bağımlılığın farklı sürümlerini gerektirdiği bağımlılık sürüm çakışmalarıdır. Gradle bir çakışma hatası bildirir, ancak her zaman otomatik bir çözüm sunmaz. Teşhis için, tam bağımlılık ağacını gösteren ./gradlew :app:dependencies komutunu kullanın. Çakışan kitaplığın sürümünün resolutionStrategy bloğu aracılığıyla zorlanması önerilir. Diğer bir yaygın senaryo, artımlı işleme eksikliği nedeniyle yavaş derlemedir. Tüm eklentilerin güncellendiğinden, Gradle Daemon'un etkinleştirildiğinden (org.gradle.daemon=true) ve gradle.properties'de yeterli belleğin ayarlandığından (org.gradle.jvmargs=-Xmx4096m) emin olun.

Önbellek sorunları bağımlılıklar güncellendikten sonra ortaya çıkar: Gradle eski bir önbellek kullanabilir ve derleme başarısız olur. Çözüm, derlemeyi --refresh-dependencies bayrağıyla çalıştırmak veya ./gradlew cleanBuildCache ile önbelleği manuel olarak temizlemektir. Üçüncü en yaygın hata, Android Gradle Plugin (AGP) ile Gradle arasındaki sürüm uyumsuzluğudur. Her AGP sürümü, belirli bir minimum Gradle sürümünü gerektirir. Uyumluluk tablosu developer.android.com'da yayınlanır. Sürümler uyumsuzsa, Gradle yapılandırma aşamasında minimum gerekli sürümle ilgili bir mesajla başarısız olur. Gradle sarmalayıcı sürümünün AGP gereksinimleriyle eşleştiğinden her zaman emin olun.

Sıkça Sorulan Sorular

Basit terimlerle Gradle nedir?

Gradle, projeleri derlemek için bir program otomatikleştiricisidir. Kotlin veya Java'daki kaynak kodunuzu alır, internetten kitaplıkları bağlar, her şeyi bayt koduna derler ve APK olarak paketler. JVM'de çalışır ve manuel talimatlar yerine bildirimsel betikler kullanır. Geliştiricinin yalnızca kuralları tanımlaması gerekir ve Gradle gerisini halleder.

build.gradle.kts, build.gradle'dan nasıl farklıdır?

Build.gradle Groovy ile yazılır — esnek sözdizimi ve daha az katılığa sahip dinamik bir dil. Build.gradle.kts Kotlin DSL kullanır: güçlü tipleme, Android Studio'da otomatik tamamlama ve derleme zamanında hata denetimi. Google tüm yeni projeler için Kotlin DSL'yi önerir. Groovy dosyalarını taşımak daha kolaydır, ancak Kotlin dosyaları bakımda daha güvenilirdir.

Gradle derlemesi nasıl hızlandırılır?

Gradle Daemon'u (org.gradle.daemon=true) ve paralel derlemeyi (org.gradle.parallel=true) etkinleştirin. org.gradle.jvmargs ile JVM belleğini 4–8 GB'a yükseltin. Talep üzerine proje yapılandırmasını (org.gradle.configureondemand=true) kullanın. Android projeleri için görev önbelleğe almayı yapılandırın ve yalnızca gerekli ABI için derleyin. Android Studio'da darboğazları bulmak için Build Analyzer'ı çalıştırın.

Android'de build variant nedir?

Build variant, derleme türü (ör. debug veya release) ve ürün çeşnitinin (ör. demo veya full) bir kombinasyonudur. Her varyantın kendi paket adı, sürümü, kaynakları ve kaynak dosyaları olabilir. Gradle her varyant için otomatik olarak ayrı bir derleme görevi oluşturur. Bu, tek bir projeden uygulamanın birden çok sürümünün derlenmesine olanak tanır.

Gradle'da bağımlılık nasıl eklenir?

Bağımlılıklar, build.gradle.kts dosyasının dependencies bloğuna eklenir. Biçim şöyledir: configuration("group:artifact:version"). Örneğin, implementation("androidx.core:core-ktx:1.12.0"). Testler için testImplementation, enstrümante testler için androidTestImplementation kullanın. Sürümler, libs.versions.toml dosyası aracılığıyla ayrı bir sürüm kataloğunda düzenlenmesi uygundur.

Özet

  • Gradle — Android için standart derleme sistemi, JVM'de çalışır ve görev DAG'ı kullanır
  • Artımlı derleme ve önbelleğe alma yeniden derleme süresini %60–80 azaltır
  • Kotlin DSL (build.gradle.kts) — otomatik tamamlama ve tip denetimi ile modern yapılandırma biçimi
  • Build variants derleme türü ve ürün çeşnitini birleştirir, her varyant için ayrı kaynak kümeleri oluşturur
  • Eklentiler Gradle'ı genişletir: temel Android eklentisinden Firebase, Hilt ve Safe Args'ye kadar
  • Özel görevler herhangi bir derleme ve entegrasyon aşamasını otomatikleştirmeye olanak tanır
  • Yaygın sorunlar — sürüm çakışmaları, yavaş derleme ve AGP'nin Gradle sürümüyle uyumsuzluğu

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun