Davranış değişiklikleri: tüm uygulamalar

Android 11 platformu, uygulamanızı etkileyebilecek davranış değişiklikleri içerir. Aşağıdaki davranış değişiklikleri, targetSdkVersion değerinden bağımsız olarak Android 11'de çalışan 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, kullanıcı gizliliğini iyileştirmek için aşağıdakiler de dahil olmak üzere değişiklikler ve kısıtlamalar getirir:

  • Tek seferlik izinler: Kullanıcılara konum, mikrofon ve kamera izinlerine daha geçici erişim 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ş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, sıfırlanamayan ICCID'lere getIccId() yöntemiyle erişim kısıtlanmıştır. Yöntem, boş olmayan bir dize döndürür. Cihazda takılı bir SIM'i benzersiz şekilde tanımlamak için getSubscriptionId() 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ş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 sabit kalır.

Daha fazla bilgi edinmek 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 konum ayarını açmaya gerek kalmadan Temas Bildirimleri uygulamalarını çalıştırabilir. Bu, yalnızca Temas Bildirimleri Sistemi için geçerli bir istisnadır. Bu sistem, kullanan uygulamaların Bluetooth taraması yoluyla cihazın konumunu öğrenemeyeceği şekilde tasarlanmıştır.

Kullanıcı gizliliğini korumak için, cihaz konum 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 bilgiyi Temas Bildirimleri ile ilgili güncelleme yayınımızda bulabilirsiniz.

Güvenlik

SSL soketleri varsayılan olarak Conscrypt SSL motorunu kullanır

Android'in varsayılan SSLSocket uygulaması Conscrypt'i temel alır. Android 11'den beri bu uygulama, dahili olarak Conscrypt'in SSLEngine sınıfı üzerine inşa edilmiştir.

Scudo Hardened Allocator

Android 11, yığın ayırmaları için dahili olarak Scudo Hardened Allocator'ı kullanır. Scudo, bazı bellek güvenliği ihlali türlerini tespit edip azaltabilir. Yerel kilitlenme raporlarında Scudo ile ilgili kilitlenmeler (ör. Scudo ERROR:) görüyorsanız Scudo sorun giderme belgelerini inceleyin.

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, isUserUnlocked() true değerini döndürmediği sürece ne sistem ne de uygulamalar bu verilere erişebilir. Bu değer, 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ı cihazının kilidini açtıktan sonra bu nesnede yöntemleri çağırdığınızdan emin olun. Aksi takdirde API artık boş değerler döndürür.

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. Özellikleri eklerken test etmek için Android SDK emülatörünün yeni özelliklerini kullanabilirsiniz. Yeni işlev, Emulator'ın 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 kullanım ücretli ayarını yapmanıza olanak tanınır.

Performans ve hata ayıklama

JobScheduler API çağrısı sınırlarında hata ayıklama

Android 11, uygulamaların belirli sıklık sınırlarını aşan olası JobScheduler API çağrılarını tanımlaması için hata ayıklama desteği sunar. Geliştiriciler bu özelliği kullanarak olası performans sorunlarını tespit edebilir. debuggable manifest özelliğinin doğru değerine ayarlandığı uygulamalarda, sıklık sınırlarını aşan JobScheduler API çağrıları RESULT_FAILURE değerini döndürür. Sınırlar, meşru kullanım alanları etkilenmeyecek ş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ı sahipliğinin yanlış kullanımını (ör. kapattıktan sonra kullanma ve iki kez kapatma) tespit eder. fdsan için varsayılan mod Android 11'de değişiyor. fdsan artık bir hata algılandığında iptal ediliyor. Önceki davranış, uyarıyı günlüğe kaydedip devam etmekti. Uygulamanızda fdsan nedeniyle kilitlenmeler görüyorsanız fdsan documentation sayfasını inceleyin.

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.

Haritalar v1 paylaşılan kitaplığı kaldırıldı

Haritalar paylaşılan kitaplığının 1. sürümü, Android 11'den tamamen kaldırıldı. Bu kitaplık daha önce kullanımdan kaldırılmış ve Android 10'daki uygulamalar için çalışmayı durdurmuştu. Android 9 (API düzeyi 28) veya daha eski sürümleri çalıştıran cihazlar için 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 bir içerik URI'sini başka bir uygulamayla 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'si ile ilişkili içerik sağlayıcının sahibiyse 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 yol ile yükleniyor

API 28 ve altını hedefleyen uygulamalar, "/system/lib/libicuuc.so" mutlak yoluyla libicuuc yüklemek için dlopen(3) kullanamaz. Bu uygulamalar için dlopen("/system/lib/libicuuc.so", ...) boş bir tutma yeri döndürür.

Bunun yerine, kitaplığı yüklemek için lütfen dosya adı olarak kitaplık adını kullanın (ör. dlopen("libicuuc.so", ...)).