Où puis-je obtenir une liste des autorisations Android
J'essaie d'obtenir une liste d'autorisations Android valides. Je connais les 'officiels' à http://developer.android.com/reference/android/Manifest.permission.html mais il semble qu'il y en ait plus là-bas.
Par exemple
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
Où puis-je obtenir une telle liste? Où puis-je obtenir une description de ces autorisations?
8 réponses
Il n'existe pas de "liste" complète pour toutes les autorisations. Les nouvelles autorisations peuvent être définies par n'importe quelle application qui veut appliquer les siennes: https://developer.android.com/guide/topics/security/security.html#declaring .
La classe Manifest.permission
répertorie les autorisations "système", et vous les connaissez déjà. Les autres choses que vous avez répertoriées ne sont pas des autorisations système, mais sont spécifiques à certaines applications, et ou sont d'anciens noms (ACCESS_LOCATION et ACCESS_GPS ont été pré 1.0 noms, par exemple).
Un grep pour quelque chose comme <permission android:name=
dans la source révélerait toutes les autorisations d'application incluses (pour les applications open source), mais en général, vous devriez vous en tenir aux noms d'autorisation documentés.
adb shell pm list permissions -s
C'est peut-être ce que vous cherchez.
Utilisez l'extrait suivant pour obtenir toutes les autorisations déclarées sur votre appareil:
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();
}
}
Où puis-je obtenir une telle liste?
Vous ne pouvez pas.
Où puis-je obtenir une description de ces autorisations?
Partout où ces autorisations sont documentées. Dans de nombreux cas, ils ne sont pas documentés et ne devraient donc pas être utilisés.
Par exemple, vos trois premiers ont été retirés D'Android il y a quelques années, IIRC. Le dernier est documenté dans la documentation C2DM .
Pour lister toutes les autorisations sur votre téléphone
adb shell pm list permissions -g
L'argument-s est un bref résumé
Il y a certainement "plus d'autorisations là-bas". La référence que vous avez liée n'est que la " liste officielle – - et même pour cela, elle est assez incomplète. J'ai recherché les autorisations existantes, à quoi elles servent et quels impacts elles ont sur l'utilisateur final, pendant environ un an maintenant-et je me demande vraiment comment les développeurs trouvent ce dont ils ont besoin. Une bonne devinette semble en faire partie, car pour de nombreuses autorisations, une recherche Google a simplement donné du contenu de plusieurs fichiers Manifest
d'applications ("utilisations …").
Ajouté à cela, à côté des " autorisations officielles "(ou plutôt" autorisations de base Android"), chaque développeur peut définir son propre pour son application (comme Charlie Collins déjà souligné dans sa réponse).
Au cours de mes recherches, j'ai mis en place une liste avec mes résultats provenant de plusieurs sources (que j'ai listées) – en ajoutant toutes les explications que j'ai pu trouver. Cette liste est plutôt axée sur l'utilisateur final, mais pourrait encore s'avérer utile pour les développeurs. Vous pouvez le trouver à mon site: Autorisations Android expliqué – bilingue (anglais et allemand). La liste comprend la "permission de base" ainsi que certaines applications spécifiques sélectionnées (la plupart du temps celles que l'on rencontre plus fréquemment: déclarées par Google apps, ou des applications populaires comme Tasker et K-9 Mail). Encore une fois, ceci est bien sûr loin d'être complet – une "liste complète" étant aussi probable qu'une licorne (le jour où elle a été publiée serait probablement dépassée déjà).
Modifier:
Comme cela a été demandé dans un autre commentaire: si vous avez installé un paquet avec une autorisationnew non encore couverte par une liste, et que vous voulez connaître le "nom technique" de cette nouvelle autorisation, vous pouvez récupérer ces informations à partir de votre appareil via ADB:
adb shell dumpsys package com.foo.bar
(Bien sûr, remplacez com.foo.bar
par le nom du paquet en question). Dans la sortie, passez à la ligne grantedPermissions:
. Ci-dessous viennent les autorisations dans " notation complète", par exemple, android.permission.INTERNET
, un par ligne. Pour rendre cela plus facile:
adb shell dumpsys package com.foo.bar |egrep -A99999 "grantedPermissions:"
Vous pouvez obtenir toutes les autorisations sur un périphérique en utilisant le code suivant:
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;
}
Je sais que c'est une fin de post, mais c'est plus une référence pour les personnes qui ont la même question.
Voici une liste de chaqueintégré autorisation dans Android 7.0 (Nougat). Cependant, il est possible de créer vos propres autorisations, de sorte que cette liste ne les contient pas toutes.
J'espère que cela aide:)