当前的 JDK 版本 1.8 有一个 bug 会阻止 Room 增量
Posted
技术标签:
【中文标题】当前的 JDK 版本 1.8 有一个 bug 会阻止 Room 增量【英文标题】:Current JDK version 1.8 has a bug that prevents Room from being incremental 【发布时间】:2020-03-08 09:22:32 【问题描述】:我们正在尝试改进我们的多模块 android 应用的构建时间,并且我们已经达到了尝试启用增量 KAPT 注释处理编译的地步。
Android Studio 版本: v3.5.2 房间版: v2.2.1 Gradle 版本: v5.4.6 Android Gradle 插件版本: v3.5.2 Kotlin 版本: v1.3.50gradle.properties:
org.gradle.daemon=true
org.gradle.caching=true
org.gradle.parallel=true
kapt.incremental.apt=true
kapt.use.worker.api=true
kapt.include.compile.classpath=false
android.databinding.incremental=true
build.gradle(在每个使用 Room 的模块内):
kapt
arguments
arg("room.incremental", "true")
但是,在尝试使用 gradlew assemble -scan
命令对构建时间进行基准测试时,Gradle 会引发以下错误:
warning: Current JDK version 1.8.0_201-b09 has a bug (https://bugs.openjdk.java.net/browse/JDK-8007720) that prevents Room from being incremental. Consider using JDK 11+ or the embedded JDK shipped with Android Studio 3.5+.
ANTLR Tool version 4.5.3 used for code generation does not match the current runtime version 4.7.1
[WARN] Incremental annotation processing requested, but support is disabled because the following processors are not incremental: androidx.room.RoomProcessor (DYNAMIC).
我尝试在“项目结构”窗口中将 Open JDK 11 设置为项目的默认 JDK,但它不起作用,它抱怨它不是 JDK 8。任何想法这个设置有什么问题?
【问题讨论】:
您是否尝试过使用嵌入Android Studio的JDK? 如果您从命令行运行gradlew assemble -scan
,请确保您的 JAVA_HOME
环境变量也指向您在 Android Studio 中设置的同一个 JDK11。
@EpicPandaForce 是的,同样的问题。 Dany,我什至无法在 AS 中设置 JDK 11,它不允许我在 Project Structure 窗口中选择 JDK 11 文件夹位置。
【参考方案1】:
您需要使用嵌入 AS 的 JDK 来解决这个问题。确保使用上面的 AS 3.5。 关于项目结构 -> SDK 位置 确保 jdk 指向 AS 附带的 jdk。 /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home 然后你需要重启你的 AS。
如果您从终端运行,请确保 $JAVA_HOME 包含正确的路径。
我猜 Android Studio 还不支持 JDK 11。我还尝试使用最新的 JDK 8(231,其中 AS 3.5 使用 202)但它导致了这个问题。
【讨论】:
我已经在使用嵌入式 SDK,但那是 Java 8。所以它没有帮助。 我认为是你的1.8.0_201-b0
,它不应该是 beta 版本,我的是 202
所以我不明白,你是不是遇到了我在问题中提到的错误?
是的,我在使用从 oracle web 下载的 JDK 231 时遇到了这个问题。然后可以通过从 android studio 切换回 JDK 来解决这个问题。您是从终端运行它还是在 Android Studio 上按播放?我的看起来像这样 JetBrains s.r.o OpenJDK Runtime Environment 1.8.0_202-release-1483-b49-5587405
查看 ***.com/questions/47728646/… 了解嵌入式 JDK 路径。 (C:\Program Files\Android\Android Studio\jre)【参考方案2】:
编译时,它向我显示了一个警告:
当前 JDK 版本有一个错误 (https://bugs.openjdk.java.net/browse/JDK-8007720) 阻止 Room 增量。考虑使用 JDK 11+ 或 Android Studio 3.5+ 附带的嵌入式 JDK。注意:1 使用:[][WARN] 编写了 GeneratedAppGlideModule 请求增量注释处理,但由于以下处理器不是增量的,因此禁用了支持:androidx.room .RoomProcessor(动态)。
然后我从 Oracle 站点下载了 JDK 8 (8u261)(它需要注册,因此请寻找直接链接)。
安装它,将JAVA_HOME
系统变量更改为新路径:
然后重新编译应用程序。甚至不需要重新启动。
更新
一个月后,我再次看到同样的警告。然后阅读接受的答案和found嵌入Android Studio的Java:C:\Program Files\Android\Android Studio\jre
。
File > Project Structure...
,然后是SDK Location
,然后在字段JDK location
中写入了该路径。重启了AS。
【讨论】:
嗯,我也遇到了这个错误,我不知道如何解决。路径和你的一样***.com/q/67408778/11110509 @DIRTYDAVE,是的,JRE 路径有效。我不记得为什么我又改用 JDK 了。可能出现了一些小的编译问题。但是你当然可以保留 JRE 路径。 路径应该包含在上面的答案中。 @Lance,对不起,什么路径?您可以根据需要编辑任何答案。 @CoolMind - 您在回答中提到的路径应该在接受的答案中提及。【参考方案3】:转到项目结构 > SDK 位置,然后转到 Gradle 设置。
【讨论】:
【参考方案4】:使用房间2.2.5
而不是2.2.6
kapt "androidx.room:room-compiler:2.2.5"
implementation "androidx.room:room-runtime:2.2.5"
implementation "androidx.room:room-ktx:2.2.5"
【讨论】:
【参考方案5】:为我的 shell 设置 $JAVA_HOME
到 /Applications/AndroidStudio.app/Contents/jre/jdk/Contents/Home
对我有帮助。
【讨论】:
以上是关于当前的 JDK 版本 1.8 有一个 bug 会阻止 Room 增量的主要内容,如果未能解决你的问题,请参考以下文章
JDK1.7&1.8源码对比分析集合ConcurrentHashMap
Linux 中的 JDK 1.7/1.8 中缺少 JavaFX?
VSTS - Xamarin Proguard 版本和 JDK 1.8 的问题
Spark BUG实践(包含的BUG:ClassCastException;ConnectException;NoClassDefFoundError;RuntimeExceptio等。。。。)