Android Studio 3.0中的lint未能找到缺失权限

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

2
我怀疑只有 Android SDK 的一小部分具有必要的信息,可以向 IDE 报告它是否需要某个权限。 - CommonsWare
所以基本上,我只需要非常彻底地检查我的代码库?有一些权限永远无法被识别吗?例如:WRITE_SETTINGS,SYSTEM_ALERT_WINDOW,GET_TASKS,PACKAGE_USAGE_STATS - 这些根本没有被报告。我的意思是 - 其中一些很容易识别,而另一些则不那么容易... - velis
2
“有一些权限永远不会被识别?”——基本上是这样的。请注意,WRITE_SETTINGSSYSTEM_ALERT_WINDOW在第一场合就是奇怪的权限(没有使用标准的运行时权限系统)。 - CommonsWare
是的,我的应用程序是一个自动亮度应用程序。相当冷门,而且肯定已经被Android 9淘汰了(禁止后台运行服务),但现在它仍然是我“学习Android”的项目,我喜欢尝试调整它。在我失去它可以运行的设备之前,我想再为其功能做一次尝试。 - velis
1个回答

2
我知道这是一个老问题,但我有一种方法可以确定缺少权限检查的位置。
  1. 在Android Studio的“项目”选项卡中,使用“项目”视图
  2. 右键单击包含所有Java代码的文件夹

right click

  1. 转到 Analyze > Inspect Code
  2. 会弹出一个指定检查范围对话框,在这里你可以选择AS将检查缺失权限的目录。在本例中,由于我们之前选择了文件夹,所以默认的范围将是我们之前的文件夹。点击OK
  3. AS将开始搜索代码中的错误、警告等,根据项目的大小,AS需要扫描的时间也不同。
  4. 完成后,您可以看到一个错误、警告等的列表,您需要转到Android Lint: Correctness > Missing Permissions

result

这是找到项目中所有缺失权限错误的简单方法。希望对您有用。

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