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

29

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

发现:

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

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


任何有兴趣使用Shell脚本的人都可以参考https://gist.github.com/nitiwari-dev/90df91e3eb21864ca711b271e071b77b。 - Nitesh Tiwari
从API 33开始,您可以编程方式撤销权限:https://dev59.com/z1wZ5IYBdhLWcg3wYfVu#73781518。这是一个有用的函数,可添加到内部调试/预热屏幕/活动中。 - Oliver Metz
1个回答

47

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

adb shell pm reset-permissions
注意:目前无法重置特定包的运行时权限,包管理器(pm)工具帮助部分说明如下:

将所有运行时权限还原为默认状态。

您可以使用Android Studio中的终端界面轻松执行reset-permissions命令。请注意,只有当ADB目录添加到PATH系统环境变量中时,ADB命令才能正常工作(参见:将ADB添加到路径变量)。您也可以使用以下命令重置/撤销特定权限:

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

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


1
这根本不是“缺点” - 这就是事物设计的方式!如果更改了应用程序的权限(通常通过设置UI完成),则应用程序将被重新启动(以便它有机会检查更改后的权限)。 - zmarties
没错!但与其他命令相比,这也是一个缺点。因为该命令不会重新启动应用程序。 - Rolf ツ
2
重置权限不会杀死应用程序这一事实被提出作为一个错误 - https://code.google.com/p/android/issues/detail?id=195087 - zmarties
1
这个错误报告并不是关于ADB命令的,因此我们无法确定它是否是预期行为(对于该命令)还是不是。 - Rolf ツ
3
如何重置特定应用程序的权限? - nicael
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接