Android 11 platformu, uygulamanızı etkileyebilecek davranış değişiklikleri içerir. Aşağıdaki davranış değişiklikleri, targetSdkVersion
bağımsız olarak Android 11'de çalıştırıldığında tüm uygulamalar için geçerlidir. Uygulamanızı test etmeli ve uygun olduğu durumlarda bunları düzgün şekilde desteklemek için gerektiği gibi değiştirmelisiniz.
Yalnızca Android 11'i hedefleyen 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:
- Tek seferlik izinler: Kullanıcılara konum, mikrofon ve kamera izinlerine daha geçici erişim izni verme seçeneği sunar.
- İzin iletişim kutusu görünürlüğü: Bir iznin tekrar tekrar reddedilmesi, "bir daha sorma" anlamına gelir.
- Veri erişimi denetimi: Uygulamanızın hem kendi kodunda hem de bağımlı kitaplıkların kodunda özel verilere nereden eriştiği hakkında bilgi edinin.
- Sistem uyarı penceresi
izinleri: Belirli uygulama sınıflarına, istek üzerine otomatik olarak
SYSTEM_ALERT_WINDOW
izni verilir. Ayrıca,ACTION_MANAGE_OVERLAY_PERMISSION
intent işlemi içeren amaçlar da kullanıcıları her zaman sistem ayarlarındaki bir ekrana yönlendirir. - Kalıcı SIM tanımlayıcıları:
Android 11 ve sonraki sürümlerde,
getIccId()
yöntemiyle sıfırlanamayan ICCID'lere erişim kısıtlanmıştır. Yöntem, boş olmayan bir boş dize döndürür. Cihazda yüklü bir SIM'i benzersiz şekilde tanımlamak için bunun yerinegetSubscriptionId()
yöntemini kullanın. Abonelik Kimliği, fiziksel ve elektronik olanlar da dahil olmak üzere yüklü SIM'leri benzersiz şekilde tanımlamak için bir dizin değeri (1'den başlayarak) sağlar. Bu tanımlayıcının değeri, cihaz fabrika ayarlarına sıfırlanmadığı sürece belirli bir SIM için sabittir.
Daha fazla bilgi edinmek için Gizlilik sayfasını inceleyin.
Temas Bildirimleri
Android 11, platformu Temas Bildirimleri Sistemi'ni dikkate alarak günceller. Kullanıcılar artık cihaz konum ayarını etkinleştirmelerine gerek kalmadan Android 11'de Temas Bildirimleri uygulamalarını çalıştırabilir. Bu, yalnızca Temas Bildirimleri Sistemi için geçerli bir istisnadır. Sistem, Bluetooth taraması aracılığıyla cihaz konumunun çıkarılamayacağı şekilde tasarlanmıştır.
Kullanıcı gizliliğini korumak için cihaz konumu ayarı açık olmadığı ve kullanıcı konum izni vermediği sürece diğer tüm uygulamaların Bluetooth taraması yapması yasaktır. Daha fazla bilgi için Temas Bildirimleri ile ilgili güncelleme başlıklı gönderimizi inceleyebilirsiniz.
Güvenlik
SSL yuvaları varsayılan olarak Conscrypt SSL motorunu kullanır
Android'in varsayılan SSLSocket
uygulaması Conscrypt'e dayanır.
Android 11'den beri bu uygulama, dahili olarak Conscrypt'in SSLEngine
üzerine kuruludur.
Scudo Hardened Allocator
Android 11, yığın ayırmalarına hizmet etmek için dahili olarak Scudo Hardened Allocator'ı kullanır. Scudo, bazı bellek güvenliği ihlallerini tespit edip azaltabilir. Yerel kilitlenme raporlarında Scudo ile ilgili kilitlenmeler (ör. Scudo ERROR:
) görüyorsanız Scudo sorun giderme belgelerine bakın.
Uygulama kullanım istatistikleri
Android 11, kullanıcıları daha iyi korumak için her kullanıcının uygulama kullanım istatistiklerini kimlik bilgisiyle şifrelenmiş depolama alanında saklar. Bu nedenle, aşağıdaki durumlardan biri gerçekleşmedikçe ne sistem ne de uygulamalar bu verilere erişebilir:
isUserUnlocked()
true
döndürülür.
- Kullanıcı, sistem başlatıldıktan sonra cihazının kilidini ilk kez açtığında
- Kullanıcı, cihazda kendi hesabına geçer.
Uygulamanız zaten bir UsageStatsManager
örneğine bağlanıyorsa kullanıcının cihazının kilidini açtıktan sonra bu nesnede yöntemleri çağırdığınızı kontrol edin.
Aksi takdirde, API artık boş değerler veya boş olmayan değerler döndürüyor.
5G için emülatör desteği
Android 11, uygulamalarınızın en yeni özellikleri eklemesini sağlamak için 5G API'leri ekler. Eklediğiniz özellikleri test etmek için Android SDK emülatörünün yeni özelliklerini kullanabilirsiniz. Yeni işlev, Emulator sürüm 30.0.22'ye eklendi. 5G ağı ayarını seçtiğinizde
TelephonyDisplayInfo
,
OVERRIDE_NETWORK_TYPE_NR_NSA
olarak ayarlanır, tahmini bant genişliği değiştirilir ve uygulamanızın NET_CAPABILITY_TEMPORARILY_NOT_METERED
durumundaki değişikliklere uygun şekilde yanıt verdiğini doğrulamak için ölçülülük ayarlamanıza olanak tanınır.
Performans ve hata ayıklama
JobScheduler API çağrısı sınırlarının hata ayıklaması
Android 11, uygulamalarda hata ayıklama desteği sunarak belirli sıklık sınırlarını aşan olası JobScheduler
API çağrılarını belirlemeye yardımcı olur.
Geliştiriciler, olası performans sorunlarını belirlemek için bu özellikten yararlanabilir. debuggable
manifest özelliği doğru olarak ayarlanmış uygulamalarda, hız sınırlarının ötesindeki JobScheduler
API çağrıları RESULT_FAILURE
değerini döndürür.
Sınırlar, meşru kullanım alanlarının etkilenmeyeceği şekilde belirlenir.
Dosya tanımlayıcı temizleyici (fdsan)
Android 10'da fdsan
(dosya tanımlayıcı temizleyici) kullanıma sunuldu.
fdsan
Dosya tanımlayıcısı sahipliğinin yanlış kullanımını (ör. kapatıldıktan sonra kullanma ve iki kez kapatma) algılar. fdsan
için varsayılan mod, Android 11'de değişiyor. fdsan
artık bir hata algıladığında işlemi durduruyor. Önceki davranışta uyarı kaydedilip devam ediliyordu. Uygulamanızda fdsan
nedeniyle kilitlenmeler görüyorsanız fdsan documentation
bölümüne bakın.
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.
Haritalar v1 paylaşılan kitaplığı kaldırıldı
Haritalar paylaşılan kitaplığının 1. sürümü Android 11'de tamamen kaldırıldı. Bu kitaplığın desteği daha önce sonlandırılmıştı ve Android 10'daki uygulamalarda çalışmıyordu. Android 9 (API düzeyi 28) veya önceki sürümleri çalıştıran cihazlarda daha önce bu paylaşılan kitaplığı kullanan uygulamalar bunun yerine Android için Haritalar SDK'sını kullanmalıdır.
Diğer uygulamalarla etkileşim
İçerik URI'lerini paylaşma
Uygulamanız başka bir uygulamayla içerik URI'si paylaşıyorsa Intent, aşağıdaki Intent işaretlerinden en az birini ayarlayarak URI erişim izinleri vermelidir:
FLAG_GRANT_READ_URI_PERMISSION
ve
FLAG_GRANT_WRITE_URI_PERMISSION
.
Bu sayede, diğer uygulama Android 11'i hedefliyorsa içerik URI'sine erişmeye devam edebilir. İçerik URI'si, uygulamanızın sahibi olmadığı bir içerik sağlayıcıyla ilişkili olsa bile uygulamanızda Intent işaretleri bulunmalıdır.
Uygulamanız, içerik URI'siyle ilişkili içerik sağlayıcının sahibi ise içerik sağlayıcının dışa aktarılmadığını doğrulayın. Bu güvenlik en iyi uygulamasını zaten öneriyoruz.
Kitaplık yükleniyor
ICU ortak kitaplığı mutlak yolla yükleniyor
API 28 ve daha eski sürümleri hedefleyen uygulamalar, libicuuc
mutlak yol "/system/lib/libicuuc.so" ile yüklemek için dlopen(3)
kullanamaz. Bu uygulamalar için dlopen("/system/lib/libicuuc.so", ...)
, boş bir işleyici döndürür.
Bunun yerine, kitaplığı yüklemek için lütfen dosya adı olarak kitaplık adını kullanın. Örneğin, dlopen("libicuuc.so", ...)
.