您的位置:首页 > 财经 > 金融 > 华为应用市场下载安装_新疆头条今日头条新闻_福州seo排名公司_昆明seo案例

华为应用市场下载安装_新疆头条今日头条新闻_福州seo排名公司_昆明seo案例

2025/1/2 20:10:04 来源:https://blog.csdn.net/crasowas/article/details/144276709  浏览:    关键词:华为应用市场下载安装_新疆头条今日头条新闻_福州seo排名公司_昆明seo案例
华为应用市场下载安装_新疆头条今日头条新闻_福州seo排名公司_昆明seo案例

文章目录

  • 前言
  • 开发环境
  • 问题描述
  • 问题分析
  • 解决方案
  • 补充内容
  • 最后


前言

前段时间升级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完全支持的最低以及最高版本范围:

screenshot1

参考文档:

  • 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}"}}}}
}

重新构建运行,一切正常!

解决方案

  1. 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)版本解决。

  1. 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}"}}}}
}

补充内容

  1. 如果是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)...
  1. 如果是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。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com