Davranış değişiklikleri: API 29 ve 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 ayarlıyorsa uygun durumlarda uygulamanızı bu davranışları doğru şekilde destekleyecek şekilde değiştirmeniz gerekir.

Android 10 üzerinde çalışan tüm uygulamaları etkileyen davranış değişikliklerinin 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 sunar:

  • Kapsamlı depolama
  • USB cihazın 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 sonraki sürümleri hedefleyen uygulamaları etkileyen bu değişiklikler kullanıcı gizliliğini artırır. Bu değişiklikleri nasıl destekleyeceğinizi öğrenmek için Gizlilikle ilgili değişiklikler sayfasına göz atın.

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

Platform, uygulama kararlılığını ve uyumluluğunu sağlamaya yardımcı olmak 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 sunulmasını sağlamaktı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 öğrenmek için uygulamanızı test edebilirsiniz. Uygulamanız SDK olmayan arayüzleri kullanıyorsa SDK alternatiflerine geçiş planlamaya başlamanız gerekir. Bununla birlikte, bazı uygulamaların SDK dışı arayüzler için geçerli kullanım alanları olduğunun farkındayız. 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 anı

Ashmem, /proc/<pid>/maps içindeki dalvik haritalarının biçimini değiştirerek doğrudan harita dosyasını 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 doğrudan ashmem (/dev/ashmem) kullanamaz. Bunun yerine, NDK'nın ASharedMemory sınıfı üzerinden paylaşılan belleğe erişmesi gerekir. Ayrıca, uygulamalar mevcut ashmem dosyası tanımlayıcılarına doğrudan IOCTL'ler oluşturamaz 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 dayanıklılığı 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 W^X ihlalidir. Uygulamalar yalnızca bir uygulamanın APK dosyasına yerleştirilmiş ikili program kodunu yüklemelidir.

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

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

ART'ta AOT doğruluğunu zorunlu kılma

Geçmişte, Android Çalışma Zamanı (ART) tarafından gerçekleştirilen önceden derleme (AOT) derleme, derleme zamanı ve çalışma zamanında sınıf yolu ortamı aynı değilse ç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 davranışta aşağıdaki değişikliklere 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ı uygulamasını bilmemesidir.
  • İ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ütme işleminden önce istenmeyen gecikmeye yol açmasıdır. Uygulamalar için bölmelerin kullanılmasının ve ikincil dex dosyalarından uzaklaşmanın önerildiğini unutmayın.
  • Android'deki paylaşılan kitaplıklar (Android manifestindeki <library> ve <uses-library> girişleri), platformun önceki sürümlerinde kullanılandan farklı 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 normal bir izin olduğundan 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ı çıkarır:

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

Katlanabilir cihaz desteği

Android 10'da katlanabilir cihazları ve büyük ekranlı cihazları destekleyen değişiklikler var.

Bir uygulama Android 10'da çalıştığında onResume() ve onPause() yöntemleri farklı şekilde çalışır. Birden fazla uygulama aynı anda çoklu pencere veya çoklu ekran modunda göründüğünde, görünür gruplardaki en iyi performans gösteren tüm etkinlikler devam ettirilmiş durumda olur ancak aslında odak sadece bunlardan biri olan "en çok devam ettirilen" etkinliktir. 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 z sırasına göre etkinliklere öncelikler 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 üst devam ettirilen konumu edindiğinde veya kaybettiğinde bildirim almak için onTopResumedActivityChanged() geri çağırmasına abone olabilirsiniz. Bu, 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. Bir uygulama, Android 10 (API düzeyi 29) veya sonraki sürümlerde resizeableActivity=false özelliğini ayarlarsa kullanılabilir ekran boyutu değiştiğinde ya da uygulama bir ekrandan diğerine geçtiğinde uygulama 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.

3.5 sürümünden 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.