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

Android 10, uygulamanızı etkileyebilecek güncellenmiş sistem davranışı değişikliklerini 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 uygun durumlarda uygulamanızı bu davranışları destekleyecek şekilde değiştirmeniz gerekir.

Android 10 üzerinde çalışan tüm uygulamaları etkileyen davranış değişiklikleri listesini de incelemeyi unutmayın.

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 uygular:

  • Kapsamlı depolama alanı
  • USB cihazı seri numarasına erişim
  • Kablosuz bağlantıyı etkinleştirme, devre dışı bırakma ve yapılandırma özelliği
  • 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 iyileştirmektedir. Bu değişiklikleri nasıl destekleyeceğiniz hakkında daha fazla bilgi edinmek için Gizlilikle ilgili değişiklikler sayfasına bakın.

SDK dışı arayüz kısıtlamalarıyla ilgili güncellemeler

Uygulama kararlılığını ve uyumluluğu sağlamaya yardımcı olmak için platform, 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ştiricileriyle yapılan ortak çalışmalara ve en son dahili testlere göre kısıtlanmış SDK dışı arayüzlerin güncellenmiş listelerini içerir. Amacımız, SDK olmayan arayüzleri kısıtlamadan önce herkese açık alternatiflerin kullanıma sunulmasını sağlamaktır.

Android 10'u (API düzeyi 29) hedeflemeyecekseniz bu değişikliklerden bazıları sizi hemen etkilemeyebilir. Bununla birlikte, şu anda bazı SDK dışı arayüzleri (uygulamanızın hedef API düzeyine bağlı olarak) kullanabilseniz de herhangi bir SDK olmayan yöntem veya alanın kullanılması her zaman uygulamanızın bozulma riskini artırır.

Uygulamanızın SDK olmayan arayüzler kullanıp kullanmadığından emin değilseniz öğrenmek için uygulamanızı test edebilirsiniz. Uygulamanız SDK olmayan arayüzlere dayanıyorsa SDK alternatiflerine geçiş planlamaya başlamanız gerekir. Yine de, bazı uygulamaların SDK dışı arayüz kullanımıyla ilgili geçerli kullanım alanları olduğunun farkındayız. Uygulamanızdaki bir özellik için SDK olmayan arayüz kullanmaya alternatif bulamıyorsanız yeni bir genel API isteğinde bulunmanız gerekir.

Daha fazla bilgi edinmek için Android 10'da SDK olmayan arayüz kısıtlamalarıyla ilgili güncellemeler ve SDK olmayan arayüzlerle ilgili kısıtlamalar bölümlerine bakın.

Paylaşılan anı

Ashmem, /proc/<pid>/maps konumundaki dalvik haritalarının biçimini değiştirerek haritalar 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ırma yapmalıdır.

Android 10'u hedefleyen uygulamalar doğrudan ashmem (/dev/ashmem) kullanamaz ve bunun yerine NDK'nın ASharedMemory sınıfı üzerinden paylaşılan belleğe erişmelidir. Ayrıca, uygulamalar mevcut ashmem dosya tanımlayıcılarına doğrudan IOCTL'ler yapamaz ve paylaşılan bellek bölgeleri oluşturmak için bunun yerine 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 genel olarak Android'in performansını ve güvenliğini artırır.

Uygulama ana dizini için yürütme izni kaldırıldı

Dosyaların yazılabilir uygulama ana dizininden yürütülmesi bir W^X ihlalidir. Uygulamalar yalnızca bir uygulamanın APK dosyasına yerleştirilmiş ikili kodu yüklemelidir.

Android 10'u hedefleyen güvenilmeyen uygulamalar execve() uygulamasını doğrudan uygulamanın ana dizinindeki dosyalarda çağıramaz.

Ayrıca, kitaplık yazılabilir bir dosya açıklayıcı aracılığıyla PROT_EXEC eşlenemediği için Android 10'u hedefleyen uygulamalar bellek içinde dlopen() ile açılmış olan dosyalardaki yürütülebilir kodları değiştiremez ve bu değişikliklerin diske yazılmasını bekleyebilir. Buna, metin konumlarına sahip 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 işleminden dex2oat çağırmıyor. Bu değişiklik, ART'ın yalnızca sistemin oluşturduğu OAT dosyalarını kabul edeceği anlamına gelir.

