Davranış değişiklikleri: API 29 veya sonraki sürümleri hedefleyen uygulamalar

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 gizliliğe dayalı çok sayıda değişiklik ve kısıtlama sunar:

  • Kısıtlı 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 dışı arayüz kısıtlamalarıyla ilgili 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ştiricileri ile ortak çalışmaya 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şikliklerden bazıları sizi hemen etkilemeyebilir. Ancak şu anda bazı SDK olmayan arayüzleri (uygulamanızın hedef API düzeyine bağlı olarak) kullanabilirsiniz. Ancak SDK olmayan herhangi bir yöntem veya alan kullanmak her zaman uygulamanızın bozulma riski taşı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'da SDK dışı arayüz kısıtlamalarıyla ilgili güncellemeler bölümünü ve SDK olmayan arayüzlerle ilgili kısıtlamalar bölümünü 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ı

Dosyaların yazılabilir uygulama ana dizininden yürütülmesi W^X ihlalidir. 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. Metin yeri değiştirilmiş tüm paylaşılan nesne (.so) dosyaları buna 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 her zaman bu ortam bağlamlarının 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 ile 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 (Android manifest dosyasında <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 intentlerine sahip bildirimler kullanan uygulamalar, uygulamalarının manifest dosyasında USE_FULL_SCREEN_INTENT iznini istemelidir. 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 yoksayar ve 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.

"Odaklanma" ile "en üstte devam ettirilen" aktiviteyi 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 en üstte devam ettirilebilir ancak odakta olmayabilir (örneğin, bildirim gölgesi genişletilirse).

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 ayarını yaparsa kullanılabilir ekran boyutu değiştiğinde veya uygulama bir ekrandan diğerine taşındığında uyumluluk moduna geçirilebilir.

Uygulamalar, uygulamanızın desteklediği ekran oranlarını belirtmek için Android 10'da kullanıma sunulan android:minAspectRatio özelliğini kullanabilir.

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 bölümüne bakın.