伊宁市住房与城乡建设局网站,厦门网页设计培训学校,北京建设工程交易网,免费域名模板建站文章目录 前言开发环境问题描述问题分析解决方案补充内容最后 前言
前段时间升级Android Studio后修复了一堆问题#xff0c;详情请看#xff1a;Android问题记录 - 适配Android Studio Ladybug/Java 21/AGP 8.0#xff08;持续更新#xff09;。我以为问题已经全部解决了… 文章目录 前言开发环境问题描述问题分析解决方案补充内容最后 前言
前段时间升级Android Studio后修复了一堆问题详情请看Android问题记录 - 适配Android Studio Ladybug/Java 21/AGP 8.0持续更新。我以为问题已经全部解决了没想到时隔一个多月在部署项目到新设备时又出现了新问题。
开发环境
Flutter: 3.24.5Android Studio: 2024.2.1 Patch 3Java: 21.0.3Gradle: 8.5Android Gradle Plugin (AGP): 8.3.2Kotlin 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.5AGP版本是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.8def 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.8def 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。