通过 adb 列出 Android 应用程序的权限

Posted

技术标签:

【中文标题】通过 adb 列出 Android 应用程序的权限【英文标题】:Listing permissions of Android application via adb 【发布时间】:2014-02-01 04:23:40 【问题描述】:

使用 adb,我如何知道 android 应用程序需要哪些权限?

因为我想在不同的设备上显示多个应用的​​权限,在Google Play或者Settings中查看>Applications manager需要太多的手动操作。

【问题讨论】:

【参考方案1】:

我只是想将 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 package”命令显示了关于应用程序的多种信息。它还可以显示应用程序正式使用的所有文件夹,例如外部存储(在我的设备上的“/storage/emulated/0/Android/data/PACKAGE_NAME”上)? Grep 高亮是你的朋友adb shell dumpsys package com.example | grep --color -E "granted=true|$"【参考方案2】:

    列出所有应用程序及其安装路径(如果您只对第 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
    ...

...

【讨论】:

不错的答案,但为什么需要第 2 步?没有它也能正常工作。 @DenisKniazhev aapt 工具未在 adb shell 中提供 @coco_ 你说得对,我一定是在使用预装了aapt的模拟器。【参考方案3】:

快速方法: adb shell dumpsys 包包名 | grep 权限

【讨论】:

这只会列出已授予的权限,请参阅下面的答案 不就是只包含带有“pemission”字样的权限吗? 在 Windows 机器上使用:adb shell "dumpsys package packagename | grep permission"

以上是关于通过 adb 列出 Android 应用程序的权限的主要内容,如果未能解决你的问题,请参考以下文章

来自 dumpsys 中列出的显示的 adb screenrecord 辅助显示

Android 逆向Android 权限 ( adb 降权相关的属性 | ro.secure 属性 | ro.debuggable 属性 | service.adb.root 属性 )(代

Android 逆向Android 权限 ( adb 降权相关的属性 | ro.secure 属性 | ro.debuggable 属性 | service.adb.root 属性 )(代

android如何通过adb shell 模拟home键盘切换应用?

adb 运行原理简析

android如何通过adb命令获取手机的IMEI