Android问题记录 - Inconsistent JVM-target compatibility detected for tasks
文章目录
- 前言
- 开发环境
- 问题描述
- 问题分析
- 解决方案
- 补充内容
- 最后
前言
前段时间升级Android Studio后修复了一堆问题,详情请看:Android问题记录 - 适配Android Studio Ladybug/Java 21/AGP 8.0(持续更新)。我以为问题已经全部解决了,没想到时隔一个多月,在部署项目到新设备时又出现了新问题。
开发环境
- Flutter: 3.24.5
- Android Studio: 2024.2.1 Patch 3
- Java: 21.0.3
- Gradle: 8.5
- Android Gradle Plugin (AGP): 8.3.2
- Kotlin Gradle Plugin (KGP): 1.7.10
问题描述
项目构建运行后报错,部分报错日志如下:
e: /xxx/.gradle/caches/transforms-3/552b5fda311668ef6542358a30864490/transformed/jetified-kotlin-stdlib-1.9.24.jar!/META-INF/kotlin-stdlib-jdk7.kotlin_module: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.9.0, expected version is 1.7.1.
...FAILURE: Build failed with an exception.* What went wrong:
Execution failed for task ':app:compileDebugKotlin'.
> A failure occurred while executing org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction> Compilation error. See log for more details
...┌─ Flutter Fix ──────────────────────────────────────────────────────────────────────────────────────────┐
│ [!] Your project requires a newer version of the Kotlin Gradle plugin. │
│ Find the latest version on https://kotlinlang.org/docs/releases.html#release-details, then update the │
│ version number of the plugin with id "org.jetbrains.kotlin.android" in the plugins block of │
│ /Users/xxx/android/settings.gradle. │
│ │
│ Alternatively (if your project was created before Flutter 3.19), update │
│ /Users/xxx/android/build.gradle │
│ ext.kotlin_version = '<latest-version>' │
└────────────────────────────────────────────────────────────────────────────────────────────────────────┘
问题分析
因为是Flutter项目,Flutter还贴心的给出了修复方法,升级Kotlin Gradle插件(KGP)。
先不急着升级,有一点很奇怪,在日常开发的电脑上运行是正常的。尝试将日常开发环境下的.gradle打包压缩复制到出问题的电脑,结果还是不行。
只能先试试升级KGP版本,找到Android项目根目录下的settings.gradle修改版本:
plugins {id "org.jetbrains.kotlin.android" version "1.9.24" apply false
}
如果你还在使用老的写法,找到Android项目根目录下的build.gradle修改版本:
buildscript {ext.kotlin_version = '1.9.24'
}
这里补充一点,ext.kotlin_version指定的是Kotlin编译器的版本,不过KGP和Kotlin共享相同的版本号(参考官方文档),所以实际上这个配置同时指定了KGP的版本,反之也是一样。
升级了KGP版本,需要升级Gradle或AGP的版本吗?通常是不需要的。以下是KGP对Gradle和AGP完全支持的最低以及最高版本范围:

