web-dev-qa-db-fra.com

Où puis-je obtenir une liste des autorisations Android

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?

26
Scolytus

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.

14
Charlie Collins

adb Shell pm list permissions -s

C'est peut-être ce que vous recherchez.

21
mkozak

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();
    }
}
12
Nir Pear

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é

5
Stephen Donecker

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 .

4
CommonsWare

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:"
4
Izzy

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 :)

2
Aaron Esau

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;
}
2
Jared Rummler