Android, Linux çekirdeği üzerinde çalışan, açık kaynak kodlu (AOSP) bir Google mobil işletim sistemidir. Android geliştirme, Android Studio ortamında Kotlin kullanılarak yapılır. Bu makale, işletim sistemi mimarisini, uygulama bileşenlerini, Jetpack Compose'u ve Google Play'de yayınlamayı kapsar.
Önemli Noktalar
Android, Linux çekirdeği tabanlı, Google tarafından 2007'den beri geliştirilen bir mobil işletim sistemidir. Kaynak kodu, Android Open Source Project (AOSP) kapsamında Apache 2.0 lisansı altında açıktır. Her üretici sistemi değiştirebilir ve kendi cihazlarına yükleyebilir.
StatCounter (2026) verilerine göre Android, küresel mobil işletim sistemi pazarının yaklaşık %72'sini elinde tutuyor. En büyük üreticiler Samsung, Xiaomi, Oppo, Vivo, Google Pixel'dir. Parçalanma platformun temel sorunudur: farklı işletim sistemi sürümlerine sahip binlerce model aynı anda kullanılmaktadır.
Android mimarisi izinler (permissions) ilkesi üzerine kurulmuştur: her uygulama ayrı bir Linux UID altında çalışır ve yalnızca kendi verilerine erişebilir. Sistem kaynaklarına (kamera, mikrofon, kişiler) erişim, Android 6 (API 23) ile başlayarak çalışma zamanında Android İzinleri aracılığıyla istenir.
Android 1.0, 2008 yılında HTC Dream'de piyasaya sürüldü. Önemli dönüm noktaları: Android 4.0 Ice Cream Sandwich (telefonlar ve tabletler için birleşik arayüz), Android 5.0 Lollipop (Material Design), Android 6.0 (çalışma zamanı izinleri), Android 10 (koyu tema, jestler), Android 12 (Material You). 2023'ten itibaren Google, tatlı isimleri olmayan yıllık ana sürümlere geçti.
| Android Sürümü | Yıl | Temel Yenilik |
|---|---|---|
| Android 1.0 | 2008 | HTC Dream'de ilk sürüm |
| Android 4.0 (ICS) | 2011 | Telefonlar ve tabletler için birleşik tasarım |
| Android 5.0 (L) | 2014 | Material Design, Dalvik yerine ART |
| Android 6.0 (M) | 2015 | Çalışma zamanı izinleri, Doze modu |
| Android 8.0 (O) | 2017 | Kotlin'in resmi dil olması |
| Android 10 (Q) | 2019 | Scoped Storage, koyu tema |
| Android 12 (S) | 2021 | Material You, Privacy Dashboard |
| Android 15 | 2024 | Private Space, uydu bağlantısı |
Android mimarisi, donanımı kullanıcı uygulamalarından ayıran dört ana katmandan oluşur. Her katman, kesin olarak tanımlanmış arayüzler aracılığıyla altındaki katmanın hizmetlerini kullanır.
En alt katman, değiştirilmiş bir Linux çekirdeğidir (LTS, Android 15'te sürüm 6.x). Bellek yönetimi, süreçler, ağ yığını ve sürücüleri yönetir. Donanım Soyutlama Katmanı (HAL), donanımla (kamera, Bluetooth, Wi-Fi, sensörler) etkileşim için birleşik bir API sağlar. Üreticiler, üst katmanları etkilemeden HAL modülleri uygular.
ART, uygulamaların DEX bayt kodunu çalıştırır. Android 5.0'den itibaren ART, Dalvik'in yerini aldı ve performansı artırmak için Ahead-of-Time (AOT) derlemesi kullanır. Her uygulamanın ayrı bir ART örneği ile kendi süreci vardır. Çöp toplama (GC) minimum duraklamalarla çalışır — tipik bir GC duraklaması 2-4 ms'dir.
Framework, geliştiricinin doğrudan çalıştığı katmandır. Activity Manager (ekran yığını), Content Providers (veri erişimi), Resource Manager (yerelleştirme, kaynaklar), Notification Manager, Location Manager içerir. Tüm sistem servisleri, Android'in süreçler arası iletişim mekanizması olan Binder IPC aracılığıyla çağrılır.
// AIDL arayüzü üzerinden Binder ile çalışma örneği
interface IDataService : android.os.IInterface {
fun getData(): List<DataItem>
fun saveData(item: DataItem): Boolean
}
// Hizmet uygulaması
class DataService : Service() {
private val binder = object : IDataService.Stub() {
override fun getData(): List<DataItem> = repository.getAll()
override fun saveData(item: DataItem): Boolean = repository.save(item)
}
override fun onBind(intent: Intent?): IBinder = binder
}En üst katman standart sistem uygulamalarından oluşur: Telefon, Kişiler, Kamera, Ayarlar, Tarayıcı. Kullanıcı uygulamalarından daha yüksek ayrıcalıkları yoktur, ancak üçüncü taraf uygulamalarla değiştirilebilirler. Android 15'te sistem uygulamaları, üretici OTA güncellemelerinden bağımsız olarak Google Play System Updates aracılığıyla güncellenir.
Kotlin, JetBrains tarafından geliştirilen, JVM üzerinde çalışan statik olarak tiplendirilmiş bir programlama dilidir. Google, 2017'de Google I/O'da Kotlin'i resmi Android dili olarak duyurdu. Kotlin, Java ile tamamen uyumludur ancak eksikliklerini giderir: null güvenliği, veri sınıfları, genişletme fonksiyonları ve coroutine'ler.
Kotlin'in ana özelliği, NullPointerException'a karşı yerleşik korumadır. Türler nullable (String?) ve non-null (String) olarak ayrılır. Derleyici, nullable erişimi derleme zamanında kontrol eder. Safe call (?.) ve Elvis operatörü (?:), iç içe kontroller olmadan isteğe bağlı değerlerle çalışmayı basitleştirir.
// Coroutine ve Flow ile Kotlin kodu örneği
data class User(
val id: Long,
val name: String,
val email: String
)
class UserRepository(
private val api: UserApi,
private val dao: UserDao
) {
suspend fun getUser(id: Long): Result<User> {
return try {
val cached = dao.getUser(id)
if (cached != null) {
return Result.success(cached)
}
val remote = api.fetchUser(id)
dao.insertUser(remote)
Result.success(remote)
} catch (e: Exception) {
Result.failure(e)
}
}
fun observeUsers(): Flow<List<User>> {
return dao.observeAll()
.map { list -> list.sortedBy { it.name } }
.flowOn(Dispatchers.Default)
}
}Örnek, asenkron ağ ve veritabanı erişimi için coroutine'leri (suspend fonksiyonu), veri değişikliklerinin reaktif gözlemi için Flow'ı ve güvenli hata işleme için Result'ı gösterir. Coroutine'ler, iş parçacığı yükü olmadan callback'lerin ve RxJava'nın yerini alır.
Kotlin coroutine'leri, paylaşılan bir iş parçacığı havuzunda çalışan hafif iş parçacıklarıdır. Ağ ve disk için Dispatchers.IO, UI için Dispatchers.Main, CPU yoğun görevler için Dispatchers.Default. viewModelScope ve lifecycleScope, bileşen yok edildiğinde coroutine'leri otomatik olarak iptal eder.
// Coroutine ve StateFlow ile ViewModel
class UserViewModel(
private val repository: UserRepository
) : ViewModel() {
private val _users = MutableStateFlow<List<User>>(emptyList())
val users: StateFlow<List<User>> = _users.asStateFlow()
private val _loading = MutableStateFlow(false)
val loading: StateFlow<Boolean> = _loading.asStateFlow()
init {
viewModelScope.launch {
repository.observeUsers().collect { userList ->
_users.value = userList
}
}
}
fun refresh() {
viewModelScope.launch {
_loading.value = true
repository.getUser(42).onSuccess { user ->
_users.value = listOf(user)
}
_loading.value = false
}
}
}Android Studio, IntelliJ IDEA tabanlı resmi IDE'dir ve Google tarafından geliştirilmiştir. Kod düzenleyici, Layout Inspector, cihaz emülatörü, APK Analyzer, Profiler (CPU, Bellek, Ağ, Enerji) ve Firebase entegrasyonu içerir. Android Studio 2024 (Ladybug), çok platformlu KMP moduyla Kotlin 2.0'ı destekler.
Android Emülatörü, donanım hızlandırması için KVM (Linux) veya Hyper-V (Windows) kullanır. GPS, sensörler, kamera, aramalar ve SMS simülasyonunu destekler. Google Pixel 9 Pro, API 35 ve 8 GB emülatör RAM'i ile test için önerilen yapılandırmadır.
Profiler, gerçek zamanlı olarak CPU yükünü, bellek tahsisini, ağ isteklerini ve enerji tüketimini gösterir. Memory Profiler, referans ağacı aracılığıyla heap dökümü ve sızıntı analizine olanak tanır. Network Inspector, gövde ve başlıklarla birlikte tüm HTTP/HTTPS isteklerini kaydeder. Derinlemesine analiz için Android Studio Canary kullanılır.
Bir Android uygulaması, her biri kendi giriş noktasına ve yaşam döngüsüne sahip dört tür bileşenden oluşur. Bileşenler AndroidManifest.xml dosyasında kaydedilir.
| Bileşen | Amaç | Giriş Noktası |
|---|---|---|
| Activity | Kullanıcı etkileşimi için UI ekranı | Action.MAIN ve LAUNCHER kategorisi ile Intent |
| Service | UI olmadan arka plan görevi yürütme | startService() veya bindService() |
| BroadcastReceiver | Sistem veya özel etkinlikleri alma | Manifestte veya kodda kayıt |
| ContentProvider | Yapılandırılmış verilere erişimi yönetme | ContentResolver aracılığıyla URI |
Activity, kullanıcı arayüzünün temel bileşenidir. Her ekran ayrı bir Activity veya Activity içinde bir Fragment'tir. Ekranlar arasında gezinme, bir eylem (ACTION_VIEW, ACTION_SEND) ve veri (URI) içeren bir nesne olan Intent aracılığıyla yapılır. Jetpack Navigation Graph'ta gezinme XML'de tanımlanır.
Service arka plan görevlerini yürütür, ancak Android 8'den itibaren arka plan servisleri kısıtlanmıştır. WorkManager, zincirler, kısıtlamalar (örneğin, yalnızca şarj olurken) ve çökme sonrası yeniden başlatma desteği ile ertelenmiş ve garanti edilmiş arka plan görevleri için önerilen kitaplıktır.
Jetpack Compose ve geleneksel XML düzenleri arasındaki seçim, bir Android projesine başlarken ana mimari karardır. XML Düzenleri (RecyclerView, ConstraintLayout, FrameLayout) 2008'den beri standarttır. Jetpack Compose, 2021'de bildirimsel bir alternatif olarak tanıtıldı.
| Kriter | XML Layouts | Jetpack Compose |
|---|---|---|
| Paradigma | Emir kipi (View ağacı) | Bildirimsel (@Composable fonksiyonlar) |
| Minimum Sürüm | Herhangi biri (API 1+) | API 21+ (Android 5.0) |
| Düzen | XML + data binding / ViewBinding | Modifier ile Kotlin kodu |
| RecyclerView benzeri | RecyclerView + Adapter + ViewHolder | LazyColumn / LazyGrid |
| Önizleme | Android Studio'da XML önizleme | Etkileşimli @Preview ek açıklaması |
| Yeniden Birleştirme | notifyDataSetChanged (tam) | Otomatik, ayrıntılı (DiffUtil) |
| Birlikte Çalışabilirlik | Tam (tüm kitaplıklar) | XML'de ComposeView / Compose'da AndroidView |
Google, tüm yeni projeler için Jetpack Compose'u önerir. XML Düzenleri, eski proje desteği ve maksimum View özelleştirmesi (Canvas, SurfaceView) gereken durumlar için geçerliliğini korur. Compose kodu, eşdeğer XML + ViewBinding'den ortalama %40 daha kısadır.
// Jetpack Compose — kullanıcı profili ekranı
@Composable
fun ProfileScreen(
user: User,
onEditClick: () -> Unit,
modifier: Modifier = Modifier
) {
Column(
modifier = modifier
.fillMaxSize()
.padding(16.dp),
horizontalAlignment = Alignment.CenterHorizontally
) {
AsyncImage(
model = user.avatarUrl,
contentDescription = "Kullanıcı avatarı",
modifier = Modifier
.size(120.dp)
.clip(CircleShape)
)
Spacer(modifier = Modifier.height(16.dp))
Text(
text = user.name,
style = MaterialTheme.typography.headlineMedium
)
Text(
text = user.email,
style = MaterialTheme.typography.bodyLarge,
color = MaterialTheme.colorScheme.onSurfaceVariant
)
Spacer(modifier = Modifier.height(24.dp))
Button(onClick = onEditClick) {
Icon(Icons.Default.Edit, contentDescription = null)
Spacer(modifier = Modifier.width(8.dp))
Text("Profili düzenle")
}
}
}
@Preview(showBackground = true, showSystemUi = true)
@Composable
fun ProfileScreenPreview() {
MaterialTheme {
ProfileScreen(
user = User(1, "Anna Petrova", "anna@example.com"),
onEditClick = {}
)
}
}ProfileScreen fonksiyonu @Composable olarak bildirilir — View örnekleri oluşturmadan UI'ı bildirimsel olarak tanımlar. Compose, user değiştiğinde ekranı otomatik olarak günceller. @Preview, derleme ve emülatörde çalıştırma olmadan sonucu doğrudan IDE'de gösterir.
Android'deki her Activity altı yaşam döngüsü durumundan geçer: onCreate, onStart, onResume, onPause, onStop, onDestroy. Fragment, onAttach, onCreateView, onViewCreated ekler. Yaşam döngüsünü anlamak, bellek yönetimi ve sızıntıları önleme için kritiktir.
onCreate — Activity oluşturulduğunda bir kez çağrılır. Burada başlatma yapılır: setContentView, bağdaştırıcı kurulumu, LiveData aboneliği. onResume — Activity ön plandadır ve kullanıcıyla etkileşim halindedir. onPause — Activity odağı kaybeder (diyalog, başka Activity). onStop — Activity görünmez. onDestroy — Activity yok edilir.
// LifecycleScope ile yaşam döngüsü yönetimi olan Activity
class MainActivity : ComponentActivity() {
private val viewModel: UserViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
MaterialTheme {
lifecycleScope.launch {
repeatOnLifecycle(Lifecycle.State.STARTED) {
viewModel.users.collect { users ->
updateUi(users)
}
}
}
}
}
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putString("last_search", searchQuery)
}
override fun onRestoreInstanceState(savedInstanceState: Bundle) {
super.onRestoreInstanceState(savedInstanceState)
searchQuery = savedInstanceState.getString("last_search", "")
}
}repeatOnLifecycle kullanımı, Activity arka plana geçtiğinde veri toplamanın duraklamasını ve ön plana döndüğünde devam etmesini sağlar. Bu, sızıntıları ve gereksiz ağ isteklerini önler. onSaveInstanceState, ekran döndürmede geçici durumu kaydeder.
Google Play, resmi Android uygulama mağazasıdır. Geliştirici hesabı kaydı tek seferlik $25 tutarındadır. Her uygulama, kötü amaçlı kod, politika ihlalleri ve yanlış izin kullanımı için otomatik Google Play Integrity denetiminden geçer.
Google, uygulamanın Android App Bundle (AAB) veya APK aracılığıyla imzalanmasını gerektirir. AAB, her cihaz yapılandırması için optimize edilmiş APK'lar oluşturmayı sağlayan önerilen biçimdir. Uygulama, geçerli bir sertifikaya sahip bir anahtarla (keystore) imzalanmalıdır. Google Play App Signing, Google tarafında isteğe bağlı anahtar şifrelemesidir.
Kişisel verilere erişim talep eden tüm uygulamalar bir Gizlilik Politikası sağlamalıdır. 2024'ten itibaren Google, toplanan veri türlerini ve işleme amaçlarını belirten bir Data Safety beyanı talep etmektedir. Android 14+ hedefleyen uygulamalar, izinleri bildirmek için Declarations API'yi kullanmalıdır.
| Gereksinim | Açıklama |
|---|---|
| Android App Bundle | Optimize edilmiş dağıtım için AAB biçimi |
| Data Safety | Kişisel verilerin toplanması ve işlenmesi hakkında form |
| Hedef SDK | Uygulama en son Android API seviyesini hedeflemelidir |
| İçerik Derecelendirmesi | Yaş derecelendirme anketi |
| Mağaza Listesi | Ad, simge, ekran görüntüleri, açıklama |
Sıkça Sorulan Sorular
Kotlin — Google tarafından Android için resmi olarak önerilen dil. Java da eski projeler için desteklenmektedir. Kotlin, null güvenliği, coroutine'ler ve genişletme fonksiyonları sunarak kod hacmini Java'ya kıyasla %30-40 oranında azaltır.
Jetpack Compose, bildirimsel sözdizimi ve otomatik yeniden birleştirme optimizasyonu sayesinde tüm yeni projeler için önerilir. XML Layouts, eski projelerde ve Canvas veya SurfaceView'in ayrıntılı özelleştirilmesinin gerektiği durumlarda kalır.
Google Play geliştirici kaydı tek seferlik $25 tutarındadır. Mağaza komisyonu ilk 1 milyon $ gelir için %15, sonrasında %30'dur. Abonelikler için komisyon ilk günden itibaren %15'tir. Apple Developer Program'ın aksine yıllık ücret yoktur.
Android Jetpack, resmi SDK'ya dahil edilen Google kitaplıkları setidir: Navigation, Room (derleme zamanı sorgu denetimi ile SQLite ORM), WorkManager (garantili arka plan görevleri), ViewModel (durum yönetimi), LiveData ve StateFlow (reaktiflik için).
Yeni projeler için desteklenen minimum sürüm API 24'tür (Android 7.0). AndroidManifest.xml, uygulama bileşenlerini ve izinlerini tanımlar. APK/AAB bir keystore ile imzalanır. Hedef SDK, yayınlama sırasındaki en son API seviyesiyle eşleşmelidir.
Ö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.