Android Studio Java11项目为何提示使用Java8版lifecycle库
问题场景
在Android Studio中配置Java 11版本的项目时,会收到建议使用Java 8相关Lifecycle依赖库的提示,相关信息如下:
现有配置
build.gradle中的Java版本配置:
compileOptions { sourceCompatibility JavaVersion.VERSION_11 targetCompatibility JavaVersion.VERSION_11 } kotlinOptions { jvmTarget = '11' }
项目引入的Lifecycle系列依赖:
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycleVersion" implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycleVersion" kapt "androidx.lifecycle:lifecycle-compiler:$lifecycleVersion"
其中kapt "androidx.lifecycle:lifecycle-compiler:$lifecycleVersion"行触发黄色警告,警告内容为:
Use the lifecycle Java 8 API provided by the 'lifecycle-common-java8' library instead of Lifecycle annotations for faster incremental build.
(译文:请使用'lifecycle-common-java8'库提供的Lifecycle Java 8 API替代Lifecycle注解,以获得更快的增量构建速度。)
已完成排查
- 已确认Android Studio偏好设置-Build Tools下的Gradle JDK版本为11
- 已在build.gradle文件中手动将Java版本配置从1.8修改为11
- 新建空白演示项目测试仍出现相同提示,排除单项目特殊配置问题
- 已执行Invalidate caches and restart(清除缓存并重启)操作,问题未解决
- 当前使用的是最新稳定版Android Studio
将依赖替换为如下代码后提示不再出现:
kapt "androidx.lifecycle:lifecycle-common-java8:$lifecycleVersion"
核心疑问:为什么Java 11版本的项目,需要使用名称中标注Java 8的相关依赖?
原因说明
这个依赖名里的「Java 8」和你项目配置的Java 11版本完全不冲突,它的命名逻辑是指代该依赖基于Java 8版本首次加入的语言特性实现,不是要求你把项目降级到Java 8运行:
- 旧版
lifecycle-compiler是Java 8普及前的适配方案:靠注解处理器在编译期扫描@OnLifecycleEvent注解生成辅助绑定代码,增量编译速度慢,额外生成的代码也会带来少量运行时开销。 - Java 8版本首次加入了接口默认方法特性,Lifecycle组件基于该特性推出了
DefaultLifecycleObserver实现,也就是lifecycle-common-java8提供的API:不需要注解处理器生成额外代码,直接靠接口默认方法就能完成生命周期事件绑定,增量编译速度快很多,运行时也没有额外生成代码的开销。 - Java本身是向后兼容的,高版本JDK可以完美运行基于低版本Java特性编写的代码,你在Java 11配置下使用这个库不仅没有兼容性问题,反而属于官方推荐的适配方案。Android Studio弹出这个提示的触发条件是项目配置的Java版本大于等于1.8,和你当前用Java 11还是更高的Java 17没有冲突,只是引导你替换效率更高的实现而已。
内容的提问来源于stack exchange,提问作者Ishika Singh
相关产品推荐
相关产品推荐

