Android Studio Proje Yapısı, Modüller ve Gradle — Kısa ve Öz
Android Studio'daki bir proje Gradle tabanlıdır: Kök klasör genel ayarları (settings.gradle, proje seviyesinde build.gradle, gradle.properties) saklarken, her modül (uygulama, kütüphane) kendi modül seviyesindeki build.gradle dosyasına ve src klasörüne sahiptir. Bu yaklaşım tekrarlanabilir derlemeler, kod ayrımı ve bağımsız parçaların ayrı ayrı derlenebilmesini sağlar.
Proje Yapısı — Nerede Ne Var ve Neden
- Proje kökü:
- settings.gradle(.kts) — modül listesi (include ':app', ':feature:auth').
- build.gradle(.kts) (proje seviyesi) — Gradle eklentilerinin eklenmesi, AGP classpath'i.
- gradle.properties — genel bayraklar (android.useAndroidX=true, org.gradle.jvmargs).
- gradle/wrapper — tekrarlanabilirlik için gradle-wrapper.jar ve wrapper özellikleri.
- Uygulama modülü (/app):
- src/main/java veya kotlin — kaynak kodlar.
- src/main/res — düzenler (layouts), çizilebilirler (drawables), değerler (values).
- AndroidManifest.xml — Activity/Service/izin bildirimleri.
- build.gradle(.kts) (modül seviyesi) — namespace, compileSdk, defaultConfig, dependencies.
- Diğer dosyalar: proguard-rules.pro, .gitignore, local.properties (SDK'ya yerel yollar — commit edilmemeli).
Pratik kontrol: settings.gradle dosyasını açın — tüm modülleri göreceksiniz; ./gradlew :app:assembleDebug komutu yalnızca uygulamanızı derler.
Commit işleminden önce local.properties dosyasını kontrol edin: bu dosya yereldir ve depoya gönderilmemelidir.
Modüller: Türler, Nasıl Eklenir ve Ne Zaman Kullanılır
Modül, kendi build.gradle dosyasına sahip bağımsız bir yapıttır (artifact). Türler ve kullanım senaryoları:
- com.android.application — ana APK/giriş noktası (app).
- com.android.library — AAR, ortak UI/mantık (ui:components).
- com.android.dynamic-feature — dinamik olarak yüklenen özellikler.
- java-library / kotlin-jvm — Android dışı kodlar için saf kütüphane (network, util).
Modül nasıl eklenir:
- settings.gradle dosyasına include ':feature:auth' satırını ekleyin.
- app/build.gradle dosyasında: implementation project(':feature:auth')
Modüllere ne zaman ayrılmalı:
- Yeniden kullanılabilir UI veya veri katmanı.
- Ekip paralel olarak özellikler üzerinde çalışırken.
- Artımlı derlemeleri hızlandırmak için (ancak >20 modül yapılandırma yönetimi gerektirir).
Dezavantajlar: Yapılandırma ek yükü, CI süreçlerinin karmaşıklaşması. 2–5 modülle başlayın, ardından sorumluluk sınırlarına göre ayırın.
Gradle: Temel Ayarlar ve Pratik İpuçları
Temeller:
- Gradle Wrapper kullanın: ./gradlew assembleRelease.
- Proje seviyesi: Eklenti classpath'lerini belirler (com.android.tools.build:gradle).
- Modül seviyesi: plugins { id 'com.android.application' } ve android { compileSdk, defaultConfig, buildTypes } bloğu. Kullanışlı seçenek örnekleri:
- productFlavors — free/pro derlemeleri.
- signingConfigs — sürüm imzalama.
- kotlinOptions { jvmTarget = "17" } ve Java 17 için compileOptions.
- Tutarlılık için Version Catalogs ve merkezi bağımlılık dosyası kullanın.
Derleme optimizasyonu:
- R8 ve baseline profillerini etkinleştirin.
- Derleme önbelleğini (build cache) ve paralel derleme yapılandırmasını kullanın.
- Modülleri, artımlı değişikliklerin minimum etki yaratacağı şekilde ayırın.
"1.+" gibi kayan sürümleri veya '!' sembollerini kullanmayın — bu, tekrarlanabilir derlemeleri bozar.
Sık Karşılaşılan Hatalar
- Duplicate class (Yinelenen sınıf): Transitif bağımlılıkları kontrol edin ve yinelenenleri hariç tutun (exclude group/module).
- Manifest merger failed (Manifest birleştirme hatası): Aynı izin/authority çakışmaları — tools:replace ile düzeltin veya modül yapısını yeniden düşünün.
- Task failed / OOM (Bellek yetersizliği) derleme sırasında: gradle.properties içindeki org.gradle.jvmargs değerini artırın veya önbelleği temizleyin ./gradlew cleanBuildCache.
- KAPT/annotation processor: Doğru kapt/annotationProcessor yapılandırmalarını ekleyin ve artımlı KAPT'yi etkinleştirin.
SSS
- Yeni modül nasıl eklenir? File > New > New Module yoluyla veya manuel olarak — klasör ekleyin, modül build.gradle dosyası oluşturun ve settings.gradle içine include edin.
- Bir modül ayrı nasıl test edilir? ./gradlew :moduleName:assembleDebug komutunu çalıştırın veya birim/enstrümante testleri ./gradlew :moduleName:testDebugUnitTest ile çalıştırın.
- CI derlemeleri nasıl hızlandırılır? ~/.gradle ve .gradle/caches dizinlerini önbelleğe alın, artımlı derlemeler kullanın ve yalnızca sürümler için AAB derlemesi yapın.
- Örneklerle mimari öğrenmeye nereden başlamalı? Çok modüllü projelere (Now in Android), Room/ViewModel içeren temel örneklere ve app/data/ui ayrımı yapan projelere bakın — yapılarını ve Gradle organizasyonlarını inceleyin.
Sonuç: Projeyi ihtiyaç doğrultusunda basitten (tek uygulama) çok modüllü yapıya doğru inşa edin, Gradle yapılandırmasını merkezi tutun ve wrapper kullanın — böylece projeniz ölçeklenebilir ve öngörülebilir kalır.