Android 6.0 ve sonraki sürümlerde, Android uygulama izinleri modeli, izinleri kullanıcılar için daha anlaşılır, kullanışlı ve güvenli hale getirmek için tasarlanmıştır. Model, tehlikeli izinler gerektiren Android uygulamalarını (bkz. Etkilenen izinler ) bir yükleme zamanı izin modelinden bir çalışma zamanı izin modeline taşıdı:
- Yükleme zamanı izinleri
( Android 5.1 ve önceki sürümler) Kullanıcılar, uygulamayı yüklediklerinde veya güncellediklerinde uygulamaya tehlikeli izinler verir. Cihaz üreticileri ve operatörler, kullanıcıyı bilgilendirmeden önceden verilen izinlere sahip uygulamaları önceden yükleyebilir.
- Çalışma zamanı izinleri
( Android 6.0 – 9 ) Kullanıcılar, uygulama çalışırken uygulamaya tehlikeli izinler verir. İzinlerin ne zaman istendiği (örneğin, uygulamanın ne zaman başlatıldığı veya kullanıcının belirli bir özelliğe ne zaman eriştiği) uygulamaya bağlıdır, ancak kullanıcı belirli izin gruplarına uygulama erişimi verir/reddeder. OEM'ler/taşıyıcılar uygulamaları önceden yükleyebilir, ancak istisna sürecinden geçmedikçe önceden izin veremezler. (Bkz. İstisnalar oluşturma .)
( Android 10 ) Kullanıcılar daha fazla şeffaflık görür ve hangi uygulamaların etkinlik tanıma (AR) çalışma zamanı izinlerine sahip olduğunu kontrol eder. Çalışma zamanı izinleri iletişim kutusu , kullanıcılardan izinleri her zaman izin vermeleri, kullanım sırasında izin vermeleri veya izinleri reddetmeleri istenir. Android 10'a yapılan bir işletim sistemi yükseltmesinde, uygulamalara verilen izinler korunur, ancak kullanıcılar Ayarlar'a gidip bunları değiştirebilir.
Çalışma zamanı izinleri, uygulamaların bir kullanıcının izni olmadan özel verilere erişmesini engeller ve onlara, uygulamaların aradığı veya verilmiş olan izin türlerine ilişkin ek bağlam ve görünürlük sağlar. Çalışma zamanı modeli, geliştiricileri, uygulamaların neden istenen izinleri gerektirdiğini anlamalarına yardımcı olmaya teşvik eder ve kullanıcıların izin verme veya reddetme konusunda daha iyi kararlar alabilmeleri için daha fazla şeffaflık sağlar.
Etkilenen izinler
Android 6.0 ve sonraki sürümleri, bir çalışma zamanı izinleri modelini kullanmak için tehlikeli izinler gerektirir. Tehlikeli izinler, istekte bulunan uygulamalara özel kullanıcı verilerine erişim veya bir cihaz üzerinde kontrol yetkisi veren ve kullanıcıyı olumsuz etkileyebilecek daha yüksek riskli izinlerdir (örneğin
READ_CALENDAR ). Tehlikeli izinlerin bir listesini görüntülemek için şu komutu çalıştırın:
adb shell pm list permissions -g -d
Android 6.0 ve sonraki sürümler, normal izinlerin davranışını değiştirmez. Bunların tümü, normal, sistem ve imza izinleri dahil, tehlikeli olmayan izinlerdir. Normal izinler, istekte bulunan uygulamalara diğer uygulamalar, sistem veya kullanıcı için minimum riskle izole uygulama düzeyindeki özelliklere erişim izni veren daha düşük riskli izinlerdir (örneğin
SET_WALLPAPER ). Android 5.1 ve daha düşük sürümlerde olduğu gibi, sistem istekte bulunan bir uygulamaya yükleme sırasında otomatik olarak normal izinler verir ve kullanıcıdan onay istemez. İzinlerle ilgili ayrıntılar için <permission> öğesi belgelerine bakın.
Android 10'da sert ve yumuşak kısıtlamalar
Bir izin, tehlikeli olmasının yanı sıra, katı kısıtlamalı veya yumuşak kısıtlamalı olabilir. Her iki durumda da, kısıtlı izin de beyaz listeye alınmalıdır. Beyaz listede olmayan sabit kısıtlamalar, beyaz listede olmayan geçici kısıtlamalardan farklı davranır:
- ( Kesin kısıtlamalar ) Uygulamalara, beyaz listeye alınmamış izinler verilemez.
- ( Yumuşak kısıtlamalar ) Beyaz listeye alınmayan uygulamalar, istedikleri özel izne göre davranır. Davranış, istenen izin için genel belgelerde açıklanmıştır.
Bir uygulama yüklerken, yükleyici (Google Play Store gibi), uygulamanın kısıtlanmış izinlerini beyaz listeye almamayı seçebilir. İzinler, platform tarafından kısıtlanır ve yalnızca bir uygulama, platform ilkesi başına özel ölçütleri karşılıyorsa verilebilir. Kesin olarak kısıtlanmış izin türlerine örnek olarak SMS ve Çağrı Günlüğü izinleri verilebilir.
Beyaz liste, yükleme sırasında ve
- Android 9'dan 10'a yükseltme sırasında bir uygulama zaten yüklendi.
- bir izin önceden verilir veya bir uygulama önceden yüklenir.
- İzni beyaz listeye eklemek için önceden tanımlanmış bir rol için bir izin gereklidir.
- yükleyici (Google Play Store gibi) izni beyaz listede olarak işaretler.
Kullanıcılar izinleri manuel olarak beyaz listeye alamaz.
Gereksinimler
Çalışma zamanı izin modeli, önceden yüklenmiş uygulamalar ve kurulum sürecinin bir parçası olarak cihaza teslim edilen uygulamalar dahil tüm uygulamalar için geçerlidir. Uygulama yazılımı gereksinimleri şunları içerir:
- Çalışma zamanı izin modeli, Android 6.0 ve sonraki sürümleri çalıştıran tüm cihazlarda tutarlı olmalıdır. Bu, Android Uyumluluk Test Paketi (CTS) testleri tarafından zorlanır.
- Uygulamalar, kullanıcılardan çalışma zamanında uygulama izinleri vermelerini istemelidir. Ayrıntılar için, bkz. Uygulamaları güncelleme . Cihazın beklenen çalışması için temel olan temel cihaz işlevselliğini sağlayan varsayılan uygulamalara ve işleyicilere sınırlı istisnalar verilebilir. (Örneğin,
ACTION_CALLişlemek için cihazın varsayılan Çevirici uygulaması Telefon izni erişimine sahip olabilir.) Ayrıntılar için, bkz. İstisnalar oluşturma .
- Tehlikeli izinlere sahip önceden yüklenmiş uygulamalar API düzeyi 23'ü hedeflemeli ve çalışma zamanı izin modelini korumalıdır. Diğer bir deyişle, uygulama yüklemesi sırasında kullanıcı arabirimi akışı, PermissionController'ın AOSP uygulamasından sapmamalıdır, kullanıcılar önceden yüklenmiş uygulamaların tehlikeli izinlerini iptal edebilir, vb.
- Başsız uygulamalar, izin istemek veya bir UID'yi gerekli izinlere sahip başka bir uygulamayla paylaşmak için bir etkinlik kullanmalıdır. Ayrıntılar için, bkz. Başsız uygulamalar .
İzin taşıma
Android 5.x'teki uygulamalara verilen izinler, Android 6.0 veya sonraki bir sürüme güncelleme yapıldıktan sonra da verilmeye devam eder, ancak kullanıcılar bu izinleri istedikleri zaman iptal edebilir.
Android 9'dan 10'a güncellemede, tüm katı kısıtlamalı izinler beyaz listeye alınır. Ön plan/arka plan bölme izinlerinin uygulanmasıyla ilgili ayrıntılar için, Arka planda konum iste ile başlayan Android 10 gizlilik değişikliği konusuna bakın.
Entegrasyon
Android 6.0 ve sonraki sürümleri için uygulama çalışma zamanı izinleri modelini entegre ederken, yeni modelle çalışmak için önceden yüklenmiş uygulamaları güncellemeniz gerekir. Ayrıca, temel işlevler için varsayılan işleyiciler/sağlayıcılar olan uygulamalar için istisnalar tanımlayabilir, özel izinler tanımlayabilir ve
PermissionController uygulamasında kullanılan temayı özelleştirebilirsiniz.
Uygulamaları güncelleme
Sistem görüntüsündeki uygulamalar ve önceden yüklenmiş uygulamalar, otomatik olarak önceden verilmiş izinler değildir. Geliştirici yönergelerini kullanarak gerekli uygulama değişikliklerini yapmak için önceden yüklenmiş uygulama geliştiricileriyle (OEM, operatör ve üçüncü taraf) çalışmanızı öneririz. Özellikle, kullanıcılar izinleri iptal ettiğinde çökmeleri ve diğer sorunları önlemek için önceden yüklenmiş uygulamaların değiştirildiğinden emin olmalısınız.
Önceden yüklenmiş uygulamalar
Android 9 ve önceki sürümlerde, tehlikeli izinler kullanan önceden yüklenmiş uygulamalar API düzeyi 23 veya üzerini hedeflemeli ve Android 6.0 ve üzeri AOSP izin modelini korumalıdır. Örneğin, bir uygulama yüklemesi sırasındaki UI akışı,
PermissionController AOSP uygulamasından sapmamalıdır. Kullanıcılar, önceden yüklenmiş uygulamaların tehlikeli izinlerini bile iptal edebilir.
Android 6.0'dan 9'a kadar, yükleme akışı sırasında bazı izinler verilir. Ancak, 10'dan başlayarak, yükleme akışı (
Package Installer uygulaması tarafından gerçekleştirilir), izinlerin verilmesinden (
Permission Controller uygulamasında) ayrı bir işlevdir.
Başsız uygulamalar
Yalnızca etkinlikler izin isteyebilir. Hizmetler doğrudan izin isteyemez.
- Android 5.1 ve önceki sürümlerde, başsız uygulamalar yüklendiğinde veya bir etkinlik kullanılmadan önceden yüklenmişse izin isteyebilir.
- Android 6.0 ve sonraki sürümlerde, başsız uygulamalar izin istemek için aşağıdaki yöntemlerden birini kullanmalıdır:
- İzin istemek için bir etkinlik ekleyin. (Bu tercih edilen yöntemdir.)
- Bir UID'yi gerekli izinlere sahip başka bir uygulamayla paylaşın. Bu yöntemi yalnızca platformun birden çok APK'yi tek bir uygulama olarak işlemesine ihtiyacınız olduğunda kullanın.
Amaç, bağlam dışında görünen izin istekleriyle kullanıcıların kafasını karıştırmamaktır.
PackageInstaller Kullanıcı Arayüzünü Özelleştirme
İsterseniz, PackageInstaller tarafından kullanılan varsayılan cihaz temalarını (
Theme.DeviceDefault.Settings ve
Theme.DeviceDefault.Light.Dialog.NoActionBar ) güncelleyerek İzinler UI temasını özelleştirebilirsiniz. Ancak, uygulama geliştiricileri için tutarlılık kritik önem taşıdığından, İzinler Kullanıcı Arayüzü'nün ne zaman göründüğüne ilişkin yerleşimi, konumu ve kuralları özelleştiremezsiniz.
Ek diller için dizeler eklemek için dizeleri AOSP'ye ekleyin.
İstisnalar oluşturma
PackageManager'daki
DefaultPermissionGrantPolicy.java sınıfını kullanarak, varsayılan işleyiciler veya temel işletim sistemi işlevleri için sağlayıcılar olan uygulamalara önceden izin verebilirsiniz. Örnekler:
ACTION_CALL (Dialer) Default Phone, Contacts, SMS, Microphonetutucu2 l10n-yer
SMS_DELIVER_ACTION (SMS/MMS) Default Phone, Contacts, SMS
Özel izinleri tanımlama
Android 5.x ve önceki sürümlerde olduğu gibi, özel izinleri ve grupları normal veya tehlikeli olarak tanımlayabilir ve mevcut izin gruplarına OEM/Taşıyıcıya özel izinler ekleyebilirsiniz.
Android 6.0 ve sonraki sürümlerde, yeni bir tehlikeli izin eklerseniz, diğer tehlikeli izinlerle aynı şekilde ele alınmalıdır (uygulama çalışma zamanında istenir ve kullanıcılar tarafından geri alınabilir). özellikle:
- Geçerli bir gruba yeni izinler ekleyebilirsiniz, ancak tehlikeli izinlerin ve tehlikeli izin gruplarının AOSP eşlemesini değiştiremezsiniz. (Başka bir deyişle, bir gruptan bir izni kaldıramaz ve başka bir gruba atayamazsınız).
- Cihazda yüklü uygulamalarda yeni izin grupları ekleyebilirsiniz, ancak platform bildiriminde yeni izin grupları ekleyemezsiniz.
izinleri test etme
Android, bireysel izinlerin doğru gruplarla eşleştirildiğini doğrulayan Uyumluluk Testi Paketi (CTS) testleri içerir. Bu testleri geçmek, Android 6.0 ve sonraki CTS uyumluluğu için bir gerekliliktir.