Davranış değişiklikleri: Android 11'i hedefleyen uygulamalar

Önceki sürümlerde olduğu gibi Android 11 de uygulamanızı etkileyebilecek davranış değişiklikleri içerir. Aşağıdaki davranış değişiklikleri yalnızca Android 11 veya sonraki sürümleri hedefleyen uygulamalar için geçerlidir. Uygulamanız targetSdkVersion değerini 30 olarak ayarlıyorsa uygulamanızı, geçerli olduğu durumlarda bu davranışları düzgün şekilde destekleyecek şekilde değiştirmeniz gerekir.

Android 11'de çalışan tüm uygulamaları etkileyen davranış değişiklikleri listesini de incelediğinizden emin olun.

Gizlilik

Android 11, kullanıcı gizliliğini artırmak için aşağıdaki değişiklikleri ve kısıtlamaları sunar:

  • Kapsamlı depolama zorunluluğu: Harici depolama dizinlerine erişim, uygulamaya özel bir dizin ve uygulamanın oluşturduğu belirli medya türleriyle sınırlıdır.
  • İzinlerin otomatik olarak sıfırlanması: Kullanıcılar birkaç aydır bir uygulamayla etkileşimde bulunmadıysa sistem, uygulamanın hassas izinlerini otomatik olarak sıfırlar.
  • Arka planda konum erişimi: Kullanıcılar, uygulamalara arka planda konum izni vermek için sistem ayarlarına yönlendirilmelidir.
  • Paket görünürlüğü: Bir uygulama, cihazda yüklü uygulamaların listesini sorguladığında döndürülen liste filtrelenir.

Daha fazla bilgi edinmek için Gizlilik sayfasını inceleyin.

Güvenlik

Yığın işaretçisi etiketleme

Ayrıntıları değiştirme

Adı Değiştir: NATIVE_HEAP_POINTER_TAGGING

Değişiklik kimliği: 135754954

Nasıl açılır/kapatılır?

Uygulamanızın Android 11 ile uyumluluğunu test ederken aşağıdaki ADB komutlarını kullanarak bu değişikliği etkinleştirebilir veya devre dışı bırakabilirsiniz:

adb shell am compat enable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAME
adb shell am compat disable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAME

Uyumluluk çerçevesi ve geçiş değişiklikleri hakkında daha fazla bilgi için Uygulamanızdaki platform davranış değişikliklerini test etme ve hatalarını ayıklama başlıklı makaleyi inceleyin.

Yığın işaretçileri artık en anlamlı baytta (MSB) sıfır olmayan bir etikete sahip. MSB'yi değiştirenler de dahil olmak üzere işaretçileri yanlış kullanan uygulamalar artık kilitlenebilir veya başka sorunlar yaşayabilir. Bu değişiklik, ARM Bellek Etiketleme Uzantısı (MTE) etkinleştirilmiş gelecekteki donanımları desteklemek için gereklidir. Daha fazla bilgi için Etiketlenmiş İşaretçiler bölümüne bakın.

Bu özelliği devre dışı bırakmak için allowNativeHeapPointerTagging manifest belgelerine bakın.

Bildirim mesajlarında yapılan güncellemeler

Arka plandaki özel bildirimler engellenir.

Güvenlik nedeniyle ve iyi bir kullanıcı deneyimi sağlamak için sistem, Android 11 veya sonraki sürümleri hedefleyen bir uygulama tarafından arka plandan gönderilen özel görünümler içeren kısa mesajları engeller. Metin bildirimlerine izin verilmeye devam edildiğini unutmayın. Bunlar, setView() işlevini çağırmayan Toast.makeText() kullanılarak oluşturulan bildirimlerdir.

Uygulamanız yine de arka planda özel görünüm içeren bir kısa mesaj yayınlamaya çalışırsa sistem, mesajı kullanıcıya göstermez. Bunun yerine sistem, logcat'te aşağıdaki mesajı günlüğe kaydeder:

W/NotificationService: Blocking custom toast from package \
  <package> due to package not in the foreground

Toast geri çağırmaları

Bir kısa mesaj (metin veya özel) göründüğünde ya da kaybolduğunda bildirim almak istiyorsanız Android 11'de eklenen addCallback() yöntemini kullanın.

Text toast API değişiklikleri

Android 11 veya sonraki sürümleri hedefleyen uygulamalarda metin toast'ları için aşağıdaki yan etkiler görülür:

Bağlantı

APN veritabanına sınırlı okuma erişimi

Ayrıntıları değiştirme

Adı Değiştir: APN_READING_PERMISSION_CHANGE_ID

Değişiklik kimliği: 124107808

Nasıl açılır/kapatılır?

Uygulamanızın Android 11 ile uyumluluğunu test ederken aşağıdaki ADB komutlarını kullanarak bu değişikliği etkinleştirebilir veya devre dışı bırakabilirsiniz:

adb shell am compat enable (124107808|APN_READING_PERMISSION_CHANGE_ID) PACKAGE_NAME
adb shell am compat disable (124107808|APN_READING_PERMISSION_CHANGE_ID) PACKAGE_NAME

