2014-01-13 142 views
28

使用adb,我如何才能找出Android应用程序需要哪些权限?通过adb列出Android应用程序的权限

因为我想在不同的设备上显示多个应用程序的权限,所以在Google PlaySettings>Applications manager中查看它们需要太多的手动工作。

回答

45

我只是想杰森和了Juuso的回答组合在一起,并注意到这是授予,而那名后者列出的权限要求(包括授予的那些)前列表的权限。

只要查看被授予(已请求但未授予但省略的)权限使用

adb shell dumpsys package packagename 

,并在输出的底部检查grantedPermissions部分。

要列出所有权限(请求但未授予+请求和授予的):​​

  1. 通知包的APK。您可以运行相同的命令

    adb shell dumpsys package packagename 
    

    并从其输出的codePath元素获取APK路径。

  2. (如果您的设备/仿真器上没有aapt)您需要从设备/仿真器中取出apk,如Juuso Ohtonen在他的回答中指出的那样。所以从你的桌面执行这样的事情:包的

    adb pull /data/app/com.your.package.apk 
    
  3. 列出所有权限

    如果从设备丢失/仿真器aapt可以build-tools/<version>/下在你的Android SDK中。

    然后执行

    aapt d permissions /path/to/com.your.package.apk 
    
+0

说,我注意到“adb shell dumpsys package”命令显示了许多关于应用程序的信息。它是否也可以显示应用程序正式使用的所有文件夹,例如外部存储设备(位于设备上的“/ storage/emulated/0/Android/data/PACKAGE_NAME”上)? –

13
  1. 名单与他们的安装路径(即使用-3标志,如果你只是对第三方应用程序感兴趣)一起的所有应用程序。例如,让我们试着找出YouTube应用的权限。
    adb shell pm list packages -f

    输出:

    ...
    包:/data/app/com.google.android.youtube-1.apk=com.google.android.youtube
    ...

  2. 从装置拉出所选APK:
    adb pull /data/app/com.google.android.youtube-1.apk

  3. 列表与权限
    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 
    ... 

...

+0

尼斯的答案,但你为什么需要第2步?没有它,它工作得很好。 –

+0

@DenisKniazhev'aapt'工具没有在adb外壳中提供 –

+0

@coco_您说得对,我一定是在预先安装了'aapt'的情况下使用了一个仿真器。 –

9

快速的方法: 亚行外壳dumpsys包包名称| grep的许可

+0

这只会列出已授予的权限,请参阅我的回答下方的 –

+0

它是否只包含在其中包含单词“pemission”的权限? –