Tüm Yazılar
KategoriAndroid
Okuma Süresi
20 dk okuma
Yayın Tarihi
...
Kelime Sayısı
1.408kelime

Kahveni hazırla - bu içerikli bir makale!

Android 15 (API 35) en önemli yenilikler: Privacy Sandbox, edge-to-edge zorunluluğu, foreground services strict mode, 16KB page sizes ve migration rehberi.

Android 15 Developer Rehberi: Privacy Sandbox, Edge-to-Edge, Foreground Services

# Android 15 Developer Rehberi: Privacy Sandbox, Edge-to-Edge, Foreground Services

Android 15 "Vanilla Ice Cream" (API level 35) 2024 Ekim'de stable release, 2026 itibariyle pazar paylaşımı %25+ cihazlarda. Google'ın bu release'i foreground services strict mode, edge-to-edge zorunluluğu, Privacy Sandbox GA, 16KB page size desteği ile 2026 Android ekosistemi için standard. Bu yazı developer perspektifinden Android 15'in en önemli yeniliklerini, breaking change'lerini ve migration stratejisini anlatır.

💡 Pro Tip: targetSdk=35 zorunluluğu Ağustos 2025'te başladı. Eğer targetSdk=34 veya düşükse uygulamanız Play Store'da güncelleme yapamaz. Migration öncelikli.

İçindekiler


Android 15 Özet

  • API level: 35
  • Kod adı: Vanilla Ice Cream
  • Stable release: 15 Ekim 2024
  • Target requirement: Ağustos 2025'ten itibaren yeni apps için zorunlu
  • Update requirement: Ağustos 2025'ten itibaren tüm app updates için zorunlu

Platform İstatistikleri (2026 Q1)

  • Android 15: %25.3
  • Android 14: %28.7
  • Android 13: %22.4
  • Android 12: %14.1
  • Android 11 ve altı: %9.5

Android 14 hala dominant ama Android 15 hızla yayılıyor.


Edge-to-Edge Zorunluluğu

Android 15 ile edge-to-edge rendering default. Status bar ve navigation bar artık app content'in üstüne çizilir. Eski "insets respected automatically" davranışı gitti.

Compose ile Migration

kotlin
1class MainActivity : ComponentActivity() {
2 override fun onCreate(savedInstanceState: Bundle?) {
3 super.onCreate(savedInstanceState)
4 enableEdgeToEdge() // Explicit olarak enable et (default API 35+)
5 
6 setContent {
7 MyAppTheme {
8 // Scaffold otomatik insets handle eder
9 Scaffold(
10 topBar = { TopAppBar(...) },
11 content = { padding ->
12 LazyColumn(
13 contentPadding = padding // System bar padding'i hesaba kat
14 ) { ... }
15 }
16 )
17 }
18 }
19 }
20}

View System'de Migration

kotlin
1WindowCompat.setDecorFitsSystemWindows(window, false)
2 
3ViewCompat.setOnApplyWindowInsetsListener(rootView) { view, insets ->
4 val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
5 view.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
6 insets
7}

Yaygın Sorunlar

  • Button'lar bottom'da: Navigation bar altında kalıyor → WindowInsets.systemBars
  • Status bar'dan overlap: Top content, status bar altında → .statusBars insets
  • Keyboard ile conflict: IME insets handle et → WindowInsets.ime

Foreground Services Strict Mode

Background'dan foreground service başlatma artık çok sıkı. Yeni FGS types:

xml
1
2 android:name=".MyService"
3 android:foregroundServiceType="mediaPlayback|camera|location|microphone|dataSync|specialUse" />

Her Tipe Özel İzin

xml
1
2
3
4 
5
6
7
8
9 
10
11
12

Runtime Restrictions

Android 15'te bir foreground service başlatmak için:

  • App foreground'da olmalı, VEYA
  • User visible dialog gösterilmeli, VEYA
  • Specific exemption (FCM high priority, etc.)
kotlin
1// Check if can start foreground service
2if (ActivityManager.isBackgroundRestricted(context)) {
3 // Cannot start FGS — show user a permission dialog
4 showFgsPermissionDialog()
5} else {
6 startForegroundService(intent)
7}

Eski "background'dan FGS başlat" pattern'i broken. Migration: WorkManager için geçiş yap.


Privacy Sandbox GA

