背景
我正在尝试创建一个可以授予和撤销其他应用程序权限的应用程序。
为此,我使用了 adb 命令:
pm grant packageName permissionName
如果我通过具有 root 权限的 shell 调用它,这会很好用。
问题
问题是当我在没有root权限的情况下调用这个命令时,我收到了
Operation not allowed: java.lang.SecurityException: grantRuntimePermission: 用户 2000 和当前进程都没有 android.permission.GRANT_RUNTIME_PERMISSIONS
这是可以预料的(否则这将是一个大问题)。
问题
是否可以让我的应用程序通过 Android 设置管理其他应用程序的权限?
我正在寻找类似授予 USAGE_STATS 权限的应用程序进入设置 - >安全 - >“具有使用权限的应用程序”,但对于 GRANT_RUNTIME_PERMISSIONS(和 REVOKE_RUNTIME_PERMISSIONS)。
在
Developer Options
中,向下滚动(一直)直到找到Disable Permission Monitoring
并打开它。
现在
pm
命令应该可以工作了
我注意到他们将其更改为:
USB debugging (Security setting'
位置上移
它需要一个 sim
我试图将 BBS 安装到我的 Redmi Note 4,MIUI 10.1(不确定细节是否相关)。得到同样的错误。然后我在开发人员选项中的“USB 调试”主菜单下方三行找到了一个菜单项。它被称为
USB调试(安全设置)
允许通过USB调试授予权限和模拟输入
尝试启用此选项会提示三个警告窗口,其中包含有关如果继续操作可能发生的可怕事情的信息。最后一次确认后(不确定电话是否已连接或我之后连接)我跑了
adb -d shell pm grant packageName android.permission.BATTERY_STATS
但现在成功了
小米用户可能需要在开发者选项中启用设置。它被称为“USB 调试(安全设置)”,副标题为“允许通过 USB 调试授予权限和模拟输入”
MIUI用户:
我使用的是 MIUI 12.0.5 稳定版。在这个版本中 - 要运行任何授予权限的命令,我们必须首先从开发人员选项中启用“USB 调试”和“USB 调试(安全设置)”,然后我们才能像这样通过 adb 执行权限命令一:
adb shell pm grant com.ivianuu.immersivemodemanager android.permission.WRITE_SECURE_SETTINGS
@elia-weiss here 的回答几乎对我有用。我还必须确保我授予的应用程序已停止。我刚刚在应用程序信息中使用了强制停止。
Elia Weiss 提供的解决方案对我很有效。 (不幸的是,我没有足够的声誉来投票和评论)
打开“开发者选项”/“禁用权限监控”(在本节末尾)
这可能因 Android 版本和/或操作系统变体而异。
就我而言,它是 realme X2 全球变体上的 ColorOS 6.1 / Android 9。 (准确:操作系统版本 RMX1993EX_11_A15)
你不能那样做。这是直接的安全漏洞,谷歌当然不会允许你。
您无法通过您的应用或仅使用 adb 命令控制其他应用的权限。
我通过将 usb 配置更改为“MIDI”来解决此问题,同时打开所有 usb 调试选项。
转到开发人员选项,然后禁用“通过 USB 验证应用程序”