如何使用 adb grant 或 adb revoke?
Posted
技术标签:
【中文标题】如何使用 adb grant 或 adb revoke?【英文标题】:How do I use adb grant or adb revoke? 【发布时间】:2013-04-30 21:11:00 【问题描述】:android 文档包含以下对 adb grant 和 adb revoke 命令的描述。
grant <PACKAGE_PERMISSION>
授予应用程序权限。只能授予应用程序声明的可选权限。
revoke <PACKAGE_PERMISSION>
撤销对应用程序的权限。只有应用程序声明的可选权限才能被撤销。
谁能举例说明使用它们的正确语法吗?
我认为这将是一个类似android.permission.WRITE_EXTERNAL_STORAGE
的权限,或者可能只是WRITE_EXTERNAL_STORAGE
。好吧,我尝试了这些,还有其他几个,但我无法让它工作。
我还尝试了(无济于事)包和权限的几种组合,这对我来说更有意义(这听起来像一个命令会修改一个包的权限,而不是全部)
【问题讨论】:
【参考方案1】:添加:
adb shell pm grant com.name.app android.permission.READ_PROFILE
删除:
adb shell pm revoke com.name.app android.permission.READ_PROFILE
这在 Android M 版本中发生了变化,因此在 Lollipop 中(在最初撰写答案时)您需要先执行 adb shell
。
adb shell
pm grant com.name.app android.permission.READ_PROFILE
可以在here 找到完整的权限列表。如果您设置了android build tools,您可以查看该应用正在使用哪些权限。第一次使用
adb shell pm list packages -f
然后将包复制到您的计算机:
adb pull /path/to/package/from/previous/step.apk
然后获取权限:
aapt d permissions path/to/app/on/computer.apk
【讨论】:
为什么不能以这种方式授予 PACKAGE_USAGE_STATS?有其他选择吗? 如何在运行时使用这个?【参考方案2】:如果您碰巧不知道权限名称或想清除所有可以使用的权限
adb shell pm reset-permissions
警告:这将重置您手机上所有应用的运行时权限。您无法为特定包重置。
【讨论】:
请小心使用此命令,因为它会重置您的所有系统权限。 pm reset-permissions 是无参数的。它不关心你的.package.name。 在这种情况下重置是什么意思?撤销所有权限?或者将它们设置为应用程序清单想要的任何内容?【参考方案3】:所以这里有一个小命令行 (mac/linux),可以从命令行授予您的应用所需的所有权限。
aapt d permissions ./path/to/your.apk \
| sed -n \
-e "s/'//g" \
-e "/^uses-permission: name=android.permission\./s/^[^=]*=//p" \
| xargs -n 1 adb shell pm grant com.your.package
【讨论】:
注意:粘贴命令后,我发现我需要删除第一个 '\' 字符(紧跟在 apk 文件名之后),以便 sed 命令正确运行。以上是关于如何使用 adb grant 或 adb revoke?的主要内容,如果未能解决你的问题,请参考以下文章