Ö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 geçerli olduğu durumlarda uygulamanızı bu davranışları düzgün şekilde destekleyecek şekilde değiştirmeniz gerekir.
Android 11 üzerinde çalışan tüm uygulamaları etkileyen davranış değişikliklerinin listesini de incelemeyi unutmayın.
Gizlilik
Android 11, aşağıdakiler de dahil olmak üzere kullanıcı gizliliğini iyileştirmeye yönelik değişiklikler ve kısıtlamalar sunar:
- 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ç aydır 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ına bakın.
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 değiştirilir?
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 açma/kapatma değişiklikleri hakkında daha fazla bilgi için Uygulamanızdaki platform davranışı değişikliklerini test etme ve hata ayıklama bölümüne bakın.
Yığın işaretçileri artık en önemli baytta (MSB) sıfır olmayan bir etikete sahiptir. MSB'yi değiştirenler de dahil olmak üzere işaretçileri yanlış kullanan uygulamalar artık kilitlenebilir veya başka sorunlarla karşılaşabilir. Bu değişiklik, ARM Bellek Etiketleme Uzantısı'nın (MTE) etkinleştirileceği gelecekteki donanımların desteklenmesi 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 belgelerine bakın.
Bildirimlerde yapılan güncellemeler
Arka plandan gelen ö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 bildirim çubuğu mesajlarını engeller. Metin pop-up'larına hâlâ izin verildiğini unutmayın. Bunlar, setView()
çağrısı yapmayan Toast.makeText()
kullanılarak oluşturulan pop-up'lardır.
Uygulamanız yine de arka plandan özel görünüm içeren bir pop-up 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
Tost geri çağırmaları
Bir pop-up (metin veya özel) göründüğünde ya da kaybolduğunda bildirim almak istiyorsanız Android 11'de eklenen addCallback()
yöntemini kullanın.
Metin pop-up'ı API'sinde yapılan değişiklikler
Android 11 veya sonraki sürümleri hedefleyen uygulamalarda metin bildirimlerinde aşağıdaki yan etkiler görülür:
getView()
yönteminull
değerini döndürür.- Aşağıdaki yöntemlerin döndürdüğü değerler gerçek değerleri yansıtmadığından uygulamanızda bu değerlere güvenmemelisiniz:
- Aşağıdaki yöntemler hiçbir işlem yapmaz. Bu nedenle, uygulamanız bunları kullanmamalıdır:
Bağlantı
APN veritabanına okuma erişimi kısıtlı
Ayrıntıları değiştirme
Ad Değiştir: APN_READING_PERMISSION_CHANGE_ID
Değişiklik kimliği: 124107808
Nasıl değiştirilir?
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 açma/kapatma değişiklikleri hakkında daha fazla bilgi için Uygulamanızdaki platform davranışı değişikliklerini test etme ve hata ayıklama başlıklı makaleyi inceleyin.
Android 11'i hedefleyen uygulamalar artık Telefon sağlayıcı APN veritabanını okumak veya veritabanına erişmek için Manifest.permission.WRITE_APN_SETTINGS
ayrıcalıklı iznine sahip olmalıdır. 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şime geçen 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ı bildirme
Ayrıntıları değiştirme
Ad Değiştir: REQUEST_ACCESSIBILITY_BUTTON_CHANGE
Değişiklik kimliği: 136293963
Nasıl değiştirilir?
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 açma/kapatma değişiklikleri hakkında daha fazla bilgi için Uygulamanızdaki platform davranışı değişikliklerini test etme ve hata 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
eklerseniz çerçeve, erişilebilirlik düğmesi geri çağırma etkinliklerini hizmetinize iletmez.
Erişilebilirlik hizmetinizde erişilebilirlik geri çağırma etkinlikleri almak için erişilebilirlik hizmetinizin meta veri dosyasını kullanarak hizmetinizin erişilebilirlik düğmesiyle ilişkisini beyan edin. accessibilityFlags
özelliğinin tanımınıza flagRequestAccessibilityButton
değerini ekleyin. Erişilebilirlik hizmeti meta veri dosyası, res/raw/accessibilityservice.xml
adresinde en çok kullanılan konumdur.
Kamera
Medya intent işlemleri için sistem 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:
android.media.action.VIDEO_CAPTURE
android.media.action.IMAGE_CAPTURE
android.media.action.IMAGE_CAPTURE_SECURE
Önceden yüklenmiş birden fazla sistem kamera uygulaması varsa sistem, kullanıcının 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ı kullanmasını istiyorsanız intent için bir paket adı veya bileşen ayarlayarak bu intent'leri 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 değiştirilir?
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 açma/kapatma değişiklikleri hakkında daha fazla bilgi için Uygulamanızdaki platform davranışı değişikliklerini test etme ve hata ayıklama bölümüne bakın.
Android 11 (API düzeyi 30) veya sonraki sürümleri hedefleyen uygulamalar, sıkıştırılmış bir resources.arsc
dosyası içeriyorsa ya da bu dosya 4 baytlık bir sınıra hizalanmamışsa yüklenemez. Bu koşullardan herhangi biri mevcut olduğunda bu dosya sistem tarafından bellek eşlenemez. Bellek haritası oluşturulamayan kaynak tabloları RAM'deki bir arabelleğe okunmalıdır. Bu da sistemde gereksiz bellek baskısına ve cihazda RAM kullanımının büyük oranda artmasına neden olur.
Daha önce sıkıştırılmış bir resources.arsc
dosyası kullandıysanız bunun yerine uygulama kaynaklarını küçültmek veya uygulamanızı küçültmek, gizlemek ve optimize etmek için diğer yöntemler gibi alternatif stratejiler deneyin.
APK İmza Şeması v2 artık zorunlu
Şu anda yalnızca APK İmza Şeması v1 kullanılarak imzalanmış olan Android 11'i (API düzeyi 30) hedefleyen uygulamalar da artık APK İmza Şeması v2 veya daha yeni bir sürüm kullanılarak imzalanmalıdır. Kullanıcılar, Android 11 çalıştıran cihazlarda yalnızca APK İmza Şeması v1 ile imzalanmış uygulamaları yükleyemez veya güncelleyemez.
Uygulamanızın APK İmza Şeması v2 veya sonraki bir sürümüyle 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 Android 6.0 (API düzeyi 23) veya sonraki sürümleri çalıştıran cihazlarda Firebase JobDispatcher ve GcmNetworkManager API çağrıları 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 konularına bakın.
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şime geçen 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 arama 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 değiştirilir?
Uygulamanızın Android 11 ile uyumluluğunu test ederken aşağıdaki ADB komutlarını kullanarak bu değişikliği açıp kapatabilirsiniz:
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 açma/kapatma değişiklikleri hakkında daha fazla bilgi için Uygulamanızdaki platform davranışı değişikliklerini test etme ve hata ayıklama başlıklı makaleyi inceleyin.
Android 11'i (API düzeyi 30) hedefleyen uygulamalar için Editor.clear
her çağrıldığında artık bir null
anahtarıyla OnSharedPreferenceChangeListener.onSharedPreferenceChanged
için geri çağırma yapılır.
SDK dışı arayüz kısıtlamaları
Android 11, Android geliştiricileriyle yapılan ortak çalışmaya ve en son dahili testlere dayanarak 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ılabildiğinden 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ışı herhangi bir yöntem veya alanı kullanmak her zaman uygulamanızın bozulma riskini artırır.
Uygulamanızda SDK dışı arayüzlerin kullanılıp kullanılmadığını öğrenmek için uygulamanızı test edebilirsiniz. Uygulamanız SDK dışı arayüzleri kullanı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.
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.