Android 10, uygulamanızı etkileyebilecek güncellenmiş sistem davranışı değişiklikleri içerir. Bu sayfada listelenen değişiklikler yalnızca API 29 veya sonraki sürümleri hedefleyen uygulamalar için geçerlidir. Uygulamanız targetSdkVersion
değerini "29" veya daha yüksek bir değere ayarlarsa geçerli olduğu durumlarda uygulamanızı bu davranışları düzgün şekilde destekleyecek şekilde değiştirmeniz gerekir.
Android 10'da çalışan tüm uygulamaları etkileyen davranış değişiklikleri listesini de inceleyin.
Not: Android 10, bu sayfada listelenen değişikliklere ek olarak aşağıdakiler de dahil olmak üzere çok sayıda gizlilik odaklı değişiklik ve kısıtlama sunar:
- Kapsamlı depolama alanı
- USB cihazının seri numarasına erişme
- Kablosuz bağlantıyı etkinleştirme, devre dışı bırakma ve yapılandırma
- Bağlantı API'leri için konum izinleri
API düzeyi 29 veya üstünü hedefleyen uygulamaları etkileyen bu değişiklikler, kullanıcı gizliliğini artırır. Bu değişiklikleri nasıl destekleyeceğiniz hakkında daha fazla bilgi edinmek için Gizlilik değişiklikleri sayfasına bakın.
SDK olmayan arayüz kısıtlamalarında yapılan güncellemeler
Platform, uygulama kararlılığı ve uyumluluğunu sağlamak için uygulamanızın Android 9'da (API düzeyi 28) kullanabileceği SDK dışı arayüzleri kısıtlamaya başladı. Android 10, Android geliştiricilerle yapılan ortak çalışmalara ve en son dahili testlere dayalı olarak kısıtlanmış SDK dışı arayüzlerin güncellenmiş listelerini içerir. Hedefimiz, SDK dışı arayüzleri kısıtlamadan önce herkese açık alternatiflerin kullanıma sunulduğundan emin olmaktır.
Android 10'u (API düzeyi 29) hedeflemeyecekseniz bu değişikliklerin bazıları sizi hemen etkilemeyebilir. Ancak şu anda bazı SDK dışı arayüzleri kullanabilseniz de (uygulamanızın hedef API düzeyine bağlı olarak) SDK dışı herhangi bir yöntem veya alanı kullanmak her zaman uygulamanızın bozulma riskini artırır.
Uygulamanızın SDK dışı arayüz kullanıp kullanmadığından emin değilseniz bunu öğrenmek için uygulamanızı test edebilirsiniz. Uygulamanız SDK dışı arayüzlere dayanıyorsa SDK alternatiflerine geçiş planlamaya başlamanız gerekir. Bununla birlikte, bazı uygulamaların SDK dışı arayüzleri kullanmanın geçerli kullanım alanları olduğunu biliyoruz. Uygulamanızdaki bir özellik için SDK dışı arayüz kullanmanın alternatifini bulamıyorsanız yeni bir herkese açık API isteğinde bulunmanız gerekir.
Daha fazla bilgi edinmek için Android 10'daki SDK dışı arayüz kısıtlamalarında yapılan güncellemeler ve SDK dışı arayüzlerde kısıtlamalar başlıklı makaleleri inceleyin.
Paylaşılan bellek
Ashmem, /proc/<pid>/maps adresindeki dalvik haritalarının biçimini değiştirdi. Bu değişiklik, harita dosyasını doğrudan ayrıştıran uygulamaları etkiledi. Uygulama geliştiriciler, Android 10 veya sonraki sürümleri çalıştıran cihazlarda /proc/<pid>/maps biçimini test etmeli ve uygulama dalvik harita biçimlerine bağlıysa buna göre ayrıştırmalıdır.
Android 10'u hedefleyen uygulamalar ashmem'i (/dev/ashmem) doğrudan kullanamaz. Bunun yerine, NDK'nın ASharedMemory
sınıfı aracılığıyla paylaşılan belleğe erişmelidir.
Ayrıca uygulamalar, mevcut ashmem dosya tanımlayıcılarına doğrudan IOCTL gönderemez ve bunun yerine paylaşılan bellek bölgeleri oluşturmak için NDK'nın ASharedMemory
sınıfını veya Android Java API'lerini kullanmalıdır. Bu değişiklik, paylaşılan bellekle çalışırken güvenliği ve sağlamlığı artırarak Android'in genel performansını ve güvenliğini iyileştirir.
Uygulama ana dizini için yürütme izni kaldırıldı
Yazılabilir uygulama ana dizinindeki dosyaların yürütülmesi W^X ihlali'dir. Uygulamalar yalnızca uygulamanın APK dosyasına yerleştirilmiş olan ikili kodu yüklemelidir.
Android 10'u hedefleyen güvenilmeyen uygulamalar, execve()
doğrudan uygulamanın ana dizinindeki dosyalarda çağıramaz.
Ayrıca, Android 10'u hedefleyen uygulamalar, dlopen()
ile açılan dosyalardaki yürütülebilir kodu bellekte değiştiremez ve bu değişikliklerin diske yazılmasını bekleyemez. Bunun nedeni, kitaplığın yazılabilir bir dosya tanımlayıcısı aracılığıyla PROT_EXEC
ile eşlenememesidir. Buna, metin taşıma işlemleri içeren tüm paylaşılan nesne (.so
) dosyaları dahildir.
Android çalışma zamanı yalnızca sistem tarafından oluşturulan OAT dosyalarını kabul eder
Android çalışma zamanı (ART), artık uygulama sürecinden dex2oat
'ü çağırmıyor. Bu değişiklik, ART'nin yalnızca sistemin oluşturduğu OAT dosyalarını kabul edeceği anlamına gelir.
ART'te AOT doğruluğunu zorunlu kılma
Geçmişte, Android Runtime (ART) tarafından gerçekleştirilen derleme öncesi (AOT) derleme, sınıf yolu ortamı derleme zamanı ve çalışma zamanında aynı değilse çalışma zamanında kilitlenmelere neden olabiliyordu. Android 10 ve sonraki sürümler, bu ortam bağlamlarının her zaman aynı olmasını gerektirir. Bu da davranışta aşağıdaki değişikliklere neden olur:
- Özel sınıf yükleyiciler (yani
dalvik.system
paketindeki sınıf yükleyicilerin aksine uygulamalar tarafından yazılan sınıf yükleyiciler) AOT derlenmez. Bunun nedeni, ART'ın çalışma zamanında özelleştirilmiş sınıf arama uygulaması hakkında bilgi sahibi olmamasıdır. - İkincil dex dosyaları (yani birincil APK'da olmayan uygulamalar tarafından manuel olarak yüklenen dex dosyaları) arka planda AOT derlenir. Bunun nedeni, ilk kullanım derlemesinin çok pahalı olması ve yürütmeden önce istenmeyen gecikmeye neden olmasıdır. Uygulamalarda, bölünmeleri benimsemenin ve ikincil dizin dosyalarından uzaklaşmanın önerilir.
- Android'deki paylaşılan kitaplıklar (<library> ve <uses-library> girişleri), platformun önceki sürümlerinde kullanılandan farklı bir sınıf yükleyici hiyerarşisi kullanılarak uygulanır.
Tam ekran intent'ler için izin değişiklikleri
Android 10 veya sonraki sürümleri hedefleyen ve tam ekran intent'ler içeren bildirimler kullanan uygulamaların, uygulamalarının manifest dosyasında USE_FULL_SCREEN_INTENT
iznini istemesi gerekir. Bu bir normal izin olduğundan sistem, istek yapan uygulamaya otomatik olarak izin verir.
Android 10 veya sonraki sürümleri hedefleyen bir uygulama, gerekli izni istemeden tam ekran intent içeren bir bildirim oluşturmaya çalışırsa sistem tam ekran intent'i yoksayıp aşağıdaki günlük mesajını döndürür:
Package your-package-name: Use of fullScreenIntent requires the USE_FULL_SCREEN_INTENT permission
Katlanabilir cihazlar için destek
Android 10'da katlanabilir cihazları ve geniş ekranlı cihazları destekleyen değişiklikler yapılmıştır.
Bir uygulama Android 10'da çalışırken onResume()
ve onPause()
yöntemleri farklı çalışır. Çoklu pencere veya çoklu ekran modunda aynı anda birden fazla uygulama göründüğünde, görünür yığınlardaki odaklanılabilir en üstteki etkinliklerin tümü devam ettirilmiş durumdadır ancak bunlardan yalnızca biri, "en üstte devam ettirilen" etkinlik, gerçekten odaklanır. Android 10'dan önceki sürümlerde çalışırken sistemde aynı anda yalnızca tek bir etkinlik devam ettirilebilir. Diğer tüm görünür etkinlikler duraklatılır.
"Odak"ı "en üstte devam ettirilen" etkinlikle karıştırmayın. Sistem, kullanıcının en son etkileşimde bulunduğu etkinliklere daha yüksek öncelik vermek için etkinliklere z-sıralı düzene göre öncelik atar. Bir etkinlik üstten devam ettirilebilir ancak odaklandırılmayabilir (örneğin, bildirim gölgesi genişletilmişse).
Android 10 (API düzeyi 29) ve sonraki sürümlerde, etkinliğiniz en üstte devam ettirilen konumu aldığında veya kaybettiğinde bilgilendirilmek için onTopResumedActivityChanged()
geri çağırma işlevine abone olabilirsiniz. Bu durum, Android 10'dan önceki devam ettirilen duruma eşdeğerdir ve uygulamanız diğer uygulamalarla paylaşılması gerekebilecek özel veya tekil kaynaklar kullanıyorsa ipucu olarak yararlı olabilir.
resizeableActivity
manifest özelliğinin davranışı da değişti. Android 10 (API düzeyi 29) veya sonraki sürümlerde bir uygulama resizeableActivity=false
değerini ayarlarsa kullanılabilir ekran boyutu değiştiğinde veya uygulama bir ekrandan diğerine taşındığında uyumluluk moduna geçirilebilir.
Uygulamalar, Android 10'da kullanıma sunulan android:minAspectRatio
özelliğini kullanarak uygulamanızın desteklediği ekran oranlarını belirtebilir.
Android Studio'nun emülatör aracı, 3.5 sürümünden itibaren kodunuzu daha büyük ekranlarda test etmek için 7,3 inç ve 8 inç sanal cihazlar içerir.
Daha fazla bilgi için Uygulamalarınız için katlanabilir cihazlar tasarlama başlıklı makaleyi inceleyin.