Laufzeitberechtigungen

In Android 6.0 und höher wurde das Berechtigungsmodell für Android-Anwendungen entwickelt, um Berechtigungen für Benutzer verständlicher, nützlicher und sicherer zu machen. Das Modell hat Android-Anwendungen, die gefährliche Berechtigungen erfordern (siehe Betroffene Berechtigungen ), von einem Berechtigungsmodell zur Installationszeit in ein Berechtigungsmodell zur Laufzeit verschoben:

  • Berechtigungen zur Installationszeit

    ( Android 5.1 und niedriger ) Benutzer erteilen einer App gefährliche Berechtigungen , wenn sie die App installieren oder aktualisieren. Gerätehersteller und Netzbetreiber können Apps mit vorab erteilten Berechtigungen vorinstallieren, ohne den Benutzer zu benachrichtigen.

  • Laufzeitberechtigungen

    ( Android 6.0 – 9 ) Benutzer gewähren einer App gefährliche Berechtigungen, wenn die App ausgeführt wird. Wann Berechtigungen angefordert werden (z. B. wenn die App gestartet wird oder wenn der Benutzer auf eine bestimmte Funktion zugreift), hängt von der Anwendung ab, aber der Benutzer gewährt/verweigert den Anwendungszugriff auf bestimmte Berechtigungsgruppen. OEMs/Netzbetreiber können Apps vorinstallieren, aber keine Berechtigungen vorab erteilen, es sei denn, sie durchlaufen den Ausnahmeprozess. (Siehe Ausnahmen erstellen .)

    ( Android 10 ) Benutzer sehen mehr Transparenz und haben die Kontrolle darüber, welche Apps Laufzeitberechtigungen für die Aktivitätserkennung (AR) haben. Benutzer werden vom Laufzeitberechtigungsdialog aufgefordert, Berechtigungen entweder immer zuzulassen, während der Verwendung zuzulassen oder zu verweigern. Bei einem Betriebssystem-Upgrade auf Android 10 bleiben die Berechtigungen für Apps erhalten, aber Benutzer können in die Einstellungen gehen und sie ändern.

Laufzeitberechtigungen verhindern, dass Apps ohne die Zustimmung eines Benutzers Zugriff auf private Daten erhalten, und bieten ihnen zusätzlichen Kontext und Einblick in die Arten von Berechtigungen, die Anwendungen entweder anfordern oder denen sie gewährt wurden. Das Laufzeitmodell ermutigt Entwickler, Benutzern zu helfen, zu verstehen, warum Anwendungen die angeforderten Berechtigungen benötigen, und bietet mehr Transparenz, damit Benutzer bessere Entscheidungen über das Erteilen oder Verweigern dieser Berechtigungen treffen können.

Betroffene Berechtigungen

Android 6.0 und höher erfordert gefährliche Berechtigungen, um ein Laufzeitberechtigungsmodell zu verwenden. Gefährliche Berechtigungen sind Berechtigungen mit höherem Risiko (z. B. READ_CALENDAR ), die anfordernden Anwendungen Zugriff auf private Benutzerdaten oder die Kontrolle über ein Gerät gewähren, was sich negativ auf den Benutzer auswirken kann. Führen Sie den folgenden Befehl aus, um eine Liste gefährlicher Berechtigungen anzuzeigen:

adb shell pm list permissions -g -d

Android 6.0 und höher ändert das Verhalten normaler Berechtigungen nicht . Dies sind alles ungefährliche Berechtigungen, einschließlich normaler, System- und Signaturberechtigungen. Normale Berechtigungen sind Berechtigungen mit geringerem Risiko (z. B. SET_WALLPAPER ), die anfordernden Anwendungen Zugriff auf isolierte Funktionen auf Anwendungsebene mit minimalem Risiko für andere Anwendungen, das System oder den Benutzer gewähren. Wie in Android 5.1 und niedrigeren Versionen gewährt das System einer anfordernden Anwendung bei der Installation automatisch normale Berechtigungen und fordert den Benutzer nicht zur Genehmigung auf. Einzelheiten zu Berechtigungen finden Sie in der Dokumentation zum <permission>-Element .

Harte und weiche Einschränkungen in Android 10

Abgesehen davon, dass sie gefährlich ist, kann eine Erlaubnis entweder hart eingeschränkt oder weich eingeschränkt sein. In jedem Fall muss die eingeschränkte Berechtigung ebenfalls auf die Positivliste gesetzt werden. Harte Einschränkungen, die nicht auf der Zulassungsliste stehen, verhalten sich anders als weiche Einschränkungen, die nicht auf der Zulassungsliste stehen:

  • ( Harte Einschränkungen ) Apps können keine Berechtigungen erteilt werden, die nicht auf der Zulassungsliste stehen.
  • ( Weiche Beschränkungen ) Apps ohne Zulassungsliste verhalten sich entsprechend der spezifischen Erlaubnis, die sie anfordern. Das Verhalten wird in der öffentlichen Dokumentation für die angeforderte Erlaubnis beschrieben.

