如何使用 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?的主要内容,如果未能解决你的问题,请参考以下文章

adb如何使用

如何正确安装ADB工具

手机不开机怎么用电脑adb命令

如何启动adb shell命令

如何使 ADB 无线在 Android 11 中工作?

adb错误“'adb' 不是内部或外部命令,也不是可运行的程序或批处理文件。