2010-11-21 4 views
25

Ich versuche, eine Liste der gültigen Android-Berechtigungen zu erhalten. Ich kenne die "offiziellen" unter http://developer.android.com/reference/android/Manifest.permission.html, aber es scheint, dass es mehr gibt.Wo kann ich eine Liste von Android-Berechtigungen erhalten

Zum Beispiel

android.permission.READ_SETTINGS 
android.permission.ACCESS_LOCATION 
android.permission.ACCESS_GPS 

com.android.vending.CHECK_LICENSE 

com.android.browser.permission.READ_HISTORY_BOOKMARKS 
com.android.browser.permission.WRITE_HISTORY_BOOKMARKS 

com.google.android.googleapps.permission.GOOGLE_AUTH 
com.google.android.googleapps.permission.GOOGLE_AUTH.OTHER_SERVICES 

com.google.android.c2dm.permission.RECEIVE 

Wo kann ich eine solche Liste zu bekommen? Woher bekomme ich eine Beschreibung für diese Berechtigungen?

+0

http://developer.android.com/reference/android/Manifest.permission.html – cprcrack

+19

@cprcrack Wow hilft, haben Sie es geschafft, eine Link zu posten, die bereits in der Frage ist - nach 3 Jahren! – Scolytus

+1

Nun, ich fühle mich albern, ich hatte viele Tabs hier und ich dachte, der Link war nicht hier. Aber es ist übrigens egal, ob es nach 3 Jahren ist, diese Frage ist nicht nur für dich, sondern für jeden, der irgendwann hier ist;) – cprcrack

Antwort

14

Es gibt keine umfassende "Liste" für alle Berechtigungen. Neue Berechtigungen können von jeder Anwendung definiert werden, die eine eigene Berechtigung erzwingen möchte: https://developer.android.com/guide/topics/security/security.html#declaring.

Die Klasse Manifest.permission listet die "System" -Berechtigungen auf, und Sie sind sich dessen bereits bewusst. Die anderen Dinge, die Sie aufgelistet haben, sind keine Systemberechtigungen, sondern sind spezifisch für bestimmte Apps und/oder sind alte Namen (ACCESS_LOCATION und ACCESS_GPS waren beispielsweise vor 1.0 Namen).

Ein GREP für etwas wie <permission android:name= in der Quelle würde alle enthaltenen App-Berechtigungen (für die Open-Source-Anwendungen) zeigen, aber im Allgemeinen sollten Sie bei den dokumentierten Berechtigungsnamen bleiben.

4

Wo kann ich eine solche Liste bekommen?

Sie können nicht.

Woher bekomme ich eine Beschreibung für diese Berechtigungen?

Wo diese Berechtigungen dokumentiert sind. In vielen Fällen sind sie nicht dokumentiert und sollten daher nicht verwendet werden.

Zum Beispiel wurden Ihre ersten drei von Android vor ein paar Jahren, IIRC entfernt. Der letzte ist in der C2DM documentation dokumentiert.

12

Verwenden Sie das folgende Snippet alle Berechtigungen auf dem Gerät erklärt zu bekommen:

Context context = this; 
PackageManager pm = context.getPackageManager(); 
CharSequence csPermissionGroupLabel; 
CharSequence csPermissionLabel; 

List<PermissionGroupInfo> lstGroups = pm.getAllPermissionGroups(0); 
for (PermissionGroupInfo pgi : lstGroups) { 
    csPermissionGroupLabel = pgi.loadLabel(pm); 
    Log.e("perm", pgi.name + ": " + csPermissionGroupLabel.toString()); 

    try { 
     List<PermissionInfo> lstPermissions = pm.queryPermissionsByGroup(pgi.name, 0); 
     for (PermissionInfo pi : lstPermissions) { 
      csPermissionLabel = pi.loadLabel(pm); 
      Log.e("perm", " " + pi.name + ": " + csPermissionLabel.toString()); 
     } 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 
} 
+0

Hallo, wenn ich ur Code codiere dann show errors.there sagte, alle Erlaubnis auf Manifest-Datei bekommen. Ist das der beste Weg? – Maidul

+0

@Maidul Können Sie erklären, welche Fehler Sie bekommen? –

+0

@NirPear Hallo, Ich habe Ihren Code in einem "Galaxy Note" und das Protokoll zeigt android.permission.NFC und dieses Gerät hat keine NFC. Ich muss die richtigen Berechtigungen für das Gerät erhalten. Weißt du wie ich das machen kann? Vielen Dank. – htafoya

20

adb shell pm list permissions -s

Dies könnte das sein, was Sie suchen.

+2

Versuche auch ohne '-s' – cprcrack

+0

Bin ich richtig in der Annahme :-), dass" adb shell pm list features "die Features des angeschlossenen Gerätes auflisten würde? – ferdil

