Jetpack, geliştirmeyi basitleştiren ve kararlı uygulamalar oluşturmayı hızlandıran bir Google Android kütüphane setidir. ViewModel, Room ve Navigation gibi bileşenler tipik görevleri çözer: yaşam döngüsü yönetimi, veri depolama ve gezinme. Android Developers (2026)'ya göre Jetpack, 50'den fazla kütüphaneyi kapsar ve her biri AndroidX (Support Library'nin yerini alan uyumluluk kütüphanesi) aracılığıyla Android 5.0 (API 21) ile geriye dönük uyumludur.
Ana Noktalar
Android Jetpack, 2018 yılında Google I/O'da tanıtılan Google'ın kütüphane, araç ve mimari yönergeler koleksiyonudur. Jetpack, Support Library ve Android Architecture Components'ın yerini alarak onları tek bir ekosistemde birleştirdi. Jetpack'ten önce her Android kütüphanesi bağımsız olarak güncelleniyor ve sürüm çakışmaları yaratıyordu. Jetpack, sürümleri tek bir AndroidX tanımlayıcısı altında senkronize etti ve küçük yamalarla kararlı ana sürümler modelini tanıttı.
Jetpack kütüphaneleri dört kategoriye ayrılır: Architecture (ViewModel, Room, Navigation, WorkManager), UI (Fragment, Compose, Animation, Palette), Behavior (DownloadManager, Media, Permissions, Sharing), Foundation (Android KTX, Multidex, AppCompat). Her kategori, veri yönetiminden kullanıcı arayüzüne kadar uygulamanın belirli bir katmanının görevlerini ele alır.
Google üç Jetpack ilkesini teşvik eder: accelerate development (daha az boilerplate, daha fazla iş mantığı), eliminate boilerplate (ViewModel manuel durum kaydetmeyi ortadan kaldırır, Room SQLiteOpenHelper yazmayı ortadan kaldırır) ve build with confidence (her kütüphane yayınlanmadan önce 15.000'den fazla testi geçer). Android Developers (2026)'ya göre, Jetpack kullanan uygulamalarda yaşam döngüsüyle ilgili %30 daha az çökme olur.
Tüm Jetpack kütüphaneleri AndroidX tanımlayıcısı (androidx.* gibi yapıtlar) altında dağıtılır. AndroidX, Support Library'nin (com.android.support.* gibi yapıtlar) yerini alarak monolitik kütüphaneyi bağımsız sürümlemeli modüler yapıtlara böldü. AndroidX'e geçiş, gradle.properties dosyasında android.useAndroidX=true seçeneği ile yapılır — Android Studio içe aktarmaları otomatik olarak dönüştürür.
ViewModel, Jetpack mimarisinin UI verilerini depolayan merkezi bileşenidir. Ekran döndürmede yok edilen Activity'nin aksine, ViewModel bellekte kalır. Kullanıcı bir form doldurur, telefonu döndürür — veriler kaybolmaz. ViewModel, LifecycleOwner (Activity veya Fragment) yaşam döngüsünü kalıcı olarak sonlandırdığında (finish) otomatik olarak temizlenir.
class ProfileViewModel : ViewModel() {
private val _userName = MutableLiveData<String>()
val userName: LiveData<String> = _userName
fun loadProfile(userId: String) {
viewModelScope.launch {
val user = repository.getUser(userId)
_userName.value = user.name
}
}
}
@OptIn(ExperimentalLifecycleApi::class)
class MyObserver : LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_START)
fun onStart() {
println("Ekran başlatıldı")
}
}
LiveData — yaşam döngüsüne saygı duyan gözlemlenebilir bir veri kapsayıcısıdır. Ekran görünür değilse (onStop), LiveData güncelleme göndermez — bu, bellek sızıntılarını ve var olmayan bir Activity'yi güncellemeye çalışırken oluşan çökmeleri önler. Lifecycle — geçerli durumu (CREATED, STARTED, RESUMED) depolayan ve diğer bileşenlerin durum değişikliklerine abone olmasına izin veren bir sınıftır. Birlikte, ViewModel, LiveData ve Lifecycle, reaktif Android mimarisinin temelini oluşturur.
viewModelScope — ViewModel yaşam döngüsüne bağlı yerleşik bir CoroutineScope'dur. Bu kapsamda başlatılan tüm coroutine'ler, ViewModel temizlendiğinde otomatik olarak iptal edilir. Bu, her ViewModel'de Disposable ve CompositeDisposable'ın manuel yönetimini ortadan kaldırır. viewModelScope ile çalışmak için androidx.lifecycle:lifecycle-viewmodel-ktx bağımlılığı gerekir.
Room, SQLite üzerinde soyut bir katman sağlayan bir Jetpack ORM kütüphanesidir. Ham SQL sorguları yazmak ve Cursor'u manuel olarak nesnelere dönüştürmek yerine, geliştirici bir Entity (tablo), DAO (Veri Erişim Nesnesi) ve Database (giriş noktası) bildirir. Room, @Query ek açıklaması aracılığıyla derleme zamanında SQL sorgularını doğrular — tablolar veya sütunlar yoksa, derleme net bir hatayla başarısız olur.
@Entity
data class User(
@PrimaryKey val id: String,
val name: String,
val email: String
)
@Dao
interface UserDao {
@Query("SELECT * FROM User WHERE id = :userId")
suspend fun getUser(userId: String): User?
@Insert
suspend fun insertUser(user: User)
}
@Database(entities = [User::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
abstract fun userDao(): UserDao
}
Entity User üç sütunlu bir tabloyu tanımlar. DAO, coroutine'lerle çalışmak için suspend işlevleri bildirir — sorgu otomatik olarak bir arka plan iş parçacığında yürütülür. Room, @Migration ek açıklaması aracılığıyla geçişleri destekler: geliştirici sürümler arasındaki geçiş için SQL betiğini tanımlar ve Room bunu veri kaybı olmadan yürütür. Geçiş olmadığında, Room IllegalStateException fırlatır — bu, şema güncellenirken projeleri yanlışlıkla veri kaybından korur.
Room yalnızca ilkel türleri ve bunların sarmalayıcılarını depolar. Listeleri, Date'i veya özel nesneleri depolamak için @TypeConverter kullanılır — bir türü String (JSON) veya Long (timestamp) dönüştüren statik bir yöntem. Tablolar arasındaki ilişkiler, @Relation ek açıklamasına sahip iç içe nesneler ve verimli birleştirme sorguları için @Transaction ile yardımcı POJO sınıfları aracılığıyla modellenir.
Navigation Component — ekranlar arası geçişleri yönetmek için bir Jetpack kütüphanesidir. Manuel olarak FragmentTransaction çağırmak yerine, geliştirici bir navigasyon grafiği (hedef düğümleri olan XML dosyası) oluşturur ve sistem, tür güvenli geçiş yöntemlerine sahip bir Directions sınıfı oluşturur. Navigation Component, geri yığının, derin bağlantıların ve ekranlar arasında argüman iletiminin doğru şekilde çalışmasını sağlar.
// nav_graph.xml
//
// android:name=".ProfileFragment">
//
// android:defaultValue="-1"
// app:argType="integer" />
//
// Fragment kodunda:
class ProfileFragment : Fragment() {
private val args: ProfileFragmentArgs by navArgs()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
loadProfile(args.userId)
}
}
userId argümanları, tür belirtimi (integer) ve varsayılan değer ile navigasyon grafiğinde iletilir. ProfileFragmentArgs sınıfı, Navigation Safe Args eklentisi tarafından otomatik olarak oluşturulur — doğru Kotlin türleriyle tüm argümanları içerir. Derin bağlantılar grafikte yapılandırılır: app:deepLink="app://profile/{userId}". Navigation Component, URL'yi ayrıştırır ve kullanıcı arayüzde gezinmiş gibi geri yığını oluşturur.
Navigation Component, NavController aracılığıyla BottomNavigationView ile entegre olur: her menü öğesi grafikteki bir hedefe bağlanır. Sekmeler arasında geçiş yapmak parçayı yeniden oluşturmaz — Navigation Component, NavBackStackEntry aracılığıyla durumu korur. Koşullu gezinme için (doğrulanmamışsa girişi göster), onCreate içinde bir kontrol ile navController.navigate(condition) kullanılır.
AndroidX, her kütüphanenin bağımsız bir sürümle kendi yapıtını aldığı, yeniden tasarlanmış bir Support Library mimarisidir. Tek bir com.android.support:appcompat-v7:28.0.0 yerine AndroidX, androidx.appcompat:appcompat:1.7.0, androidx.recyclerview:recyclerview:1.4.0 vb. sunar. Bu, farklı bağımlılıkların farklı Support Library sürümlerini çekerek çakışmalara neden olması sorununu ortadan kaldırdı.
AndroidX'e geçiş, Android Studio 3.2+'da Refactor → Migrate to AndroidX menüsü aracılığıyla otomatik olarak yapılır. Studio, Java/Kotlin dosyalarındaki, manifestlerdeki ve kaynaklardaki tüm içe aktarmaları değiştirir. Geriye dönük uyumluluk AndroidX'in ana avantajıdır: kütüphaneler Android 5.0 (API 21) ve üzerinde çalışır ve Google Play Console (2025)'ye göre aktif cihazların %97'sini kapsar.
En sık kullanılan yapıtlar: appcompat (eski API'lerde koyu tema, Material Design), recyclerview (ViewHolder ile uyarlanabilir listeler), constraintlayout (düz hiyerarşiye sahip esnek kapsayıcı), cardview (Material Design kartları), preference (Material stiliyle ayarlar ekranı). Her yapıt bağımsız olarak sürümlenir ve tüm paketi güncellemeden düzeltmelerin teslimatını hızlandırır.
Architecture ve AndroidX'in yanı sıra Jetpack, tipik mobil geliştirme görevleri için birçok özel kütüphane içerir. WorkManager — garantili yürütme ile arka plan görevleri (senkronizasyon, günlük yükleme) için, periyodik ve gecikmeli görevlerin yanı sıra ağ ve pil kısıtlamalarını destekler. DataStore — coroutine tabanlı SharedPreferences yerine geçen, yazılan özellikleri (Preferences DataStore) ve Protocol Buffers'ı (Proto DataStore) destekler.
Her kütüphanenin kendi minimum SDK'sı ve yapıtı vardır. Google, yılda bir kez (Android sürümüyle aynı anda) ana sürümler ve üç ayda bir güvenlik yamaları yayınlar. Öneri — APK boyutunu artırmamak için yalnızca gerekli kütüphaneleri ekleyin. Tam Jetpack koleksiyonu (tüm yapıtlar) 20 MB'ın üzerindedir, ancak tipik bir uygulama 5-7 kütüphane kullanır ve APK'ya 3-5 MB ekler.
Sıkça Sorulan Sorular
Evet, Google 2019'da Support Library desteğini sonlandırdı. Tüm yeni Jetpack kütüphaneleri ve Google Play Services AndroidX gerektirir. Geçiş, Android Studio aracılığıyla 30-60 dakika sürer.
Jetpack, Java ile tamamen uyumludur. Ancak birçok özellik (viewModelScope, coroutine'ler, Compose) yalnızca Kotlin'de kullanılabilir. Google yeni projeler için Kotlin'i önerir.
ViewModel nesneleri bellekte saklar ve döndürmeye dayanır. onSaveInstanceState yalnızca serileştirilebilir ilkeller (Bundle) için uygundur. ViewModel, işlem sonlandırıldığında korunmaz — bunun için SavedStateHandle gerekir.
WorkManager — uygulama kapatıldıktan sonra bile yürütülmesi gereken görevler için (senkronizasyon, günlük yükleme, analitik gönderme). Coroutine'ler — ekrana bağlı görevler için.
SharedPreferences içe aktarmalarını DataStoredataStore.data.first() (suspend) ile okuma, dataStore.edit { ... } ile yazma. DataStore eşzamansızdır ve ANR'ye karşı korumalıdır.
Özet
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.
Ayrıca okuyun