Geliştirici için bilinmesi gerekenler: Kısa cevap
Android 8, arka plan servisleri ve bildirim kanalları için sıkı kurallar getirdi; Android 9 ise enerji tasarrufu ve gizliliği güçlendirdi (App Standby Buckets, arka planda kamera/mikrofon erişimini engelleme), ayrıca gizli API çağrılarını kısıtladı ve BiometricPrompt ile ekran çentiği desteğini ekledi. Uygulamalar için bu şu anlama geliyor: Arka plan görevlerini, bildirimleri, gizli API çağrılarını ve sensör kullanımını yeniden gözden geçirin — ve Android 9 yüklü gerçek cihazlarda test edin.
Temel değişiklikler ve hemen yapılması gerekenler
- Arka plan servisleri: startService yerine startForegroundService kullanın; ertelenmiş/periyodik işler için JobScheduler/WorkManager'a geçin; uzun süreli görünür işler için foreground service + bildirim.
- Bildirim kanalları: targetSdk ≥ 26 olduğunda zorunludur — anlamlı kanallar oluşturun ve önem düzeylerini ayarlayın.
- App Standby Buckets: Sistem, arka plan işlerinin önceliklerini değiştirir (active → rare). Senkronizasyonu planlayın ve acil durumlar için FCM kullanın.
- Sensör gizliliği: Android 9'da arka plan/idle süreçlerden kamera/mikrofon/bazı sensörlere erişim yasaktır — bu işlemleri UI/foreground akışına taşıyın ve durum kontrolleri ekleyin.
- Non‑SDK API: Gizli yöntemlere yönelik yansıma (reflection) artık çoğu zaman engellenir veya günlüğe kaydedilir — bu alanları bulun ve genel API'ler veya Jetpack ile değiştirin.
- Biyometri ve UI: BiometricPrompt'a (veya androidx.biometric'e) geçiş yapın; doğru UI için display cutout ve WindowInsets'i dikkate alın.
Faydalı: WorkManager kullanın — Android sürümleri arasındaki davranışı soyutlar ve arka plan mantığının geçişini kolaylaştırır.
Temel alt sistemlere etkisi ve pratik ipuçları
- Arka plan yürütme
- Polling işlemlerini WorkManager/JobScheduler'a taşıyın; bir olay alındığında anında çalışma gerekiyorsa FCM yüksek öncelik kullanın.
- Testler: Battery Saver AÇIK, düşük kullanım simülasyonu, adb üzerinden Standby bucket değiştirme.
- Bildirimler
- Uygulama başlangıcında kanallar oluşturun, kullanıcıya önem düzeyi ayarlama seçeneği sunun; kanal devre dışı bırakıldığında oluşan durumları yönetin.
- Kamera/mikrofon/sensörler
- Bunları arka plan BroadcastReceiver/Service içinden açmaya çalışmayın. Arka planda kayıt gerekiyorsa — görünür bir bildirim ve açık kullanıcı onayı ile foreground service başlatın.
- Gizli API'ler
- Test derlemesinde statik analiz ve StrictMode çalıştırın; yansımayı genel karşılıklarıyla değiştirin veya bağımlılığı belgeleyip resmi bug tracker'ı arayın.
- Ağ ve güvenlik
- Network Security Config'i, cleartext devre dışı bırakmayı ve sunucu TLS ayarlarını kontrol edin; daha sonraki sürümlerde varsayılan olarak TLS 1.3 olsa da Android 8/9 için TLS 1.2 doğruluğunu sağlayın.
Geçiş planı ve kontrol listesi (hızlı eylem)
- SDK Platform 28 ve derleme araçlarını güncelleyin.
- Non‑SDK çağrılarını bulun ve kaldırın (statik analiz, logcat).
- Arka plan görevlerini WorkManager/JobScheduler'a taşıyın.
- Bildirim kanallarını uygulayın ve UX'i test edin.
- Arka plan senaryolarında kamera/mikrofon erişimini kontrol edin; gerekirse foreground service kullanın.
- Biyometriyi BiometricPrompt / androidx.biometric'e taşıyın.
- Android 8 ve 9 yüklü gerçek cihazlarda test edin: arka plan, bildirimler, ekran çentikleri, ağ kısıtlamaları.
- Genişletilmiş günlük kaydı (Crashlytics) ve sürüm sonrası izlemeyi etkinleştirin.
Bazı Android 9 kısıtlamaları, targetSdk 28'in altında olsa bile geçerlidir (örneğin enerji tasarrufu). Sadece emülatörde değil, Pie yüklü cihazlarda test edin.
Sık yapılan hatalar
- Arka plandan startService() kullanımı → IllegalStateException; startForegroundService() + 5 saniye içinde foreground başlatma gerekir.
- Arka planda kamera/mikrofon açma → SecurityException/hatalar; foreground akışına taşıyın.
- Gizli API'lere yansıma → Android 9'da uyarılar veya çökmeler.
SSS
-
Hemen targetSdk'yi 28'e yükseltmek gerekiyor mu?
- Önerilir, ancak bunu kod uyumlu hale geldiğinde yapın: bildirim kanalları, arka plan servislerinin yönetimi ve gizli API'lerin değiştirilmesi.
-
WorkManager her durumda yardımcı olur mu?
- Çoğu ertelenmiş/periyodik görev için evet; uzun süreli görünür işlemler için foreground service gerekir.
-
Uygulamanın Standby bucket'ını nasıl kontrol edebilirim?
- adb komutlarını ve manuel kullanım senaryolarını kullanarak rare/frequent davranışı simüle edin.
İsterseniz, kod tabanınız için ayrıntılı bir kontrol listesi hazırlayabilirim veya APK/Gradle dosyalarınızı non‑SDK çağrıları ve geçiş sorunları açısından hızlıca kontrol edebilirim — yapıtları gönderin.