Где я могу получить список разрешений для Android

Я пытаюсь получить список действительных прав Android. Я знаю «официальные» на http://developer.android.com/reference/android/Manifest.permission.html, но, похоже, там больше.

Например

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 

Где я могу получить такой список? Где я могу получить описание этих разрешений?

Solutions Collecting From Web of "Где я могу получить список разрешений для Android"

Для всех разрешений нет такого понятия, как всеобъемлющий «список». Новые разрешения могут быть определены любым приложением, которое хочет обеспечить его собственное: https://developer.android.com/guide/topics/security/security.html#declaring .

Класс Manifest.permission перечисляет «системные» разрешения, и вы уже знаете об этом. Остальные вещи, которые вы указали, не являются системными правами, а скорее специфичны для определенных приложений, а также являются старыми именами (например, ACCESS_LOCATION и ACCESS_GPS были именами до 1.0).

Grep для чего-то вроде <permission android:name= в источнике будет раскрывать все включенные разрешения приложений (для приложений с открытым исходным кодом), но в целом вы должны придерживаться имен документированных прав.

adb shell pm list permissions -s

Это может быть то, что вы ищете.

Используйте следующий фрагмент, чтобы получить все разрешения, объявленные на вашем устройстве:

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

Где я могу получить такой список?

Вы не можете.

Где я могу получить описание этих разрешений?

Везде, где эти разрешения документированы. Во многих случаях они недокументированы и поэтому не должны использоваться.

Например, ваши первые три были удалены с Android пару лет назад, IIRC. Последний документирован в документации C2DM .

Чтобы просмотреть все разрешения на вашем телефоне

 adb shell pm list permissions -g 

Аргумент -s – краткое резюме

Там определенно «больше разрешений». Ссылка, которую вы связали, является только «официальным списком» – и даже для этого она довольно неполна. Я исследовал существующие разрешения, то, что они хотят, и какое влияние они оказывают на конечного пользователя, примерно на год – и действительно интересно, как разработчики находят то, что им нужно. Хорошее угадывание, похоже, является его частью, так как для многих разрешений поиск Google только уступил содержание файлов Manifest нескольких приложений («использует …»).

Кроме того, рядом с «официальными разрешениями» (а точнее «разрешениями на ядро ​​Android») каждый разработчик может определить свое собственное приложение (как уже указывал Чарли Коллинз в своем ответе ).

Во время моих исследований я составил список с моими результатами из нескольких источников (которые я перечислял вместе) – добавив любые объяснения, которые я мог найти. Этот список скорее ориентирован на конечного пользователя, но может оказаться полезным для разработчиков. Вы можете найти его на моем сайте : объяснения для Android – двуязычные (английский и немецкий). Список включает в себя «основное разрешение», а также некоторые выбранные приложения (в основном те, которые встречаются чаще: объявляются приложениями Google или популярные приложения, такие как Tasker и K-9 Mail ). Опять же, это, конечно, далеко не полное – «полный список», как вероятный, как единорог (опубликованный день, скорее всего, уже устарел).


Редактировать:

Как было предложено в другом комментарии: если вы установили пакет с новым разрешением, еще не охваченным каким-либо списком, и вы хотите узнать «техническое имя» этого нового разрешения, вы можете получить эту информацию с вашего устройства через ADB :

 adb shell dumpsys package com.foo.bar 

(Конечно, замените com.foo.bar на имя рассматриваемого пакета). На выходе перейдите к строке предоставленных grantedPermissions: Ниже приведены разрешения в «полной записи», например, android.permission.INTERNET , по одному на строку. Сделать это проще:

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

Вы можете получить все разрешения на устройстве, используя следующий код:

 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; } 

Я знаю, что это поздний пост, но это скорее ссылка для людей в будущем, у которых есть тот же вопрос.

Ниже приведен список всех встроенных разрешений в Android 7.0 (Nougat). Тем не менее, вы можете создать свои собственные разрешения, чтобы список не содержал их всех.

Надеюсь, это поможет 🙂