Beim Installieren einer App kann das Installationsprogramm (z. B. Google Play Store) auswählen, die eingeschränkten Berechtigungen für die App nicht auf die Zulassungsliste zu setzen. Berechtigungen werden von der Plattform eingeschränkt und können nur gewährt werden, wenn eine App spezielle Kriterien gemäß Plattformrichtlinie erfüllt. Beispiele für stark eingeschränkte Berechtigungstypen sind SMS- und Anrufprotokollberechtigungen.

Die Zulassungsliste erfolgt während der Installation und wann

  • Bei einem Upgrade von Android 9 auf 10 wird bereits eine App installiert.
  • eine Berechtigung vorab erteilt oder eine App vorinstalliert ist.
  • Für eine Rolle, die bereits definiert ist, ist eine Berechtigung erforderlich, um die Berechtigung auf die Zulassungsliste zu setzen.
  • Das Installationsprogramm (z. B. Google Play Store) markiert die Berechtigung auf der Zulassungsliste.

Benutzer können Berechtigungen nicht manuell auf die Positivliste setzen.

Anforderungen

Das Laufzeit-Berechtigungsmodell gilt für alle Anwendungen, einschließlich vorinstallierter Apps und Apps, die im Rahmen des Setup-Prozesses auf das Gerät geliefert werden. Zu den Anforderungen an die Anwendungssoftware gehören:

  • Das Laufzeitberechtigungsmodell muss auf allen Geräten mit Android 6.0 und höher konsistent sein. Dies wird durch Tests der Android Compatibility Test Suite (CTS) erzwungen.
  • Apps müssen Benutzer auffordern, Anwendungsberechtigungen zur Laufzeit zu erteilen. Einzelheiten finden Sie unter Aktualisieren von Anwendungen . Begrenzte Ausnahmen können standardmäßigen Anwendungen und Handlern gewährt werden, die grundlegende Gerätefunktionen bereitstellen, die für den erwarteten Betrieb des Geräts grundlegend sind. (Zum Beispiel kann die standardmäßige Dialer-App des Geräts für die Bearbeitung ACTION_CALL Zugriff auf die Telefonberechtigung haben.) Einzelheiten finden Sie unter Erstellen von Ausnahmen .
  • Vorinstallierte Apps mit gefährlichen Berechtigungen müssen auf API-Ebene 23 abzielen und das Laufzeitberechtigungsmodell beibehalten. Das heißt, der UI-Fluss während der App-Installation darf nicht von der AOSP-Implementierung von PermissionController abweichen, Benutzer können gefährliche Berechtigungen von vorinstallierten Apps widerrufen und so weiter.
  • Headless-Anwendungen müssen eine Aktivität verwenden, um Berechtigungen anzufordern oder eine UID mit einer anderen Anwendung zu teilen, die über die erforderlichen Berechtigungen verfügt. Einzelheiten finden Sie unter Headless-Anwendungen .

Berechtigungsmigration

Berechtigungen, die Anwendungen auf Android 5.x gewährt wurden, bleiben nach dem Update auf Android 6.0 oder höher gewährt, aber Benutzer können diese Berechtigungen jederzeit widerrufen.

Bei einem Update von Android 9 auf 10 werden alle stark eingeschränkten Berechtigungen auf die Positivliste gesetzt. Ausführliche Informationen zum Implementieren der geteilten Berechtigungen für Vordergrund/Hintergrund finden Sie unter Android 10-Datenschutzänderung , beginnend mit Hintergrundstandort anfordern .

Integration

Wenn Sie das Berechtigungsmodell für die Anwendungslaufzeit für Android 6.0 und höher integrieren, müssen Sie vorinstallierte Anwendungen aktualisieren, damit sie mit dem neuen Modell funktionieren. Sie können auch Ausnahmen für Apps definieren, die die Standardhandler/-anbieter für Kernfunktionen sind, benutzerdefinierte Berechtigungen definieren und das in der PermissionController -App verwendete Design anpassen.

Anwendungen aktualisieren

Anwendungen auf dem Systemabbild und vorinstallierten Anwendungen werden nicht automatisch vorab gewährte Berechtigungen gewährt. Wir empfehlen Ihnen, mit vorinstallierten App-Entwicklern (OEM, Netzbetreiber und Drittanbieter) zusammenzuarbeiten, um die erforderlichen App-Änderungen gemäß den Entwicklerrichtlinien vorzunehmen . Insbesondere müssen Sie sicherstellen, dass vorinstallierte Anwendungen geändert werden, um Abstürze und andere Probleme zu vermeiden, wenn Benutzer Berechtigungen widerrufen.

