如何调试/重置 Android 6.0 权限?

Posted

技术标签:

【中文标题】如何调试/重置 Android 6.0 权限?【英文标题】:How to debug/reset Android 6.0 permissions? 【发布时间】:2016-04-03 10:41:36 【问题描述】:

在迁移我的一个应用程序以使用 android 6.0 权限系统时,我发现使用模拟器调试权限非常困难。

调查结果:

在使用requestPermissions() 方法时,在应用信息屏幕中禁用权限不会重新显示授予权限对话框。 重新安装应用似乎是使应用再次显示授予权限对话框的唯一方法。

使用 Android 模拟器调试权限的正确方法是什么?

【问题讨论】:

有兴趣使用shell脚本的可以参考gist.github.com/nitiwari-dev/90df91e3eb21864ca711b271e071b77b 【参考方案1】:

实际上调试 Android 6.0 权限非常容易。您可以使用以下 ADB shell 命令将 当前前台应用 所有应用的权限重置为“安装状态”:

adb shell pm reset-permissions

注意:目前您无法重置特定包的运行时权限,包管理器 (pm) 工具帮助部分指出:

将所有运行时权限恢复为默认状态。

您可以使用 Android Studio 中的终端界面轻松执行reset-permissions 命令。请注意,ADB 命令仅在将 ADB 目录添加到 PATH 系统环境变量时才有效(请参阅:add ADB to path variable)。

您还可以使用以下方法重置/撤销特定权限:

adb shell pm revoke com.your.package android.permission.WRITE_EXTERNAL_STORAGE

此命令的一个缺点是它会重新启动您的应用程序,但这不会重置所有应用程序的运行时权限。要授予权限,请将 revoke 替换为 grant

【讨论】:

这算不上“缺点”——这就是设计工作的方式!如果应用程序的权限发生更改,通常通过设置 UI 完成,则应用程序将重新启动(以便它有机会检查更改的权限) 真的!但与提到的其他命令相比,这是一个缺点。因为该命令不会重新启动应用程序。 reset-permissions 不会杀死应用程序这一事实被作为一个错误提出 - code.google.com/p/android/issues/detail?id=195087 该错误报告与 ADB 命令无关,因此我们无法确定它是否是预期的行为(对于命令)。 如何重置特定应用的权限?

以上是关于如何调试/重置 Android 6.0 权限?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Appium 自动接受警报 -- 权限 Android 6.0

如何通过 Wi-Fi 调试 Android 6.0? (netcfg 问题)

使用android studio运行应用程序时如何启用android 6.0中的所有权限

如何以编程方式打开 Android 6.0 (Marshmallow) 上特定应用的权限屏幕?

在Android 6.0 设备上动态获取权限

聊一聊 Android 6.0 的运行时权限