【发布时间】:2017-03-15 18:14:49
【问题描述】:
我在几天前在 IDEA 2016.3.3 中创建的项目中遇到了一个奇怪的检查问题,当我遇到此问题时,我将其升级到 2016.3.5。即使在使缓存无效并重新启动后,问题仍然存在于旧项目中。我无法在 2016.3.5 创建的新项目中重现它。
两个项目具有相同的minSdkVersion、targetSdkVersion、compileSdkVersion 和buildToolsVersion。 还有什么可能导致检查行为出现这种差异?
我在两个项目中创建了一个相同的类:
public class PermissionWeirdness {
public void foo() {
bar();
baz();
}
@RequiresPermission(Manifest.permission.ACCESS_FINE_LOCATION)
private void bar() {}
@RequiresPermission(Manifest.permission.GET_ACCOUNTS)
private void baz() {}
}
-
ACCESS_FINE_LOCATION和GET_ACCOUNTS都被归类为“危险”权限。 - 在这两个项目中,正如预期的那样,在调用
bar()和baz()时,foo()中会出现警告。 - 在较新的项目中,两个警告具有相同的形式:
缺少 PermissionWeirdness.bar 所需的权限:android.permission.ACCESS_FINE_LOCATION
- 在旧项目中,与
ACCESS_FINE_LOCATION相关的警告具有完全不同的消息。工具提示文本中有文字反引号,在此处被解释为代码标记:调用需要可能被用户拒绝的权限:代码应明确检查权限是否可用(使用
checkPermission)或明确处理潜在的SecurityException - 在这两个项目中,可以通过将适当的
@RequiresPermission注释添加到foo()来消除采用较短形式的警告。 - 在旧项目中,神秘的较长警告无法以这种方式消除。
【问题讨论】:
标签: android intellij-idea android-permissions code-inspection