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

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

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

【问题讨论】:

    标签: android permissions adb android-permissions aapt


    【解决方案1】:

    我只是想将 Jason 和 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,可以在您的 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】:
    1. 列出所有应用程序及其安装路径(如果您只对第 3 方应用程序感兴趣,请使用 -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

    4. 列出权限

    输出:

        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"
    猜你喜欢
    • 2018-03-21
    • 2015-07-31
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-30
    • 1970-01-01
    • 2012-07-10
    相关资源
    最近更新 更多