我在哪里可以获得Android权限列表

时间:2010-11-21 13:08:02

标签: android android-manifest

我正在尝试获取有效的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

我在哪里可以获得这样的清单?我在哪里获得这些权限的描述?

8 个答案:

答案 0 :(得分:21)

adb shell pm list permissions -s

这可能就是你要找的东西。

答案 1 :(得分:14)

对于所有权限,没有全面的“列表”。任何想要强制执行自己的应用程序的新权限都可以定义:https://developer.android.com/guide/topics/security/security.html#declaring

Manifest.permission类列出了“系统”权限,您已经了解这些权限。您列出的其他内容不是系统权限,而是特定于某些应用程序,或者是旧名称(例如,ACCESS_LOCATION和ACCESS_GPS是1.0之前的名称)。

源代码中<permission android:name=之类的grep会显示所有包含的应用程序权限(对于开源应用程序),但一般来说,您应该坚持使用已记录的权限名称。

答案 2 :(得分:12)

使用以下代码段获取您设备上声明的所有权限:

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

答案 3 :(得分:5)

列出手机上的所有权限

adb shell pm list permissions -g

-s参数是一个简短的摘要

答案 4 :(得分:4)

  

我在哪里可以获得这样的清单?

你不能。

  

我从哪里获得这些权限的说明?

记录这些权限的任何位置。在许多情况下,它们没有证件,因此不应使用。

例如,您的前三个在几年前从Android中删除了,IIRC。最后一个记录在C2DM documentation

答案 5 :(得分:4)

肯定有更多的权限和#34;。 reference you've linked只是&#34;官方列表&#34; - 甚至为此,它还不完整。我已经研究了现有的权限,它们的用途,以及它们对最终用户的影响,大约一年了 - 真的很想知道开发人员如何找到他们需要的东西。好的猜测似乎是它的一部分,因为许多权限,谷歌搜索只是产生了几个应用程序的内容&#39; Manifest个文件(&#34;使用...&#34;)。

除此之外,还有&#34;官方权限&#34; (或者更确切地说,&#34; Android核心权限&#34;),每个开发人员都可以为他的应用定义自己的应用(Charlie Collins已经指出his answer)。

在我的研究过程中,我设置了一个列表,其中列出了我从几个来源(我列出的)中的调查结果 - 添加了我能找到的任何解释。此列表主要关注最终用户,但仍可能对开发人员有所帮助。您可以在my site找到它:Android Permissions explained - 双语(英语和德语)。该列表包括&#34;核心权限&#34;以及一些特定于应用程序的应用程序(主要是那些经常遇到的:由Google应用程序声明,或者流行的应用程序,如 Tasker K-9 Mail )。同样,这当然远非完整 - 一个完整的清单&#34;和独角兽一样可能(发布的那天很可能已经过时了)。


修改

正如其他评论中所要求的那样:如果您安装了一个包含 new 权限的软件包,但任何列表尚未涵盖,并且您想知道&#34;技术名称&#34;在新的权限中,您可以通过ADB从您的设备中检索该信息:

adb shell dumpsys package com.foo.bar

(当然用相关包的名称替换com.foo.bar)。在输出中,向下跳到第grantedPermissions:行。下面是&#34;完整符号&#34;中的权限,例如android.permission.INTERNET,每行一个。为了更容易:

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

答案 6 :(得分:2)

您可以使用以下代码获取设备的所有权限:

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

答案 7 :(得分:2)

我知道这是一个迟到的帖子,但对于将来有相同问题的人来说,这更像是一个参考。

Here是Android 7.0(Nougat)中每个内置权限的列表。但是, 可以创建自己的权限,因此该列表不包含所有权限。

希望有所帮助:)