使用adb,如何找出Android应用程序需要哪些权限?
因为我要显示多个应用程序在不同设备上的权限,所以在
Google Play
或 Settings
> Applications manager
中查看需要太多的手动工作。
我只是想将Jason和Juuso的答案结合在一起,并注意到前者列出了授予的权限,而后者列出了请求的权限(包括已授予的权限)。
要查看仅授予的权限(但忽略已请求但未授予的权限)使用
adb shell dumpsys package packagename
并检查输出底部的
grantedPermissions
部分。
列出所有权限(请求但未授予+请求并授予):
注意软件包的APK。您可以运行相同的命令
adb shell dumpsys package packagename
并从其输出的
codePath
元素获取 APK 路径。
(如果您的设备/模拟器上没有
aapt
)您需要从设备/模拟器中提取 apk,正如 Juuso Ohtonen 在他的回答中指出的那样。因此,从您的桌面执行类似的操作:
adb pull /data/app/com.your.package.apk
列出包的所有权限
如果设备/模拟器中缺少
aapt
,可以在 Android SDK 中的 build-tools/<version>/
下找到。
然后执行
aapt d permissions /path/to/com.your.package.apk
快速方法: adb shell dumpsys 包 包名 | grep 权限
列出所有应用程序及其安装路径(如果您只对第 3 方应用程序感兴趣,请使用
-3
标志)。作为示例,我们尝试找出 YouTube 应用权限。 adb shell pm list packages -f
...
包:/data/app/com.google.android.youtube-1.apk=com.google.android.youtube
...
从设备中拉取所选的 apk:
adb pull /data/app/com.google.android.youtube-1.apk
使用
列出权限
aapt d permissions com.google.android.youtube-1.apk
输出:
uses-permission: android.permission.BROADCAST_STICKY
uses-permission: android.permission.CALL_PHONE
uses-permission: android.permission.CALL_PRIVILEGED
uses-permission: android.permission.WRITE_SETTINGS
uses-permission: android.permission.WRITE_SECURE_SETTINGS
uses-permission: android.permission.READ_CONTACTS
uses-permission: android.permission.READ_CALL_LOG
uses-permission: android.permission.WRITE_CONTACTS
uses-permission: android.permission.WRITE_CALL_LOG
uses-permission: android.permission.SYSTEM_ALERT_WINDOW
uses-permission: android.permission.INTERNAL_SYSTEM_WINDOW
uses-permission: android.permission.ADD_SYSTEM_SERVICE
uses-permission: android.permission.VIBRATE
uses-permission: android.permission.BLUETOOTH
uses-permission: android.permission.BLUETOOTH_ADMIN
uses-permission: android.permission.REORDER_TASKS
uses-permission: android.permission.CHANGE_CONFIGURATION
...
...
dumpsys
不会给您所有权限。获取所有默认 Android 权限的一种方法是使用 dumpsys
i.c.w。 appops
。有不同类型的权限;例如,一个接受 allow
、deny
、ignore
、default
,另一个接受 false
和 true
。 aapt
并非在所有系统上都可用(虽然我非常喜欢它),所以我敦促大家使用ADB
,因为它是跨平台的。
一个简短的答案,无需详细说明即可获得所有权限:
adb shell pm list permissions
列出了附带的权限
已安装的应用程序(false
或 true
)adb shell cmd appops get <package>
列出权限
每个应用程序的用户级别 (allow
、deny
、ignore
)adb shell dumpsys <package>
列出系统上每个应用程序的权限
级别(grant
和 revoke
)