Vorinstallierte Anwendungen

In Android 9 und niedriger müssen vorinstallierte Apps, die gefährliche Berechtigungen verwenden, auf API-Ebene 23 oder höher abzielen und das AOSP-Berechtigungsmodell von Android 6.0 und höher beibehalten. Beispielsweise darf der UI-Fluss während einer App-Installation nicht von der AOSP-Implementierung von PermissionController abweichen. Benutzer können sogar die gefährlichen Berechtigungen vorinstallierter Apps widerrufen.

In Android 6.0 bis 9 werden einige Berechtigungen während des Installationsablaufs gewährt. Ab Version 10 ist der Installationsablauf (durchgeführt von der Package Installer -App) jedoch eine separate Funktion von der Berechtigungsgewährung (in der Permission Controller -App).

Headless-Anwendungen

Nur Aktivitäten können Berechtigungen anfordern. Dienste können Berechtigungen nicht direkt anfordern.

  • In Android 5.1 und früher können Headless-Anwendungen Berechtigungen anfordern, wenn sie installiert sind oder wenn sie ohne Verwendung einer Aktivität vorinstalliert wurden.
  • In Android 6.0 und höher müssen Headless-Anwendungen eine der folgenden Methoden verwenden, um Berechtigungen anzufordern:
    • Fügen Sie eine Aktivität hinzu, um Berechtigungen anzufordern. (Dies ist die bevorzugte Methode.)
    • Teilen Sie eine UID mit einer anderen Anwendung, die über die erforderlichen Berechtigungen verfügt. Verwenden Sie diese Methode nur, wenn die Plattform mehrere APKs als eine einzige Anwendung verarbeiten soll.

Das Ziel besteht darin, zu vermeiden, dass Benutzer mit Berechtigungsanfragen verwirrt werden, die aus dem Zusammenhang gerissen erscheinen.

Anpassen der PackageInstaller-Benutzeroberfläche

Falls gewünscht, können Sie das Design der Theme.DeviceDefault.Light.Dialog.NoActionBar für Berechtigungen anpassen, indem Sie die standardmäßigen Gerätedesigns ( Theme.DeviceDefault.Settings und Theme.DeviceDefault.Light.Dialog.NoActionBar ) aktualisieren, die von PackageInstaller verwendet werden. Da Konsistenz für App-Entwickler jedoch von entscheidender Bedeutung ist, können Sie die Platzierung, Position und Regeln für die Anzeige der Benutzeroberfläche für Berechtigungen nicht anpassen.

Um Zeichenfolgen für zusätzliche Sprachen einzuschließen, tragen Sie die Zeichenfolgen zu AOSP bei.

Ausnahmen erstellen

Sie können Anwendungen, die standardmäßige Handler oder Anbieter für Kernfunktionen des Betriebssystems sind, vorab Berechtigungen erteilen, indem Sie die Klasse DefaultPermissionGrantPolicy.java in PackageManager verwenden. Beispiele:

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

Benutzerdefinierte Berechtigungen definieren

Sie können benutzerdefinierte Berechtigungen und Gruppen als normal oder gefährlich definieren und OEM-/Carrier-spezifische Berechtigungen zu vorhandenen Berechtigungsgruppen hinzufügen, genau wie Sie es in Android 5.x und früheren Versionen konnten.

Wenn Sie in Android 6.0 und höher eine neue gefährliche Berechtigung hinzufügen, muss sie genauso behandelt werden wie andere gefährliche Berechtigungen (während der App-Laufzeit angefordert und von Benutzern widerrufen). Speziell:

  • Sie können einer aktuellen Gruppe neue Berechtigungen hinzufügen, aber Sie können die AOSP-Zuordnung von gefährlichen Berechtigungen und gefährlichen Berechtigungsgruppen nicht ändern. (Mit anderen Worten, Sie können eine Berechtigung nicht aus einer Gruppe entfernen und einer anderen Gruppe zuweisen).
  • Sie können neue Berechtigungsgruppen in Anwendungen hinzufügen, die auf dem Gerät installiert sind, aber Sie können keine neuen Berechtigungsgruppen im Plattformmanifest hinzufügen.

Berechtigungen testen

Android enthält Compatibility Test Suite (CTS)-Tests, die überprüfen, ob einzelne Berechtigungen den richtigen Gruppen zugeordnet sind. Das Bestehen dieser Tests ist eine Voraussetzung für die CTS-Kompatibilität mit Android 6.0 und höher.