ART'de AOT doğruluğunun zorunlu kılınması

Geçmişte, Android Çalışma Zamanı (ART) tarafından gerçekleştirilen önceden derleme (AOT) derlemesi, sınıf yolu ortamının derleme zamanında ve çalışma zamanında aynı olmaması halinde çalışma zamanı kilitlenmelerine neden olabiliyordu. Android 10 ve sonraki sürümler her zaman bu ortam bağlamlarının aynı olmasını gerektirir. Bu da aşağıdaki davranış değişikliklerine neden olur:

  • Özel sınıf yükleyiciler (dalvik.system paketindeki sınıf yükleyicilerin aksine, uygulamalar tarafından yazılan sınıf yükleyiciler) AOT tarafından derlenmez. Bunun nedeni, ART'ın çalışma zamanında özelleştirilmiş sınıf aramasının uygulanmasını bilememesidir.
  • İkincil dex dosyaları (yani birincil APK'da olmayan uygulamalar tarafından manuel olarak yüklenen dex dosyaları) arka planda AOT tarafından derlenir. Bunun nedeni, ilk kullanım derlemesinin çok pahalı olabilmesi ve yürütmeden önce istenmeyen gecikmeye yol açabilmesidir. Uygulamalar için bölmeleri kullanmanın ve ikincil dizin dosyalarından uzaklaşmanın önerildiğini unutmayın.
  • Android'deki paylaşılan kitaplıklar (Android manifest'indeki <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 amacına sahip bildirimler kullanan uygulamalar, uygulamalarının manifest dosyasında USE_FULL_SCREEN_INTENT iznini istemelidir. Bu normal bir izin olduğu için sistem, izni istekte bulunan uygulamaya otomatik olarak verir.

Android 10 veya sonraki sürümleri hedefleyen bir uygulama, gerekli izni istemeden tam ekran intent ile bildirim oluşturmaya çalışırsa sistem, tam ekran amacını yok sayar ve aşağıdaki günlük mesajını oluşturur:

Package your-package-name: Use of fullScreenIntent requires the USE_FULL_SCREEN_INTENT permission

Katlanabilir cihazlar için destek

Android 10'da katlanabilir telefonları ve büyük ekranlı cihazları destekleyen değişiklikler yapılmıştır.

Bir uygulama Android 10'da çalıştığında onResume() ve onPause() yöntemleri farklı şekilde ç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 üst etkinliklerin tümü devam ettirilmiş durumda olur ancak aslında bunlardan yalnızca birine, yani "en üstte devam ettirilen" etkinliğe odaklanır. Android 10'dan önceki sürümlerde çalışırken, sistemdeki tek bir etkinlik aynı anda devam ettirilebilir ve diğer tüm görünür etkinlikler duraklatılır.

"Odaklanma" ile "en baştan devam edilen" aktiviteyi karıştırmayın. Sistem, kullanıcının en son etkileşim kurduğu etkinliklere daha yüksek öncelik vermek için etkinliklere z sırasına göre öncelik atar. Bir etkinlik üstten devam ettirilebilir, ancak odağı olmayabilir (örneğin, bildirim gölgesi genişletilmişse).

Android 10 (API düzeyi 29) ve sonraki sürümlerde, etkinliğiniz devam ettirilen en üst konumu elde ettiğinde veya kaybettiğinde bildirim almak için onTopResumedActivityChanged() geri çağırmaya abone olabilirsiniz. Bu, Android 10'dan önceki devam ettirilen duruma eşdeğerdir ve uygulamanızın başka uygulamalarla paylaşılması gerekebilecek özel veya tekil kaynaklar kullanıyorsa ipucu olarak faydalı olabilir.

resizeableActivity manifest özelliğinin davranışı da değişti. Bir uygulama, Android 10 (API düzeyi 29) veya sonraki bir sürümde resizeableActivity=false olarak ayarlandıysa kullanılabilir ekran boyutu değiştiğinde ya da uygulama bir ekrandan diğerine geçtiğinde uyumluluk moduna alınabilir.

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

Sürüm 3.5'ten itibaren Android Studio'nun emülatör aracı, kodunuzu daha büyük ekranlarla test etmeniz için 7.3 inç ve 8 inç sanal cihazlar içerir.

Daha fazla bilgi için Uygulamalarınızı katlanabilir cihazlar için tasarlama konusuna bakın.