Çalışma Zamanı İzinleri

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. Modeli tehlikeli izinleri (bkz gerektiren Android uygulamaları taşındı Etkilenen izinleri bir çalışma zamanı izni modeline bir yükleme zamanı izni modelinden):

  • Yükleme zamanı izinleri

    (Android 5.1 ve daha düşük) Kullanıcılar hibe tehlikeli izinleri onlar yüklemek veya uygulamayı güncellemek zaman bir uygulamaya. 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) uygulaması çalışırken Kullanıcılar bir uygulamaya tehlikeli izinleri verin. İ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 istisnalar oluşturma .)

    (Android 10) Kullanıcılar daha fazla şeffaflık görmek ve uygulamalar etkinlik tanıma (AR) çalışma zamanı izinlerine sahip olan üzerinde kontrole sahip. Kullanıcılar tarafından istenir iletişim zamanı izinleri ya her zaman izin verilmesi, kullanımda iken izin veya izinlere inkar. Android 10'a bir OS yükseltme sırasında, uygulamalara verilen izinler korunur, ancak kullanıcılar Ayarlar gidin ve 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ığı ya da verilen 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 izinleri (örneğin, yüksek riskli izinlerdir READ_CALENDAR olumsuz kullanıcı etkileyebilir bir cihaz üzerinde talep uygulamaları özel kullanıcı veri erişimi ya da kontrol verebilir). Tehlikeli izinlerin listesini görüntülemek için şu komutu çalıştırın:

adb shell pm list permissions -g -d

Android 6.0 ve üstü davranışını değiştirmez , normal izinlerin . Bunların tümü, normal, sistem ve imza izinleri dahil, tehlikeli olmayan izinlerdir. Normal izinleri (örneğin, daha az riskli izinlerdir SET_WALLPAPER izole uygulama seviyesine uygulamalar erişim talebinde bulunan en az başka uygulamalar için risk, sistem, ya da kullanıcı özellikleri ile veremez). 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. İzinleri hakkında ayrıntılı bilgi için bkz <izin> öğesi belgelerine.

Android 10'da sert ve yumuşak kısıtlamalar

Tehlikeli olmasının yanı sıra, bir izin 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:

  • (Sabit kısıtlamalar) Uygulamalar, beyaz listede olmayan izinler verilmiş edilemez.
  • Onlar istemek özel izni göre davranırlar beyaz liste olmadan (Yumuşak kısıtlamalar) uygulamalar. 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 dahildir.

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 güncellenmesi uygulamaları . 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, işlemek için cihazın varsayılan Çevirici uygulamasını ACTION_CALL Telefon izni erişimi olabilir.) Ayrıntılı bilgi için bkz istisnalar oluşturma .
  • Tehlikeli izinlere sahip önceden yüklenmiş uygulamalar API düzeyi 23'ü hedeflemeli ve çalışma zamanı izin modelini korumalıdır. Yani, uygulama yüklemesi sırasındaki kullanıcı arayüzü 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ı .

İzinleri 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.

Bir Android 9'dan 10'a güncellemede, tüm katı kısıtlamalı izinler beyaz listeye alınır. Ön plan / arka plan bölünmüş izinleri uygulamayla ilgili ayrıntılı bilgi için bkz Android 10 gizlilik değişikliği ile başlayan, talep arka plan konum .

Entegrasyon

Android 6.0 ve sonraki sürümler 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şlevlere için varsayılan işleyiciler / sağlayıcıları uygulamalar için istisnalar tanımlayabilirsiniz özel izinler tanımlamak ve kullanılan tema özelleştirebilirsiniz PermissionController app.

Uygulamaları güncelleme

Sistem görüntüsündeki uygulamalar ve önceden yüklenmiş uygulamalar, otomatik olarak önceden verilmiş izinler değildir. Biz kullanarak gerekli uygulama değişiklik yapma önceden yüklenmiş uygulama geliştiricilerinin (OEM, taşıyıcı ve üçüncü parti) ile çalışmak için teşvik geliştirici kurallarına . Ö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ükleme sırasında UI akış içinde AOSP uygulanması sapma olmamalıdır PermissionController . 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'da başlayan (tarafından gerçekleştirilen yüklemek akış Package Installer app) (içinde verilmesi izinleri ayrı bir işlevdir Permission Controller app).

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

İstenirse, varsayılan aygıt temaları (güncelleyerek izinler UI temasını özelleştirebilirsiniz Theme.DeviceDefault.Settings ve Theme.DeviceDefault.Light.Dialog.NoActionBar PackageInstaller tarafından kullanılır). 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 dizeleri eklemek için AOSP için dizeleri katkıda bulunur.

İstisnalar oluşturma

Sen kullanarak varsayılan işleyicileri veya çekirdek işletim sistemi işlevleri için sağlayıcıları uygulamalara izinleri-hibe Önceden yapabilirsiniz DefaultPermissionGrantPolicy.java PackageManager sınıfı. Örnekler:

ACTION_CALL (Dialer) Default
Phone, Contacts, SMS, Microphone
SMS_DELIVER_ACTION (SMS/MMS) Default
Phone, Contacts, SMS

Özel izinleri tanımlama

Normal veya tehlikeli olarak özel izinleri ve grupları tanımlamak ve sadece Android 5.x ve önceki sürümlerde geldiğince, mevcut izinleri gruplara OEM / Operatöre ö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.