+0

@ferdil Ja, du hast Recht :) –

4

Um alle Berechtigungen auf Ihrem Telefon Liste

adb shell pm list permissions -g 

Das Argument es

+0

Aus irgendeinem Grund -g gibt mehr Berechtigungen als ohne es –

+0

@PhilippeGirolami In der Tat, und das ist, obwohl das, was es tun soll, ist nur gruppieren sie: http://developer.android.com/tools/help/adb.html –

4

Es gibt „da draußen mehr Berechtigungen“ auf jeden Fall eine kurze Zusammenfassung ist. Die reference you've linked ist nur die "offizielle Liste" - und selbst dafür ist sie ziemlich unvollständig. Ich habe für etwa ein Jahr nach vorhandenen Berechtigungen gesucht, wofür sie sind und welche Auswirkungen sie auf den Endbenutzer haben - und ich frage mich wirklich, wie Entwickler finden, was sie brauchen. Gutes Raten scheint ein Teil davon zu sein, da für viele Berechtigungen eine Google-Suche gerade Inhalt von mehreren Apps Manifest Dateien ergab ("uses ...").

Hinzu kommt, dass neben den "offiziellen Berechtigungen" (bzw. "Android Core-Berechtigungen") jeder Entwickler für seine App eigene definieren kann (wie Charlie Collins bereits in his answer aufgezeigt).

Während meiner Recherchen habe ich eine Liste mit meinen Ergebnissen aus verschiedenen Quellen (die ich mit aufgeführt habe) erstellt - mit Erklärungen, die ich finden konnte. Diese Liste ist eher auf den Endbenutzer ausgerichtet, könnte sich aber für Entwickler als hilfreich erweisen. Sie finden es unter my site: Android Permissions explained - zweisprachig (Englisch und Deutsch). Die Liste enthält die "Kern-Erlaubnis" sowie einige ausgewählte App-spezifische (meist diejenigen, die häufiger auftreten: von Google Apps deklariert, oder beliebte Apps wie Tasker und K-9 Mail). Auch dies ist natürlich noch lange nicht vollständig - eine "vollständige Liste" ist so wahrscheinlich wie ein Einhorn (der Tag, der veröffentlicht wurde, wäre wahrscheinlich schon veraltet).


Edit:

Wie es in einem anderen Kommentar wurde gefragt: Wenn Sie ein Paket mit einem neuen Erlaubnis noch nicht von einer Liste aufgeführt sind installiert, und Sie möchten die „technische kennen Name“diese neuen Genehmigung, können Sie diese Informationen von Ihrem Gerät über ADB abrufen:

adb shell dumpsys package com.foo.bar 

(natürlich com.foo.bar mit dem Namen des Pakets auf der Suche ersetzen Ion). In der Ausgabe springen Sie in die Zeile grantedPermissions:. Darunter fallen die Berechtigungen in "Vollnotation", z. android.permission.INTERNET, eine pro Zeile. Um das zu erleichtern:

adb shell dumpsys package com.foo.bar |egrep -A99999 "grantedPermissions:" 
2

Sie alle Berechtigungen auf einem Gerät bekommen können mit dem folgenden Code:

public static List<PermissionInfo> getAllPermissions(Context context) { 
    PackageManager pm = context.getPackageManager(); 
    List<PermissionInfo> permissions = new ArrayList<>(); 

    List<PermissionGroupInfo> groupList = pm.getAllPermissionGroups(0); 
    groupList.add(null); // ungrouped permissions 

    for (PermissionGroupInfo permissionGroup : groupList) { 
     String name = permissionGroup == null ? null : permissionGroup.name; 
     try { 
      permissions.addAll(pm.queryPermissionsByGroup(name, 0)); 
     } catch (PackageManager.NameNotFoundException ignored) { 
     } 
    } 

    return permissions; 
} 
2

Ich weiß, dass dies eine späte Post ist, aber das ist eher eine Referenz für die Menschen in die Zukunft, die die gleiche Frage haben.

Here ist eine Liste aller einzelnen eingebaute Erlaubnis in Android 7.0 (Nougat). Es ist jedoch ist möglich, Ihre eigenen Berechtigungen zu erstellen, so dass die Liste nicht alle da draußen enthält.

Hope that :)

+1

Nein so etwas wie einen "späten" Beitrag :) –