【问题标题】:Different inspection behavior between two IDEA projects两个 IDEA 项目之间的不同检查行为
【发布时间】:2017-03-15 18:14:49
【问题描述】:

我在几天前在 IDEA 2016.3.3 中创建的项目中遇到了一个奇怪的检查问题,当我遇到此问题时,我将其升级到 2016.3.5。即使在使缓存无效并重新启动后,问题仍然存在于旧项目中。我无法在 2016.3.5 创建的新项目中重现它。

两个项目具有相同的minSdkVersiontargetSdkVersioncompileSdkVersionbuildToolsVersion还有什么可能导致检查行为出现这种差异?

我在两个项目中创建了一个相同的类:

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_LOCATIONGET_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


    【解决方案1】:

    真实项目与我在示例项目中重现该问题的尝试之间的区别在于清单。 危险权限的检查行为会发生变化,但仅限于清单中列出的情况。警告信息发生变化,@RequiresPermission 不再级联。

    我原本以为这是Android Studio bug 177281 的回归,但这个问题更普遍。没有级联危险权限可能是故意的,但我已将其报告为错误,因为 the process is killed 如果用户从正在运行的应用程序撤消权限。

    【讨论】:

      猜你喜欢
      • 2019-10-02
      • 2017-06-06
      • 2021-08-15
      • 1970-01-01
      • 2021-09-09
      • 1970-01-01
      • 1970-01-01
      • 2018-05-29
      • 2022-01-06
      相关资源
      最近更新 更多