J'essaie d'obtenir une liste d'autorisations valides Android. Je connais celles "officielles" sur http://developer.Android.com/reference/Android/Manifest. permission.html mais il semble qu'il y en ait plus.
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?
Il n'existe pas de "liste" complète pour toutes les autorisations. De nouvelles autorisations peuvent être définies par toute application qui souhaite appliquer la sienne: https://developer.Android.com/guide/topics/security/security.html#declaring .
Le Manifest.permission
class répertorie les autorisations "système", et vous les connaissez déjà. Les autres éléments que vous avez répertoriés ne sont pas des autorisations système, mais sont plutôt spécifiques à certaines applications et ou sont d'anciens noms (ACCESS_LOCATION et ACCESS_GPS étaient des noms antérieurs à 1.0, 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 recherchez.
Utilisez l'extrait de code 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();
}
}
Pour répertorier toutes les autorisations sur votre téléphone
adb Shell pm list permissions -g
L'argument -s est un bref résumé
Où puis-je obtenir une telle liste?
Tu ne peux 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 doivent donc pas être utilisés.
Par exemple, vos trois premiers ont été supprimés de Android il y a quelques années, IIRC. Le dernier est documenté dans le documentation C2DM .
Il y a certainement "plus d'autorisations". 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, depuis environ un an maintenant - et je me demande vraiment comment les développeurs trouvent ce dont ils ont besoin. Une bonne supposition semble en faire partie, car pour de nombreuses autorisations, une recherche Google a simplement généré le contenu des fichiers Manifest
de plusieurs applications ("utilise…").
Ajouté à cela, à côté des "autorisations officielles" (ou plutôt des "autorisations de base Android"), chaque développeur peut définir la sienne pour son application (comme Charlie Collins déjà souligné dans son réponse ).
Au cours de mes recherches, j'ai mis en place une liste avec mes découvertes provenant de plusieurs sources (que j'ai énuméré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 aux développeurs. Vous pouvez le trouver sur mon site : les autorisations Android expliquées - bilingue (anglais et allemand). La liste comprend les "autorisations de base" ainsi que certaines spécifiques à certaines applications (principalement celles que l'on rencontre le plus souvent: déclarées par les applications Google ou des applications populaires comme Tasker et K -9 Mail). Encore une fois, cela est bien sûr loin d'être complet - une "liste complète" étant aussi probable qu'une licorne (le jour de sa publication, elle serait probablement déjà dépassée).
Modifier:
Comme il a été demandé dans un autre commentaire: si vous avez installé un package avec une autorisation nouveau non encore couverte par une liste, et que vous souhaitez connaître le "nom technique" de cette nouvelle autorisation, vous peut récupérer ces informations depuis votre appareil via ADB:
adb Shell dumpsys package com.foo.bar
(bien sûr remplacer com.foo.bar
avec le nom du package en question). Dans la sortie, passez à la ligne grantedPermissions:
. En dessous, viennent les autorisations en "notation complète", par exemple Android.permission.INTERNET
, un par ligne. Pour faciliter cela:
adb Shell dumpsys package com.foo.bar |egrep -A99999 "grantedPermissions:"
Je sais que c'est un post tardif, mais c'est plus une référence pour les personnes à l'avenir qui ont la même question.
Ici est une liste de toutes les autorisations intégrées dans Android 7.0 (Nougat Cependant, il est possible de créer vos propres autorisations, de sorte que cette liste ne les contienne pas toutes.
J'espère que cela pourra aider :)
Vous pouvez obtenir toutes les autorisations sur un appareil à l'aide du 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;
}