参考文档:
- Configure a Gradle project
从表中可以看到,1.9.24的KGP版本完全支持的Gradle版本是6.8.3–8.1.1,完全支持的AGP版本是4.2.2–8.1.0。当前项目的Gradle版本是8.5,AGP版本是8.3.2,这版本是不是都太高了?
是的,确实都高了。不过,这表中列出的是完全支持的版本范围,也就是兼容性最好的版本范围,不在这范围也是可以用的,只不过兼容性可能没那么好。如果需要追求更好的兼容性,将KGP版本升级到当前最新的2.1.0也是可行的,不过不建议,因为第三方库可能还没适配会报错。
升级后重新运行出现新的报错:
Execution failed for task ':xxx:compileDebugKotlin'.
> Inconsistent JVM-target compatibility detected for tasks 'compileDebugJavaWithJavac' (1.8) and 'compileDebugKotlin' (21).
你可能遇到是类似这样的报错:
Execution failed for task ':xxx:compileDebugKotlin'.
> Inconsistent JVM-target compatibility detected for tasks 'compileDebugJavaWithJavac' (1.8) and 'compileDebugKotlin' (17).
报错中的compileDebugJavaWithJavac后面跟的版本是由以下配置决定的,如果未配置默认是1.8:
android {compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8}
}
compileDebugKotlin后面跟的版本是由以下配置决定的,如果未配置会由KGP决定,不同版本的KGP对jvmTarget的默认值不同:
android {kotlinOptions {jvmTarget = "1.8"}
}
报错的依赖库只配置了compileOptions,未配置kotlinOptions,这导致两者的JVM版本不一致出现冲突。那为什么以前没报错呢?我猜测KGP之前的版本对jvmTarget的默认值就是1.8(未找到官方文档),所以KGP升级之前没有JVM版本不一致问题。
该怎么解决呢?尝试在Android项目根目录下的build.gradle中增加以下内容统一设置kotlinOptions:
subprojects {afterEvaluate {tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach { kotlinTask ->kotlinTask.kotlinOptions.jvmTarget = "1.8"}}
}
但这又会导致其他依赖库报错:
Execution failed for task ':xxx:compileDebugKotlin'.
> Inconsistent JVM-target compatibility detected for tasks 'compileDebugJavaWithJavac' (17) and 'compileDebugKotlin' (1.8).
有些依赖库在compileOptions配置中指定了JavaVersion.VERSION_17版本,统一设置kotlinOptions后反而出现了冲突。继续优化一下,只对版本不一致的依赖库统一设置:
subprojects {afterEvaluate { project ->if (project.plugins.hasPlugin("com.android.application") || project.plugins.hasPlugin("com.android.library")) {tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach { kotlinTask ->def sourceCompatibility = project.android.compileOptions.sourceCompatibility?.toString() ?: "1.8"def jvmTarget = kotlinTask.kotlinOptions.jvmTarget ?: ""if (sourceCompatibility != jvmTarget) {kotlinTask.kotlinOptions.jvmTarget = sourceCompatibilityprintln "INFO: Updated jvmTarget for ${project.name} to ${sourceCompatibility}"}}}}
}
重新构建运行,一切正常!
解决方案
Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.9.0, expected version is 1.7.1.
请看前面的问题分析并升级Kotlin Gradle插件(KGP)版本解决。
Inconsistent JVM-target compatibility detected for tasks 'compileDebugJavaWithJavac' (1.8) and 'compileDebugKotlin' (21).
在Android项目根目录下的build.gradle中增加以下内容解决:
subprojects {afterEvaluate { project ->if (project.plugins.hasPlugin("com.android.application") || project.plugins.hasPlugin("com.android.library")) {tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach { kotlinTask ->def sourceCompatibility = project.android.compileOptions.sourceCompatibility?.toString() ?: "1.8"def jvmTarget = kotlinTask.kotlinOptions.jvmTarget ?: ""if (sourceCompatibility != jvmTarget) {kotlinTask.kotlinOptions.jvmTarget = sourceCompatibilityprintln "INFO: Updated jvmTarget for ${project.name} to ${sourceCompatibility}"}}}}
}
补充内容
- 如果是Flutter项目遇到以下报错,通常是因为下载指定的Gradle版本失败导致的。可以尝试用Android Studio单独打开Flutter项目下的Android项目并执行
Gradle Sync解决。
Exception in thread "main" java.til.zip.ZipException: zip END header not foundat java.base/java.util.zip.ZipFile$Source.findEND(Unknown Source)at java.base/java.util.zip.ZipFile$Source.initCEN(Unknown Source)at java.base/java.util.zip.ZipFile$Source.<init>(Unknown Source)at java.base/java.util.zip.ZipFile$Source.get(Unknown Source)at java.base/java.util.zip.ZipFile$CleanableResource.<init>(Unknown Source)at java.base/java.util.zip.ZipFile.<init>(Unknown Source)at java.base/java.util.zip.ZipFile.<init>(Unknown Source)at java.base/java.util.zip.ZipFile.<init>(Unknown Source)at org.gradle.wrapper.Install.unzip(Install.java:214)at org.gradle.wrapper.Install.access$600(Install.java:27)at org.gradle.wrapper.Install$1.call(Install.java:74)at org.gradle.wrapper.Install$1.call(Install.java:48)at org.gradle.wrapper.ExclusiveFileAccessManager.access(ExclusiveFileAccessManager.java:65)...
- 如果是Flutter项目遇到以下报错,可能是因为Gradle版本太低导致的,可以尝试升级Gradle版本解决。
Warning: Flutter was unable to detect project Gradle, Java, AGP, and KGP versions. Skipping dependency version checking. Error was: org.gradle.internal.exceptions.LocationAwareException: Script '/xxx/flutter/packages/flutter_tools/gradle/src/main/kotlin/dependency_version_checker.gradle.kts' line: 1
Failed to load compiled script from classpath [/xxx/.gradle/caches/8.5/kotlin-dsl/scripts/da5f7ca28e610c6354c26e9549dbcb59/classes->/xxx/.gradle/caches/jars-9/fb6235f7ef58bafc318ce2cbd09edaf5/classes.jar, /xxx/.gradle/caches/8.5/kotlin-dsl/accessors/3d3fa6fe1c82cb5e6a478c18364a3a05-PS/classes].
最后
如果这篇文章对你有所帮助,点赞👍收藏🌟支持一下吧,谢谢~
本篇文章由@crasowas发布于CSDN。
相关文章:
Android问题记录 - Inconsistent JVM-target compatibility detected for tasks
文章目录 前言开发环境问题描述问题分析解决方案补充内容最后 前言 前段时间升级Android Studio后修复了一堆问题,详情请看:Android问题记录 - 适配Android Studio Ladybug/Java 21/AGP 8.0(持续更新)。我以为问题已经全部解决了…...
ejb组件(rmi) webservice平台(xml)
springboot bean 在 Spring Boot 中,Bean 是 Spring 框架的核心概念之一,表示由 Spring 容器管理的对象。通过 Bean 或其他注解(如 Component、Service、Repository 等)来定义和管理这些对象。以下是关于 Spring Boot 中 Bean 的…...
【jvm】垃圾回收的重点区域
目录 1. 说明2. 堆(Heap)3. 方法区(Method Area) 1. 说明 1.JVM(Java Virtual Machine)垃圾回收的重点区域主要集中在堆(Heap)和方法区(Method Area)。2.堆是…...
PyQt信号槽实现页面的登录与跳转 #页面进一步优化
将登录框中的取消按钮使用信号和槽的机制,关闭界面。 将登录按钮使用信号和槽连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否为"admin",密码是否为"123456",如果账号密码匹配成功,当前界面关…...
谈谈web3
全面解析 Web3:未来互联网的革命性进程 引言:互联网进化的三部曲 互联网的发展经历了三个重要阶段,每一个阶段都深刻地改变了我们的生活方式: Web1(1990-2005):静态互联网时代,人…...
正则表达式实战例子
正则表达式实战例子 1. 验证电子邮件地址 定义一个合理的电子邮件格式,并检查给定的字符串是否符合这个模式。 import redef is_valid_email(email):# 定义电子邮件格式的正则表达式pattern r^[a-zA-Z0-9_.-][a-zA-Z0-9-]\.[a-zA-Z0-9-.]$return bool(re.match(…...
Hadoop不同版本的区别
免费springboot,vue,springcloudalibaba视频,有兴趣可以看看 <!-- springboot,springboot整合redis,整合rocketmq视频: --> https://www.bilibili.com/video/BV1nkmRYSErk/?vd_source14d27ec13a473…...
QtCreator UI界面 菜单栏无法输入中文
如下图红色所示的区域,直接输入是无法输入中文的: 解决方法:在右边的属性值里输入即可 也可以参考这位同学的解决方法:友情链接...
java switch及其新特性
switch是什么 在Java中,switch语句是一种多分支选择结构,它允许程序根据一个表达式的值从多个代码块中选择执行哪一个。switch语句通常比多个if-else语句更清晰、更易读。 Java switch语句的基本语法: switch (expression) {case value1:/…...
E卷-货币单位换算(100分)
货币单位换算 问题描述 在一个多国货币记账本中,记录了若干条不同货币的金额。现在需要将这些金额全部转换成人民币分(fen),并进行汇总。每条记录可能包含单独的元、单独的分,或者元与分的组合。转换时,需要考虑不同货币之间的汇率关系。 要求将这些货币全部换算成人民…...
什么是MMD Maximum Mean Discrepancy 最大均值差异?
9多次在迁移学习看到了,居然还是Bernhard Schlkopf大佬的论文,仔细看看。 一.什么是MMD? 1. MMD要做什么? 判断两个样本(族)是不是来自于同一分布 2.怎么做?(直观上)…...
沐风老师3DMAX摄相机阵列插件使用方法
3DMAX摄相机阵列插件,从网格对象或样条线的顶点法线快速创建摄相机阵列。该插件从网格的顶点或样条线的节点获取每个摄影机的位置和方向。 3DMAX摄相机阵列插件支持目前3dMax主流的物理相机、标准相机、VRay物理相机。 【版本要求】 3dMax 2015及更高版本 【安装方…...
Java Web 开发学习中:过滤器与 Ajax 异步请求
一、过滤器 Filter: 过滤器的概念与用途 在一个庞大的 Web 应用中,有许多资源需要受到保护或进行特定的预处理。过滤器就像是一位智能的守卫,站在资源的入口处,根据预先设定的规则,决定哪些请求可以顺利访问资源&…...
数据结构 (36)各种排序方法的综合比较
一、常见排序方法分类 插入排序类 直接插入排序:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。希尔排序:是插入排序的一种改进版本,先将整个待排序的记录序列分割成为…...
使用vue搭建不需要打包的前端项目
需求详情:用户不要项目进行打包,开发还是选用vue2,且需要便于上手 项目目录 >api 存放api.js,主要是前端用到的接口 >css >>>fonts 存放页面需要的字体文件 >>>1.css 存放所有css文件 >data 存放echarts…...
发布订阅者=>fiber=>虚拟dom
文章目录 vue的响应式原理-发布订阅者模式vue3 响应式原理及优化fiberfiber 与 虚拟dom vue的响应式原理-发布订阅者模式 Vue响应式原理概述 Vue.js的响应式原理是其核心特性之一。它使得当数据发生变化时,与之绑定的DOM元素能够自动更新。其主要基于数据劫持和发布…...
Python-计算机中的码制以及基础运算符(用于分析内存)
记录python学习,直到学会基本的爬虫,使用python搭建接口自动化测试就算学会了,在进阶webui自动化,app自动化 python基础2-码制 计算机中的码制原码(True Form)反码(Ones Complement)…...
yum 离线软件安装
适用范围 支持YUM软件管理的操作系统: 银河麒麟 服务器操作系统V10统信服务器操作系统V20CentOS 系列 准备 准备一台可以连接互联网并且与离线安装的操作系统相同版本的操作系统,包括指令集类型相同。 安装下载工具 查询是否已经安装下载工具 yum…...
【C语言】17. 数据在内存中的存储
文章目录 一、整数在内存中的存储二、⼤⼩端字节序和字节序判断1、什么是⼤⼩端?2、为什么有⼤⼩端?3、练习1)练习12)练习23)练习34)练习45) 练习56)练习6 三、浮点数在内存中的存储1、浮点数的…...
二叉树概述
目录 一、二叉树的基本结构 二、二叉树的遍历 1.前序 2.中序 3.后序 4.层序遍历 三.计算二叉树的相关参数 1.计算节点总个数 2.计算叶子节点的个数 3.计算树的高度 4.计算第k层的子树个数 5.查找树中val为x的节点 四.刷题 1.单值二叉树 2.检查两棵树是否相同 3.一…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...
通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器
拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件: 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...
