我的代码中有几个地方,在调用需要权限的函数之前没有正确检查权限状态。结果是,我的用户遇到未经保护的函数调用时,我会得到随机的SecurityException报告。
这段代码最初是在Android Marshmallow之前编写的,后者引入了按需权限。在迁移时,基本上是按“第一次出现”为基础进行测试,这意味着首先确定所需权限的第一次出现,并在该位置包装适当的“请求/检查权限”代码。
但是,一旦通过了这一点,用户可能会决定撤销已经授予的权限,我的应用程序将不会遇到第一次出现的代码路径。相反,将运行“已经激活”的代码路径,导致安全异常,因为相关权限不再被授予。
显然,我正在努力找到受影响的代码段,因此尝试(再次)通过使用lint来确定需要权限的函数。 SO上有一些帖子处理此问题。
但是,我无法成功设置lint工具以确定调用需要权限的代码行。我只能获得一个已识别的行,其中我被警告应该将调用包装在checkPermission中,或明确捕获SecurityException。
这当然是不充分的,因为我知道我的应用程序需要7个不同的权限,我很确定涉及到的函数也在那里(因为我不得不包装其中一些)。
总之,我猜这需要设置一些东西。目前,除了颜色设置和代码格式设置外,我几乎使用原始的Android Studio 3.0.1,没有触及任何代码检查。
在使用所有我的Google-fu和SO-fu尝试了两天来设置lint工具后,我放弃了撰写这个问题。是的,我已经从清单中删除了权限。
如果可能,请给我提供一个步骤指南,让Lint成功地识别需要权限的函数。同时我还使用了库和flavors。
这段代码最初是在Android Marshmallow之前编写的,后者引入了按需权限。在迁移时,基本上是按“第一次出现”为基础进行测试,这意味着首先确定所需权限的第一次出现,并在该位置包装适当的“请求/检查权限”代码。
但是,一旦通过了这一点,用户可能会决定撤销已经授予的权限,我的应用程序将不会遇到第一次出现的代码路径。相反,将运行“已经激活”的代码路径,导致安全异常,因为相关权限不再被授予。
显然,我正在努力找到受影响的代码段,因此尝试(再次)通过使用lint来确定需要权限的函数。 SO上有一些帖子处理此问题。
但是,我无法成功设置lint工具以确定调用需要权限的代码行。我只能获得一个已识别的行,其中我被警告应该将调用包装在checkPermission中,或明确捕获SecurityException。
这当然是不充分的,因为我知道我的应用程序需要7个不同的权限,我很确定涉及到的函数也在那里(因为我不得不包装其中一些)。
总之,我猜这需要设置一些东西。目前,除了颜色设置和代码格式设置外,我几乎使用原始的Android Studio 3.0.1,没有触及任何代码检查。
在使用所有我的Google-fu和SO-fu尝试了两天来设置lint工具后,我放弃了撰写这个问题。是的,我已经从清单中删除了权限。
如果可能,请给我提供一个步骤指南,让Lint成功地识别需要权限的函数。同时我还使用了库和flavors。
WRITE_SETTINGS
和SYSTEM_ALERT_WINDOW
在第一场合就是奇怪的权限(没有使用标准的运行时权限系统)。 - CommonsWare