Android 15 Privacy Sandbox GA — third-party cookie alternative + device identifier privacy:

Topics API

Interest-based advertising için user behavior'dan "topics" türetiyor, device-local:

kotlin
1import androidx.privacysandbox.ads.adservices.topics.*
2 
3val manager = TopicsManager.obtain(context)
4val request = GetTopicsRequest.Builder()
5 .setAdsSdkName("my_sdk")
6 .setShouldRecordObservation(true)
7 .build()
8 
9val topics = manager.getTopics(request)
10// topics[0].topicId, topics[0].taxonomyVersion

Attribution API

Ad click → conversion tracking, device-local:

kotlin
1val manager = MeasurementManager.obtain(context)
2manager.registerSource(Uri.parse("https://adtech.com/source?id=123"))
3 
4// Later, at conversion:
5manager.registerTrigger(Uri.parse("https://adtech.com/trigger?id=456"))

SDK Runtime

Third-party SDK'lar artık kendi Linux process'inde isolate çalışıyor — app memory'e access yok.


16KB Page Size

ARM64 cihazlar 4KB'den 16KB'ye page size'a geçiş yapıyor (performans için). Android 15 ikisini de destekliyor.

App Impact

  • %30 startup artışı: 16KB cihazlarda
  • %20 daha az memory usage
  • Native library gerekli compat: .so dosyaları 16KB-aligned olmalı

Migration

gradle
1// Gradle'da
2android {
3 defaultConfig {
4 ndk {
5 // Her iki page size için build
6 abiFilters 'arm64-v8a', 'armeabi-v7a'
7 }
8 }
9}

Native library kullanmayan Kotlin-only app'ler otomatik compatible.

Test

bash
1# Pixel 8+ 16KB page size emulator
2adb shell getconf PAGE_SIZE
3# 16384 = 16KB
4 
5# App crash'larda page size issue'su büyük ihtimal

Partial Screen Sharing

Android 15 ile app'ler sadece app içeriklerini paylaşabiliyor (full screen yerine):

kotlin
1val projectionManager = context.getSystemService(ProjectionManager::class.java)
2val intent = projectionManager.createScreenCaptureIntent(
3 MediaProjectionConfig.createConfigForUserChoice() // App-only option
4)
5startActivityForResult(intent, REQUEST_CODE)

User dialog'da "share whole screen" or "share just this app" seçebiliyor.

Use Cases

  • Video calls (Zoom, Meet): app-only screen share
  • Screen recording: sadece belirli app
  • Remote assistance: limit sharing scope

Predictive Back Gesture

Android 15'te predictive back default aktif. User back gesture yaparken preview'ı görüyor:

kotlin
1override fun onCreate(savedInstanceState: Bundle?) {
2 super.onCreate(savedInstanceState)
3 
4 onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) {
5 override fun handleOnBackStarted(backEvent: BackEventCompat) {
6 // Back başladı, animation başlat
7 }
8 
9 override fun handleOnBackProgressed(backEvent: BackEventCompat) {
10 // User swipe yapıyor, progress göster
11 val progress = backEvent.progress // 0.0 - 1.0
12 animateBackProgress(progress)
13 }
14 
15 override fun handleOnBackPressed() {
16 // Back commit edildi
17 finish()
18 }
19 
20 override fun handleOnBackCancelled() {
21 // User vazgeçti
22 resetAnimation()
23 }
24 })
25}

AndroidManifest'te enable:

xml
1
2 android:enableOnBackInvokedCallback="true">
3 ...
4

Health Connect Genişleme

Health Connect API'leri Android 15'te built-in:

kotlin
1import androidx.health.connect.client.*
2 
3val client = HealthConnectClient.getOrCreate(context)
4 
5// Read steps
6val permissions = setOf(
7 HealthPermission.getReadPermission(StepsRecord::class)
8)
9val granted = client.permissionController.getGrantedPermissions()
10 
11if (permissions.all { it in granted }) {
12 val response = client.readRecords(
13 ReadRecordsRequest(
14 recordType = StepsRecord::class,
15 timeRangeFilter = TimeRangeFilter.between(
16 startTime = Instant.now().minus(Duration.ofDays(7)),
17 endTime = Instant.now()
18 )
19 )
20 )
21 val totalSteps = response.records.sumOf { it.count }
22}

Fitbit, Samsung Health, Google Fit artık Health Connect üzerinden data paylaşıyor.


