ANDROID (KOTLIN) EĞİTİMİ
Android Kotlin eğitimi, Java tarafından gelen ekipler ile yeni başlayanları aynı pratik seviyeye taşımak için tasarlandı. Lifecycle yönetimi, Coroutine, Flow ve Jetpack Compose günlük geliştirmenin omurgası olarak gerçek uygulama senaryolarıyla işlenir. Activity ile Fragment arasındaki sınır, hangi durumda nasıl belirlenmeli sorusu tartışılır.
Program sonunda katılımcı, "uygulama çalışıyor" cümlesinden production-quality kod çıktısına geçer. ANR ve memory leak'i Profiler ile yakalama, AAB ile Play Store yayını, in-app update ve Material 3 ile dynamic color uyarlaması gibi operasyonel konular eğitimin ayrılmaz parçasıdır.
Katılımcı Profili
Bu program, Android uygulama yaşam döngüsünü Kotlin ile profesyonel yönetmek isteyen rollere yöneliktir:
- Mobil Geliştiriciler: Kotlin ile Android uygulama yazan mühendisler
- Java Geliştiriciler: Kotlin'e geçiş yapmak isteyen Android tarafı çalışanları
- Full-stack Geliştiriciler: Mobil tarafa girmek isteyen web mühendisleri
- Test Mühendisleri: Espresso ve UI Automator ile mobil test yazan QA'lar
- Mobil Teknik Liderler: Android proje standardı ve mimari kuran roller
Ön Gereklilikler
Bu eğitime katılım için aşağıdaki yetkinlikler önerilir; eksik kısımlar eğitim başında kapatılabilir:
- Herhangi bir dilde OOP (class, inheritance, interface) deneyimi
- Java veya Kotlin'e temel düzeyde aşinalık
- IDE kullanım deneyimi (Android Studio tercihen)
- Git ile commit, branch ve PR workflow'una aşinalık
- Bir Android cihaz veya emülatör ile uygulama çalıştırma rahatlığı
Süresi ve Tarihi
Süre: 4 gün. Bu süre standart program içindir; ek modüllere ve hedefe göre süre özelleştirilebilir.
Eğitim tarihleri ve saatleri, ekibinizin uygunluğuna göre birlikte planlanır.
Kazanımlar
Eğitimi tamamlayan katılımcı, Kotlin ile üretim seviyesinde Android uygulaması çıkartabilecek pratiğe ulaşır:
- Activity, Fragment ve ViewModel arasında lifecycle sınırını net çizer
- Coroutine ve Flow ile asenkron işi main thread'i bloklamadan kurar
- Jetpack Compose ile recomposition'ı bilerek declarative UI yazar
- Room, Retrofit ve Hilt üçlüsünü Clean Architecture katmanlarına yerleştirir
- ANR ve memory leak'i Profiler ve StrictMode ile kaynağında yakalar
- Material 3 ve Dynamic Color ile farklı cihaz ve temaya adapte UI çıkarır
- AAB ile Play Store'a yayınlar, in-app update'i APK'sız yönetir
Android (Kotlin) Eğitimi Konuları
1. Android Platformu - API Level ve Cihaz Manzarası
- API level, minSdk ve targetSdk seçim mantığı
- Cihaz parçalanması (fragmentation) ve test stratejisi
- Android Studio kurulumu ve canary kanalı
- AVD, emulator ve gerçek cihaz dengesi
- Resmi kaynak: Kotlin Android genel bakışı
2. Kotlin Söz Dizimi ve Temeller
- val ve var: immutability tercihi
- when ifade olarak switch alternatifi
- String template ve raw string (triple quote)
- Destructuring declaration
- Java birlikte çalışabilirlik notları
3. Null Safety - Kotlin'in İmza Özelliği
- Nullable (?) ve non-nullable tip ayrımı
- ?., ?:, !! operatörlerinin doğru kullanımı
- Platform type ve Java interop riski
- Smart cast ve contract'lar
- requireNotNull, checkNotNull pattern'i
4. Class Sistemi - Data, Sealed, Object
- Primary ve secondary constructor, init bloğu
- Data class: equals, hashCode, copy, destructuring
- Sealed class ve when exhaustiveness garantisi
- Object singleton ve companion object
- Extension function ve receiver kavramı
5. Higher-Order Functions ve Lambda
- Function tipi ve trailing lambda söz dizimi
- inline, noinline, crossinline ayrımı
- reified type parameter ve runtime tip erişimi
- Scope function: let, run, apply, also, with farkı
- Label edilmiş return ve nested lambda kontrolü
6. Coroutines - Yapılandırılmış Eşzamanlılık
- launch, async, runBlocking builder farkı
- Structured concurrency ve parent-child job ilişkisi
- Dispatcher seçimi: Main, IO, Default, Unconfined
- CoroutineScope, viewModelScope, lifecycleScope
- CoroutineExceptionHandler ile hata yönetimi
- SupervisorJob ve hata izolasyonu
7. Flow ve Cold/Hot Stream Modelleri
- Cold Flow ve Hot Flow (StateFlow, SharedFlow) farkı
- collect, collectLatest toplama davranışı
- Operatörler: map, filter, combine, flatMapLatest, debounce
- repeatOnLifecycle ile lifecycle-aware toplama
- Backpressure ve buffer/conflate stratejisi
8. Android Studio ve Gradle (KTS)
- Project ve module-level build.gradle.kts
- Version Catalog ile bağımlılık yönetimi
- Build variant, product flavor, build type kombinasyonu
- Lint, ktlint ve detekt entegrasyonu
- R8 minification ve ProGuard rules
9. Activity, Fragment ve Yaşam Döngüsü
- Activity lifecycle callback'leri ve geçiş diyagramı
- Configuration change ve onSaveInstanceState
- Fragment yaşam döngüsü ve view lifecycle ayrımı
- Single-Activity mimarisi yaklaşımı
- Activity Result API ile permission akışı
10. View Sistemi ve XML Layout
- ConstraintLayout, LinearLayout, FrameLayout seçimi
- ViewBinding ile tip güvenli view erişimi
- RecyclerView, ListAdapter ve DiffUtil
- Material Design bileşenleri ve theming
- Accessibility (a11y) ve TalkBack uyumu
11. Jetpack Compose - Declarative UI Paradigması
- Composable fonksiyon ve recomposition mantığı
- State, remember, mutableStateOf temelleri
- Modifier zinciri ve sıralama önemi
- LazyColumn, LazyRow performans odaklı listeler
- Side effect: LaunchedEffect, DisposableEffect, rememberCoroutineScope
12. Compose State - State Hoisting ve Unidirectional Flow
- State hoisting prensibi: stateful ve stateless ayrımı
- ViewModel ile state holder pattern
- StateFlow → Compose state dönüşümü
- @Stable, @Immutable annotation ve smart recomposition
- Snapshot system ve compose runtime mantığı
13. Navigation - Component ve Compose
- Navigation graph ve destination tanımı
- Safe Args ile tip güvenli argüman geçişi
- Deep link ve App Links yapılandırması
- Compose Navigation ve type-safe route
- Back stack manipülasyon ve popBackStack
14. Mimari - MVVM ve MVI Karşılaştırması
- MVVM: View, ViewModel, Model katmanları
- MVI: tek yönlü Intent → State akışı
- Clean Architecture katmanları ve sınırları
- Use case ve repository pattern
- Feature-based modüler proje yapısı
15. Dependency Injection - Hilt
- Hilt setup ve @AndroidEntryPoint anotasyonu
- @Inject, @Provides, @Binds farkı
- Component scope: Singleton, Activity, ViewModel
- Test için bağımlılık değiştirme (TestInstallIn)
- Multi-module Hilt yapılandırması
16. Yerel Veri - Room ve DataStore
- Room: Entity, DAO, Database
- Type converter ve ilişki tanımları (@Relation, @Embedded)
- Schema migration ve fallback stratejisi
- DataStore: Preferences ve Proto
- KSP (Kotlin Symbol Processing) ile build hızı
17. Ağ Katmanı - Retrofit, OkHttp, Serialization
- Retrofit interface ve suspend function dönüşü
- OkHttp interceptor: logging, auth, header
- kotlinx.serialization ve Moshi karşılaştırması
- Sealed result ile hata cevabı modelleme
- Cache, retry ve timeout politikaları
18. Performance ve ANR Önlemi
- ANR (Application Not Responding) nedenleri
- Main thread'i bloklamama disiplini
- Memory leak tespiti: LeakCanary
- Baseline Profiles ile başlatma optimizasyonu
- Android Profiler: CPU, memory, network izleme
19. Test - Unit, UI, Compose
- JUnit ile unit test temelleri
- MockK (Kotlin-friendly) ve Mockito karşılaştırması
- Espresso ile XML UI test senaryoları
- Compose UI Test API ve semantics tree
- Robolectric ile JVM-side Android test
20. Yayın - Signing, App Bundle, Play Console
- Keystore oluşturma ve uygulama imzalama
- App Bundle (AAB) ve dynamic delivery
- Play Console track'leri: internal, closed, open, production
- Staged rollout ve halt mekanizması
- Crashlytics ve Android Vitals takibi
ANDROID (KOTLIN) EĞİTİMİ ile İlgili
Sıkça Sorulan Sorular ve Cevapları
Activity ve Fragment arasında lifecycle sınırı nasıl çizilir?
Activity ekran-seviyesi container ve Android sistem entry point'idir. Fragment ise Activity içinde yeniden kullanılabilen UI parçasıdır ve kendi lifecycle'ına sahiptir; configuration change'lerde Activity yeniden oluşurken Fragment state'i daha kontrollü taşınır. Modern uygulamalar tek Activity + çoklu Fragment veya Compose Navigation ile ilerler.
Coroutine ve Flow ile RxJava arasında ne zaman geçilir?
Coroutine + Flow Kotlin native'dir; structured concurrency ve daha sade söz dizimi sunar. RxJava daha büyük operatör havuzu ve mature ekosisteme sahip ama öğrenme eğrisi dik. Yeni projeler Coroutine + Flow tercih ediyor; mevcut RxJava projeleri kademeli olarak geçiriliyor.
Jetpack Compose ile XML View arasında karar nasıl verilir?
Compose declarative ve recomposition ile state-driven UI sunar; yeni projeler için Google'ın resmi tercihi. XML View imperatif ve mature; karmaşık custom view'lar ve eski codebase için hâlâ doğru. Compose ve View interop eder, kademeli geçiş mümkündür.
ANR ve memory leak Profiler ile nasıl yakalanır?
Android Profiler CPU, Memory, Network ve Energy izleme sunar. ANR genelde main thread'de uzun süren iş yüzünden olur — CPU profile ile blocking metod bulunur. Memory leak için Memory Profiler heap snapshot alır; LeakCanary kütüphanesi otomatik tespit ve raporlama yapar.
AAB ile APK arasındaki fark üretim için ne anlama gelir?
Android App Bundle (AAB) Google Play'in cihaza özel APK üretmesini sağlar — kullanıcı sadece ihtiyaç duyduğu mimari, dil ve ekran yoğunluğu için kod indirir. APK monolitiktir ve tüm cihazlara aynı paket gider. AAB 2021'den beri Play Store yayınları için zorunlu, APK ise yan-yükleme için kullanılır.
Material 3 Dynamic Color farklı cihazlarda nasıl davranır?
Dynamic Color Android 12+ cihazlarda kullanıcının duvar kağıdından üretilen tonal palet kullanır. Eski cihazlarda fallback tema devreye girer. Tasarım sisteminde renkler hardcode değil token bazlı tanımlanırsa hem Dynamic Color hem brand renkleri birlikte çalışır.



