Hızlı Android Projesi Oluşturma ve Doğru Yapı (MVVM + Compose)

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

Kısaca özetlemek gerekirse: Android Studio'da New Project aracılığıyla bir proje oluşturun (Kotlin, Minimum SDK ≈ API 24), Gradle'a Compose, Navigation ve Coroutines ekleyin, ardından kodu DI (Hilt) ve özellik bazlı modülerlik ile MVVM + katmanlı (data/domain/ui) yapıya göre düzenleyin — bu size ölçeklenebilir bir temel sağlayacaktır.

Hızlı başlamak istiyorsanız Empty Activity'yi (veya saf Compose için No Activity'yi), Kotlin'i ve güncel AGP/Gradle sürümlerini seçin.

Kurulum ve Proje Oluşturma

  1. Android Studio'nun (güncel sürümünü), SDK'yı, emülatörü ve isteğe bağlı olarak NDK'yı yükleyin.
  2. New Project → Empty Activity'yi seçin (veya Compose için No Activity).
  3. Name: MyAwesomeApp; Package: com.example.myawesomeapp; Language: Kotlin; Minimum SDK: API 24+.
  4. Finish — stüdyo temel yapıyı oluşturacaktır.

İlk derlemeden sonra paket adını manuel olarak değiştirmeyin — gerekirse Refactor > Rename kullanın.

Gradle Ayarları ve Bağımlılıklar

app modülünde Kotlin DSL (build.gradle.kts) kullanın. Compose BOM, navigation-compose, lifecycle ve coroutine'leri ekleyin. Örnek bağımlılıklar:

dependencies {
    implementation("androidx.core:core-ktx:1.13.1")
    implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.8.4")
    implementation("androidx.activity:activity-compose:1.9.1")
    implementation(platform("androidx.compose:compose-bom:2024.06.00"))
    implementation("androidx.compose.ui:ui")
    implementation("androidx.compose.material3:material3")
    implementation("androidx.navigation:navigation-compose:2.8.0")
    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1")
}

Önerilen ayarlar:

  • AGP 8.2+ (veya güncel sürüm) ve Gradle 8.x.
  • DI için koin/Hilt'i etkinleştirin; Hilt büyük projeler için standarttır.
  • Standart flavor/proguard kurallarını ve lint'i yapılandırın.

Mimari ve Klasör Yapısı (MVVM + Clean)

UI'nin veri erişim ayrıntılarına bağımlı olmaması için projeyi katmanlara göre düzenleyin.

Önerilen temel yapı: app/src/main/java/com/example/myawesomeapp/

  • data/
    • local/ (Room, DAO)
    • remote/ (Retrofit ApiService)
    • repository/ (repository implementasyonları)
  • domain/
    • model/ (varlıklar)
    • usecase/ (interaktörler)
  • ui/
    • main/ (MainActivity, NavHost)
    • screens/ (HomeScreen, ProfileScreen)
    • components/ (yeniden kullanılabilir composables)
  • di/ (Hilt modülleri)

Neden böyle:

  • domain'in ayrılması test etmeyi kolaylaştırır;
  • data mocklarla değiştirilebilir;
  • ui yalnızca görünüm ve ViewModel içerir.

Basit bir NavHost örneği (Compose):

@Composable
fun AppNavHost(navController: NavHostController) {
    NavHost(navController, startDestination = "home") {
        composable("home") { HomeScreen() }
        composable("profile/{userId}") { backStackEntry ->
            val userId = backStackEntry.arguments?.getString("userId")
            ProfileScreen(userId)
        }
    }
}

Modülerlik, Testler ve CI

  • 10 ekrandan fazla büyüdüğünde özellik modüllerine (:feature:home, :feature:profile) ayırın.
  • Kapsam: domain için unit testler, kritik ekranlar için unit + instrumentation/UI testleri. Flow için Turbine kullanın.
  • CI: ./gradlew test, lint, assembleDebug. Derlemeleri ve sürümleri otomatikleştirin.

2026 yılında Compose Multiplatform'u dikkate almak gerekir; çoklu platform planlıyorsanız commonMain'i ayırın.

Sık Yapılan Hatalar

  • Minimum SDK'yı çok düşük ayarlamak — API'ler ve optimizasyon kaybedilir. Optimum API 24+.
  • İş mantığını View/Activity içine yazmak — test etmek zordur.
  • ViewModel'i belirli bir repository implementasyonuna sıkı bağlamak (arayüz üzerinden değil).
  • lint/ktlint'i yapılandırmamak — teknik borç hızla artar.

SSS

  • Hilt'i hemen eklemek gerekir mi? Evet — DI'yı başlangıçta entegre etmek daha kolaydır; sonradan yeniden düzenlemek daha maliyetlidir.
  • Modüller nasıl ayrılır? Özelliklere göre: feature modülü içinde UI+domain+data, ortak UI/utility — core'da.
  • Başlangıç bağımlılık seti nedir? Compose, Navigation, Lifecycle, Coroutines, gerektiğinde Retrofit/Room.

Bu yaklaşımla okunabilir, test edilebilir ve ölçeklenebilir bir kod tabanı elde edersiniz: basit bir şablonla başlayın, ekip büyüdükçe modüller ve otomasyon ekleyin.