App Archiving

User'lar artık app'leri archive edebiliyor (silmeden):

  • Install size: %60 azalma (APK preserved, data kept)
  • Icon kalıyor, tap ile re-install
  • Play Store Google tarafından otomatik

Developer için:

kotlin
1// App archived'den unarchive olurken:
2override fun onCreate(savedInstanceState: Bundle?) {
3 super.onCreate(savedInstanceState)
4 
5 val wasArchived = intent.getBooleanExtra("was_archived", false)
6 if (wasArchived) {
7 // Data hala var, onboarding atla
8 }
9}

Migration Checklist

Android 15'e geçerken:

  1. targetSdk=35 güncelle
  2. Edge-to-edge zorunluluğu için insets handling
  3. Foreground service types belirt, permissions ekle
  4. Privacy Sandbox opt-in (ad SDK'sı varsa)
  5. 16KB page size native lib compat
  6. Partial screen share UI update
  7. Predictive back callback migration
  8. OnBackPressedDispatcher modern pattern
  9. Notification runtime permission check
  10. AndroidX library upgrade (Compose 1.7+, Activity 1.9+, etc.)

ALTIN İPUCU

Bu yazının en değerli bilgisi

Bu ipucu, yazının en önemli çıkarımını içeriyor.

Easter Egg

Gizli bir bilgi buldun!

Bu bölümde gizli bir bilgi var. Keşfetmek ister misin?

bash
1#!/bin/bash
2# android15-migration-check.sh
3 
4echo "🔍 Android 15 Migration Check"
5echo ""
6 
7# 1. Check targetSdk
8echo "1. TargetSdk check..."
9grep -r "targetSdk" app/build.gradle.kts | grep -v "// " | head -3
10 
11# 2. Check for deprecated APIs
12echo "2. Deprecated API check..."
13grep -r "setDecorFitsSystemWindows" app/src/main || echo "✅ Clean"
14 
15# 3. Check for foreground service types
16echo "3. Foreground service types..."
17grep -r 'foregroundServiceType' app/src/main/AndroidManifest.xml || echo "⚠️ Missing types"
18 
19# 4. Check for edge-to-edge
20echo "4. Edge-to-edge..."
21grep -r "enableEdgeToEdge()" app/src/main/java || echo "⚠️ Missing enableEdgeToEdge"
22 
23# 5. Check AGP version
24echo "5. AGP version..."
25grep "com.android.application" settings.gradle.kts build.gradle.kts
26 
27echo ""
28echo "✅ Check complete. Review warnings above."

Okuyucu Ödülü

**External Resources:** - [Android 15 release notes](https://developer.android.com/about/versions/15) - [Edge-to-edge migration guide](https://developer.android.com/develop/ui/views/layout/edge-to-edge) - [Foreground services guide](https://developer.android.com/develop/background-work/services/fgs) - [Privacy Sandbox](https://developer.android.com/design-for-safety/privacy-sandbox) - [16KB page size](https://developer.android.com/guide/practices/page-sizes)

Sonuç

Android 15 incremental ama impact'li bir release. targetSdk=35 zorunluluğu her app'i migration'a zorluyor. Edge-to-edge, foreground service strict mode, Privacy Sandbox production change'leri. 16KB page size performance için büyük kazanç — native lib'lerin uyumu kritik. Migration 1-2 haftalık iş (medium app). 2026 Android 16 Q3'te bekleniyor — speculations: Gemini Nano derin integration, daha strict privacy, battery optimization.

*İlgili yazılar: Dart 3 Features, Flutter Riverpod, Kotlin Coroutines.*

Etiketler

#Android#Android 15#API 35#Privacy Sandbox#Foreground Service#Kotlin#2026
Muhittin Çamdalı

Muhittin Çamdalı

Senior iOS Developer

12+ yıllık deneyime sahip iOS Developer. Swift, SwiftUI ve modern iOS mimarileri konusunda uzman. Apple platformlarında performanslı ve kullanıcı dostu uygulamalar geliştiriyorum.

iOS Geliştirme Haberleri

Haftalık Swift tips, SwiftUI tricks ve iOS best practices. Spam yok, sadece değerli içerik.

Gizliliğinize saygı duyuyoruz. İstediğiniz zaman abonelikten çıkabilirsiniz.

Paylaş

Bunu da begenebilirsiniz