Android 11 platformunda, uygulamanızı etkileyebilecek davranış değişiklikleri vardır. Aşağıdaki davranış değişiklikleri, targetSdkVersion
'den bağımsız olarak Android 11'de çalıştırılan tüm uygulamalar için geçerlidir. Uygulamanızı test etmeniz ve geçerli olduğu durumlarda bunları düzgün bir şekilde desteklemek için gerektiği gibi değiştirmeniz gerekir.
Yalnızca Android 11'i hedefleyen uygulamaları etkileyen davranış değişiklikleri listesini de inceleyin.
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:
- Tek seferlik izinler: Kullanıcılara konum, mikrofon ve kamera izinlerine daha fazla geçici erişim izni verme seçeneği sunar.
- İzin iletişim kutusunun görünürlüğü: İzinlerin 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 gizli verilere nerede eriştiği hakkında bilgi edinin.
- Sistem uyarısı 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şlemini içeren intent'ler 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öntemi aracılığıyla sıfırlanamayan ICCID'lere erişim kısıtlanmıştır. Yöntem, null olmayan boş bir dize döndürür. Cihazdaki takılı bir SIM'i benzersiz şekilde tanımlamak için bunun yerinegetSubscriptionId()
yöntemini kullanın. Abonelik kimliği, fiziksel ve elektronik dahil olmak üzere takılı SIM'leri benzersiz şekilde tanımlamak için bir dizin değeri (1'den başlar) sağlar. Cihaz fabrika ayarlarına sıfırlanmadıkça bu tanımlayıcının değeri belirli bir SIM için sabit kalır.
Daha fazla bilgi için Gizlilik sayfasını inceleyin.
Temas Bildirimleri
Android 11, platformu Temas Bildirimleri Sistemi'ni göz önünde bulundurarak günceller. Kullanıcılar artık Android 11'de cihaz konumu ayarını etkinleştirmek zorunda kalmadan Temas Bildirimleri uygulamalarını çalıştırabilir. Bu istisna, yalnızca Temas Bildirimleri Sistemi için geçerlidir. Çünkü bu sistem, onu kullanan uygulamaların Bluetooth taraması üzerinden cihaz konumunu tahmin edemeyeceği şekilde tasarlanmıştır.
Cihaz konumu ayarı açık olmadığı ve kullanıcı bu uygulamalara konum izni vermediği sürece, kullanıcı gizliliğini korumak için 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ı yayınımızı inceleyebilirsiniz.
Güvenlik
SSL soketleri varsayılan olarak Conscrypt SSL motorunu kullanır
Android'in varsayılan SSLSocket
uygulaması Conscrypt'e dayanır.
Android 11'den beri bu uygulama, Conscrypt'in SSLEngine
üzerinde dahili olarak oluşturulmaktadır.
Scudo Sertleştirilmiş Ayırma Aracı
Android 11, yığın tahsislerini işlemek için dahili olarak Scudo Sertleştirilmiş Ayırma Aracı'nı kullanır. Scudo, bazı bellek güvenliği ihlallerini tespit edip azaltabilir. Yerleşik 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 şifrelenmiş kimlik bilgisi depolama alanında saklar. Bu nedenle, isUserUnlocked()
true
döndürmediği sürece sistem veya uygulamalar bu verilere erişemez. true
, aşağıdakilerden biri gerçekleştikten sonra 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 nesnenin yöntemlerini çağırdığınızdan emin olun.
Aksi takdirde API artık null veya boş değerler döndürüyor.
5G için emülatör desteği
Android 11, uygulamalarınızın son teknoloji özellikleri eklemesine olanak tanımak için 5G API'leri ekler. Eklediğiniz özellikleri eklerken test etmek için Android SDK emülatörünün yeni özelliklerini kullanabilirsiniz. Yeni işlev, 30.0.22 sürümüne 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çülmeyi ayarlayabilirsiniz.
Performans ve hata ayıklama
JobScheduler API çağrı sınırlarıyla ilgili hata ayıklama
Android 11, uygulamaların belirli hız sınırlarını aşan olası JobScheduler
API çağrılarını tespit etmesine yönelik hata ayıklama desteği sunar.
Geliştiriciler, olası performans sorunlarını belirlemek için bu tesisi kullanabilir. debuggable
manifest özelliği doğru olarak ayarlanmış uygulamalarda, oran sınırlarını aşan JobScheduler
API çağrıları RESULT_FAILURE
döndürür.
Sınırlar, meşru kullanım alanlarının etkilenmemesi için belirlenir.
Dosya tanımlayıcı temizleyicisi (fdsan)
Android 10'da fdsan
(dosya tanımlayıcı temizleyici) kullanıma sunulmuştur.
fdsan
, dosya tanımlayıcı sahipliğinin yanlış ele alınmasını (ör. kapatıldıktan sonra kullanma ve iki kez kapatma) algılar. Android 11'de fdsan
için varsayılan mod değişiyor. fdsan
artık hata algıladığında işlemi iptal ediyor. Önceki davranış, uyarıyı günlüğe kaydetme ve devam etme şeklindeydi. 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 yapılan ortak çalışmalara ve en son şirket içi 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ı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üzlere dayanı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.
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ış ve Android 10'daki uygulamalarda çalışması durdurulmuştur. Daha önce Android 9 (API düzeyi 28) veya daha eski sürümleri çalıştıran cihazlar için bu paylaşılan kitaplıktan yararlanan 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 hedeflerse içerik URI'sine erişmeye devam edebilir. İçerik URI'si, uygulamanızın sahibi olmadığı bir içerik sağlayıcıyla ilişkilendirilmiş olsa bile uygulamanız intent işaretlerini içermelidir.
İçerik URI'siyle ilişkili içerik sağlayıcının sahibi uygulamanızsa içerik sağlayıcının dışa aktarılmadığını doğrulayın. Bu güvenlikle ilgili en iyi uygulamayı zaten öneriyoruz.
Kitaplık yükleniyor
ICU ortak kitaplığını mutlak yol ile yükleme
API 28 ve altını hedefleyen uygulamalar, "/system/lib/libicuuc.so" mutlak yolu ile libicuuc
yüklemek için dlopen(3)
kullanamaz. Bu uygulamalar için dlopen("/system/lib/libicuuc.so", ...)
, null bir tutamaç döndürür.
Bunun yerine, kitaplığı yüklemek için lütfen kitaplık adını dosya adı olarak kullanın (ör. dlopen("libicuuc.so", ...)
).