如何在没有root的情况下使用adb授予权限?

Ste*_*ano 3 android adb android-permissions

背景

我正在尝试创建一个可以授予和撤消其他应用程序权限的应用程序。
为此,我使用adb命令:

pm grant packageName permissionName
Run Code Online (Sandbox Code Playgroud)

如果我通过具有root权限的shell调用它,则效果很好。

问题

问题是,当我在没有root权限的情况下调用此命令时,会收到

不允许的操作:java.lang.SecurityException:grantRuntimePermission:用户2000或当前进程都没有android.permission.GRANT_RUNTIME_PERMISSIONS

这是可以预料的(否则将是一个大问题)。

是否可以允许我的应用通过Android设置管理其他应用的权限?
我正在寻找类似向应用程序授予USAGE_STATS权限的权限,这些应用程序进入设置->安全性->“具有使用权限的应用程序”,但针对GRANT_RUNTIME_PERMISSIONS(和REVOKE_RUNTIME_PERMISSIONS)。

Eli*_*iss 20

在 中Developer Options,向下滚动(一直)直到找​​到Disable Permission Monitoring

并打开它。

现在pm命令应该可以工作

我注意到他们将其更改为: USB debugging (Security setting'

和位置上移

它需要一个sim

  • @dbdq 我的 OnePlus 9 也遇到了同样的问题,但通过重新启动设备,然后杀死 adb (`adb Kill-server`),然后返回到 `adb shell` - `pm grant` 命令起作用,让它正常工作此后没有任何问题。 (12认同)
  • 完美的解决方案。我在 Android 10 中遇到此错误。此设置按预期工作。谢谢 (4认同)
  • 它无法在 Android 12(OnePlus 9)上运行,仍然给出相同的错误。 (4认同)
  • 不适用于最新的手机 (3认同)

小智 14

小米用户可能需要在开发者选项中启用一项设置。它称为“USB 调试(安全设置)”,副标题为“允许通过 USB 调试授予权限并模拟输入”


小智 12

对于使用 MIUI 的用户:

我使用的是 MIUI 12.0.5 稳定版。在这个版本中 - 要运行任何授予权限的命令,我们必须首先从开发人员选项中启用“USB 调试”和“USB 调试(安全设置)”,只有之后我们才能通过 adb 执行权限命令,如下所示一:

adb shell pm grant com.ivianuu.immersivemodemanager android.permission.WRITE_SECURE_SETTINGS
Run Code Online (Sandbox Code Playgroud)


小智 11

@ elia -weiss 的答案几乎对我有用。我还必须确保我授予的应用程序已停止。我刚刚在应用程序信息中使用了强制停止。

  • 需要强制关闭应用程序为我解决了这个问题 (6认同)

小智 10

我试图将BBS安装到我的Redmi Note 4 MIUI 10.1(不确定细节是否相关)。有同样的错误。然后我在开发人员选项的“ USB调试”主菜单下三行找到了一个菜单项。它被称为

USB调试(安全设置)

允许授予权限并通过USB调试模拟输入

尝试启用此选项会提示三个警告窗口,其中包含有关继续操作可能发生的可怕事情的信息。上次确认后(不确定电话是否已连接或我已连接电话),我跑了

adb -d shell pm grant packageName android.permission.BATTERY_STATS
Run Code Online (Sandbox Code Playgroud)

但现在成功了。


Har*_*ald 7

Elia Weiss 提供的解决方案对我有用。(不幸的是我没有足够的声誉来投票和评论)

打开“开发者选项”/“禁用权限监控”(在本节末尾)

这可能会有所不同,具体取决于 Android 版本和/或操作系统变体。

就我而言,它是 realme X2 全局变体上的 ColorOS 6.1 / Android 9。(确切地说:操作系统版本RMX1993EX_11_A15)


Fir*_*ald 7

要授予应用程序权限,您基本上需要:

\n
    \n
  1. 启用Developer Options->USB debugging
  2. \n
  3. 启用Developer Options-> Disable Permission Monitoring(这不是在第一个选项旁边,而是在“应用程序”区域中一直向下)
  4. \n
  5. 重新启动您的设备,解锁(PIN 码),将其连接到电脑
  6. \n
  7. 选择文件传输模式
  8. \n
  9. 检查您的设备是否被以下设备识别adb
  10. \n
\n
PS C:\\adb-tools> ./adb devices\n* daemon not running; starting now at tcp:5037\n* daemon started successfully\nList of devices attached\n93c53934        device\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  1. 强制停止应用程序授予权限,然后授予权限:
  2. \n
\n
PS D:\\adb-tools> ./adb shell\nOnePlus8Pro:/ $ am force-stop com.conena.logcat.reader\nOnePlus8Pro:/ $ pm grant com.conena.logcat.reader android.permission.READ_LOGS\n
Run Code Online (Sandbox Code Playgroud)\n

附加提示:

\n
    \n
  • 在德语中,(2) 选项称为“Erlaubnis\xc3\xbcberwachung deaktivieren”,区域是“APPS”(参见此视频
  • \n
  • 该指南在 OnePlus 8 Pro、Android 12 上进行了测试
  • \n
\n


Vik*_*ngh 1

你不能这样做。这是直接的安全漏洞,谷歌当然不会允许你这样做。

您无法通过您的应用程序或仅使用 adb 命令来控制其他应用程序的权限。