如果我在 android 代码中使用 java.lang.Iterable#forEach,Lint 会给出错误

Nit*_*rma 11 java android lint kotlin android-lint

在我的 android 代码(Kotlin)中,我使用 java iterable 的 forEach 方法。

mandatoryViews.forEach { view ->
   // my code here
}
Run Code Online (Sandbox Code Playgroud)

下面是我在 build.gradle (app) 中的 sdk 配置:

minSdkVersion 23
targetSdkVersion 30
Run Code Online (Sandbox Code Playgroud)

现在我的代码构建得很好。我还尝试在 API 23 像素设备上运行它,一切正常。

但在我运行gradlew lint查看 lint 错误后,它失败并报告给我以下错误: Call requires API level 24 (current min is 23): java.lang.Iterable#forEach

棉绒错误

无法弄清楚为什么 lint 认为它在 API 23 上不起作用,而在 API 23 设备上我的代码运行良好。

laa*_*lto 9

这个问题已在 Android Gradle 插件 4.2 提供的 lint 中得到修复,4.2.1 是目前最新的稳定版本。

更新您的项目级 build.gradle 以具有

classpath 'com.android.tools.build:gradle:4.2.1'
Run Code Online (Sandbox Code Playgroud)

在它的buildscript.dependencies块中。

  • 此问题链接表明该问题甚至从 AGP 7.0.2 起也没有得到解决。然而,值得注意的是,用“mandatoryViews.iterator().forEach”替换“mandatoryViews.forEach”确实解决了这个问题。根本原因是 Kotlin `Iterable.forEach` 扩展函数和 Java8 `forEach` 函数之间的混淆。 (12认同)
  • 即使使用 AGP 7.0.4,我也再次遇到这个问题,解决方案似乎更多的是“匹配”kotlin 和 AGP 版本,而不是特定版本的 AGP 作为解决方案。 (6认同)