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 uygun durumlarda bu davranışları doğru şekilde destekleyecek şekilde uygulamanızı değiştirmeniz gerekir.

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

Gizlilik

Android 11, kullanıcı gizliliğini iyileştirmek için aşağıdakiler de dahil olmak üzere değişiklikler ve kısıtlamalar getirir:

  • Kapsamlı depolama alanı yaptırımı: Harici depolama alanı dizinlerine erişim, uygulamaya özel bir dizin ve uygulamanın oluşturduğu belirli medya türleriyle sınırlıdır.
  • İzinleri otomatik sıfırlama: Kullanıcılar birkaç ay boyunca bir uygulamayla etkileşimde bulunmazsa sistem, uygulamanın hassas izinlerini otomatik olarak sıfırlar.
  • Arka planda konum erişimi: Uygulamalara arka planda konum izni vermek için kullanıcıların sistem ayarlarına yönlendirilmesi gerekir.
  • 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ştir

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 değişiklikleri açma/kapatma 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 önemli 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 Etiketli İşaretçiler bölümüne bakın.

Bu özelliği devre dışı bırakmak için allowNativeHeapPointerTagging manifest dokümanlarına bakın.

Toast bildirimlerinde yapılan güncellemeler

Arka plandan gelen özel pop-up mesajlar 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 toast mesajlarını engeller. Metin bildirimlerine izin verilmeye devam edilir. Bunlar, setView() yöntemini çağırmayan Toast.makeText() kullanılarak oluşturulan bildirimlerdir.

Uygulamanız arka plandan ö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'e aşağıdaki mesajı kaydeder:

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

Kısa ileti geri çağırmaları

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

Metin tabanlı kısa süreli bildirim API'sindeki değişiklikler

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

Bağlantı

APN veritabanına okuma erişimi kısıtlandı

Ayrıntıları değiştir

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 değişiklikleri açma/kapatma 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, Telefoni sağlayıcı APN veritabanını okumak veya bu veritabanına erişmek için artık Manifest.permission.WRITE_APN_SETTINGS ayrıcalıklı iznine sahip olması gerekir. 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ştir

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 değişiklikleri açma/kapatma 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şkilendirildiğine dair çalışma zamanı beyanında bulunamaz. Bir AccessibilityServiceInfo nesnesinin flags özelliğine AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON eklerseniz çerçeve, erişilebilirlik düğmesi geri çağırma etkinliklerini hizmetinize iletmez.

Erişilebilirlik hizmetinizde erişilebilirlik geri çağırma etkinliklerini almak için erişilebilirlik hizmeti meta veri dosyanızı kullanarak hizmetinizin erişilebilirlik düğmesiyle ilişkisini beyan edin. accessibilityFlags özelliğinin tanımına flagRequestAccessibilityButton değerini ekleyin. Erişilebilirlik hizmeti meta veri dosyası genellikle res/raw/accessibilityservice.xml konumunda bulunur.

Kamera

Medya intent işlemleri için sistemin varsayılan kamerası gerekir

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

Önceden yüklenmiş birden fazla 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 intent için bir paket adı veya bileşen ayarlayarak bu intent'leri açık hale getirebilirsiniz.

Uygulama paketleme ve yükleme

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

Ayrıntıları değiştir

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 değişiklikleri açma/kapatma 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 (API düzeyi 30) veya sonraki sürümleri hedefleyen uygulamalar, sıkıştırılmış bir resources.arsc dosyası içeriyorsa veya bu dosya 4 baytlık bir sınırda hizalanmamışsa yüklenemez. Bu koşullardan biri mevcutsa bu dosya sistem tarafından belleğe eşlenemez. Bellek eşlemesi yapılamayan kaynak tabloları, RAM'deki bir arabelleğe okunmalıdır. 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 stratejileri veya uygulamanızı küçültme, karartma ve optimize etme ile ilgili diğer yöntemleri deneyin.

APK İmza Şeması v2 artık zorunlu

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

Uygulamanızın APK İmza Şeması v2 veya sonraki sürümlerle 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 hedef API düzeyi 30 veya sonraki sürümleri hedefliyorsa Firebase JobDispatcher ve GcmNetworkManager API çağrıları, Android 6.0 (API düzeyi 23) veya sonraki sürümleri çalıştıran cihazlarda devre dışı bırakılır. Taşıma hakkında bilgi için Firebase JobDispatcher'dan WorkManager'a geçiş ve GCMNetworkManager'dan WorkManager'a geçiş 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 bir 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ştir

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 değişiklikleri açma/kapatma 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 için bir geri çağırma yapılır.

SDK olmayan arayüz kısıtlamaları

Android 11, Android geliştiricileriyle yapılan ortak çalışmalar ve en son dahili testlere dayalı olarak güncellenmiş kısıtlanmış SDK dışı arayüz listeleri içerir. SDK olmayan arayüzleri kısıtlamadan önce mümkün olduğunca herkese açık alternatiflerin mevcut olduğundan emin oluruz.

Uygulamanız Android 11'i hedeflemiyorsa 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ışı bir yöntem veya alan kullanmak her zaman uygulamanızın bozulmasıyla ilgili yüksek risk taşır.

Uygulamanızın SDK dışı arayüzler kullanıp kullanmadığından emin değilseniz uygulamanızı test ederek öğrenebilirsiniz. Uygulamanız SDK olmayan 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 biliyoruz. Uygulamanızdaki bir özellik için SDK olmayan arayüz kullanmaya alternatif bulamıyorsanız yeni bir herkese açık API isteğinde bulunmanız gerekir.

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