Uyumluluk çerçevesi ve geçiş değişiklikleri hakkında daha fazla bilgi için Uygulamanızdaki platform davranış değişikliklerini test etme ve hatalarını ayıklama başlıklı makaleyi inceleyin.

Android 11'i hedefleyen uygulamaların artık Manifest.permission.WRITE_APN_SETTINGS ayrıcalıklı izniyle Telephony sağlayıcı APN veritabanını okuması veya bu veritabanına erişmesi gerekiyor. Bu izin olmadan APN veritabanına erişmeye çalışmak güvenlik istisnası oluşturur.

Erişilebilirlik

Manifest dosyasında TTS motorlarıyla etkileşimi beyan etme

Paket görünürlüğünde yapılan değişiklikler nedeniyle Android 11'i hedefleyen ve metin okuma (TTS) motoruyla etkileşimde bulunan uygulamaların manifest dosyalarına aşağıdaki <queries> öğesini eklemesi gerekir:

<queries>
  <intent>
    <action
       android:name="android.intent.action.TTS_SERVICE" />
  </intent>
</queries>

Meta veri dosyasında erişilebilirlik düğmesi kullanımını beyan etme

Ayrıntıları değiştirme

Adı Değiştir: REQUEST_ACCESSIBILITY_BUTTON_CHANGE

Değişiklik kimliği: 136293963

Nasıl açılır/kapatılır?

Uygulamanızın Android 11 ile uyumluluğunu test ederken aşağıdaki ADB komutlarını kullanarak bu değişikliği etkinleştirebilir veya devre dışı bırakabilirsiniz:

adb shell am compat enable (136293963|REQUEST_ACCESSIBILITY_BUTTON_CHANGE) PACKAGE_NAME
adb shell am compat disable (136293963|REQUEST_ACCESSIBILITY_BUTTON_CHANGE) PACKAGE_NAME

Uyumluluk çerçevesi ve geçiş değişiklikleri hakkında daha fazla bilgi için Uygulamanızdaki platform davranış değişikliklerini test etme ve hatalarını ayıklama başlıklı makaleyi inceleyin.

Android 11'den itibaren erişilebilirlik hizmetiniz, sistemin erişilebilirlik düğmesiyle ilişkili olduğunu belirten bir çalışma zamanı beyanı yapamaz. Bir AccessibilityServiceInfo nesnesinin flags özelliğine AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON ekleme yaparsanız çerçeve, erişilebilirlik düğmesi geri çağırma etkinliklerini hizmetinize iletmez.

Erişilebilirlik hizmetinizde erişilebilirlik geri çağırma etkinliklerini almak için hizmetinizin erişilebilirlik düğmesiyle ilişkisini bildirmek üzere erişilebilirlik hizmeti meta veri dosyanızı kullanın. flagRequestAccessibilityButton değerini accessibilityFlags özelliğinin tanımına ekleyin. Erişilebilirlik hizmeti meta veri dosyası için yaygın bir konum res/raw/accessibilityservice.xml'dır.

Kamera

Medya amaçlı işlemler için sistemin varsayılan kamerası gerekir

Android 11'den itibaren yalnızca önceden yüklenmiş sistem kamera uygulamaları aşağıdaki amaç işlemlerine yanıt verebilir:

Birden fazla önceden yüklenmiş sistem kamera uygulaması varsa sistem, kullanıcının bir uygulama seçmesi için bir iletişim kutusu gösterir. Uygulamanızın, kendi adına resim veya video çekmek için belirli bir üçüncü taraf kamera uygulamasını kullanmasını istiyorsanız niyet için bir paket adı veya bileşen ayarlayarak bu niyetleri açıkça belirtebilirsiniz.

Uygulama paketleme ve yükleme

Sıkıştırılmış kaynak dosyaları

Ayrıntıları değiştirme

Adı Değiştir: RESOURCES_ARSC_COMPRESSED

Değişiklik kimliği: 132742131

Nasıl açılır/kapatılır?

Uygulamanızın Android 11 ile uyumluluğunu test ederken aşağıdaki ADB komutlarını kullanarak bu değişikliği etkinleştirebilir veya devre dışı bırakabilirsiniz:

adb shell am compat enable (132742131|RESOURCES_ARSC_COMPRESSED) PACKAGE_NAME
adb shell am compat disable (132742131|RESOURCES_ARSC_COMPRESSED) PACKAGE_NAME

Uyumluluk çerçevesi ve geçiş değişiklikleri hakkında daha fazla bilgi için Uygulamanızdaki platform davranış değişikliklerini test etme ve hatalarını ayıklama başlıklı makaleyi inceleyin.

Android 11'i (API düzeyi 30) veya sonraki sürümleri hedefleyen uygulamalar, sıkıştırılmış resources.arsc dosyası içeriyorsa ya da bu dosya 4 baytlık bir sınıra göre hizalanmamışsa yüklenemez. Bu koşullardan biri geçerliyse bu dosya sistem tarafından belleğe eşlenemez. Belleğe eşlenemeyen kaynak tabloların RAM'deki bir arabelleğe okunması gerekir. Bu durum, sistemde gereksiz bellek baskısına ve cihazda RAM kullanımının büyük ölçüde artmasına neden olur.

Daha önce sıkıştırılmış bir resources.arsc dosyası kullanıyorsanız bunun yerine uygulama kaynaklarını küçültme gibi alternatif stratejiler veya uygulamanızı küçültmek, karartmak ve optimize etmek için diğer yöntemleri deneyin.

APK İmza Şeması v2 artık zorunlu

Şu anda yalnızca APK İmza Şeması v1 kullanılarak imzalanan ve Android 11'i (API düzeyi 30) hedefleyen uygulamalar artık APK İmza Şeması v2 veya daha yüksek bir sürüm kullanılarak da imzalanmalıdır. Kullanıcılar, Android 11 çalıştıran cihazlara yalnızca APK İmza Şeması v1 ile imzalanmış uygulamaları yükleyemez veya güncelleyemez.

Uygulamanızın APK İmza Şeması v2 veya daha yeni bir sürümle imzalandığını doğrulamak için Android Studio'yu ya da komut satırındaki apksigner aracını kullanabilirsiniz.

Firebase

Firebase JobDispatcher ve GCMNetworkManager

Uygulamanız API düzeyi 30 veya sonraki sürümleri hedefliyorsa FirebaseJobDispatcher ve GcmNetworkManager API çağrıları, Android 6.0 (API düzeyi 23) veya sonraki sürümlerin yüklü olduğu cihazlarda devre dışı bırakılır. Taşıma bilgileri için Firebase JobDispatcher'dan WorkManager'a taşıma ve GCMNetworkManager'dan WorkManager'a taşıma başlıklı makaleleri inceleyin.

Konuşma tanıma

Paket görünürlüğünde yapılan değişiklikler nedeniyle Android 11'i hedefleyen ve konuşma tanıma hizmetiyle etkileşimde bulunan uygulamaların, manifest dosyalarına aşağıdaki <queries> öğesini eklemesi gerekir:

<queries>
  <intent>
    <action
       android:name="android.speech.RecognitionService" />
  </intent>
</queries>

OnSharedPreferenceChangeListener için geri çağırma değişiklikleri

Ayrıntıları değiştirme

Adı Değiştir: CALLBACK_ON_CLEAR_CHANGE

Değişiklik kimliği: 119147584

Nasıl açılır/kapatılır?

Uygulamanızın Android 11 ile uyumluluğunu test ederken aşağıdaki ADB komutlarını kullanarak bu değişikliği etkinleştirebilir veya devre dışı bırakabilirsiniz:

adb shell am compat enable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAME
adb shell am compat disable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAME

Uyumluluk çerçevesi ve geçiş değişiklikleri hakkında daha fazla bilgi için Uygulamanızdaki platform davranış değişikliklerini test etme ve hatalarını ayıklama başlıklı makaleyi inceleyin.

Android 11'i (API düzeyi 30) hedefleyen uygulamalarda, Editor.clear her çağrıldığında artık null anahtarıyla OnSharedPreferenceChangeListener.onSharedPreferenceChanged geri çağrısı yapılır.

SDK olmayan arayüz kısıtlamaları

Android 11, Android geliştiricilerle işbirliği ve en son dahili testlere dayalı olarak kısıtlanmış SDK dışı arayüzlerin güncellenmiş listelerini içerir. Mümkün olduğunda, SDK olmayan arayüzleri kısıtlamadan önce herkese açık alternatiflerin kullanılabilir olmasını sağlarız.

Uygulamanız Android 11'i hedeflemiyorsa bu değişikliklerin bazıları sizi hemen etkilemeyebilir. Ancak şu anda bazı SDK dışı arayüzleri (uygulamanızın hedef API düzeyine bağlı olarak) kullanabilseniz de herhangi bir SDK dışı yöntemi veya alanı kullanmak uygulamanızın bozulma riskini her zaman yüksek oranda artırır.

Uygulamanızda SDK dışı arayüzler kullanılıp kullanılmadığından emin değilseniz öğrenmek için uygulamanızı test edebilirsiniz. Uygulamanız SDK dışı arayüzleri kullanıyorsa SDK alternatiflerine geçişi planlamaya başlamanız gerekir. Bununla birlikte, bazı uygulamaların SDK dışı arayüzleri kullanmak için geçerli kullanım alanları olduğunu anlıyoruz. Uygulamanızdaki bir özellik için SDK dışı arayüz kullanmaya alternatif bulamıyorsanız yeni bir herkese açık API isteğinde bulunmalısınız.

Android'in bu sürümündeki değişiklikler hakkında daha fazla bilgi edinmek için Android 11'de SDK dışı arayüz kısıtlamalarında yapılan güncellemeler başlıklı makaleyi inceleyin. Genel olarak SDK olmayan arayüzler hakkında daha fazla bilgi edinmek için SDK olmayan arayüzlerde kısıtlamalar başlıklı makaleyi inceleyin.