Android原生Jetpack组合Kotlin和Java依赖问题

gr8qqesn  于 2023-02-20  发布在  Android
关注(0)|答案(1)|浏览(232)

在我的Android原生应用程序中,我想使用Jetpack Compose来使用一些软件的更新版本。我想我应该更清楚,因为这已经变成了常见的依赖性噩梦。我浪费了整个下午试图让它编译和运行。
我将从错误消息开始,然后反向操作:

> Task :app:compileDebugKotlin FAILED
> 'compileDebugJavaWithJavac' task (current target is 17) and 'compileDebugKotlin' task (current target is 1.8) jvm target compatibility should be set to the same Java version.
> e: This version (1.2.0-alpha05) of the Compose Compiler requires Kotlin version 1.6.10 but you appear to be using Kotlin version 1.7.10 which is not known to be compatible.  Please fix your configuration (or `suppressKotlinVersionCompatibilityCheck` but don't say I didn't warn you!).

首先,我不知道为什么compileDebugKotlin认为我的目标是JVM 1.8而不是17。我的JAVA_HOME设置为Java 17,我的IntelliJ项目结构JDK设置为17,我的app:build.gradle具有以下内容:

compileOptions {
  sourceCompatibility JavaVersion.VERSION_17
  targetCompatibility JavaVersion.VERSION_17
}

我没有看到任何地方设置了1.8
下一个问题是显示错误消息的Compose编译器版本1.2.0-alpha05。我在根build.gradle文件中设置了以下内容:

buildscript {
  ext {
    compose_version = '1.3.0'
…

然后在我的app:build.gradle文件中引用它:

implementation "androidx.compose.ui:ui:$compose_version"
implementation "androidx.compose.material:material:$compose_version"
implementation "androidx.compose.ui:ui-tooling-preview:$compose_version"
implementation "androidx.compose.runtime:runtime-livedata:$compose_version"
implementation "androidx.compose.foundation:foundation:$compose_version"

我不知道它是从哪里来的1.2.0-alpha05作为版本。
下一个问题是它认为我使用的是Kotlin1.7.10。我已经在Kotlin编译器的IntelliJ首选项中将Kotlin版本设置为1.6.10,以及JVM的17。我在build.gradle中尝试了以下操作,但似乎被忽略了,没有任何区别:

kotlin {
  version("1.6.10")
}

简而言之,我不知道这些版本号是从哪里来的,也不知道如何设置它们,使它们反映我认为我配置正确的现实。我已经清除了IntelliJ缓存并重新启动了无数次。

xwbd5t1u

xwbd5t1u1#

在错误中显示的两个任务在编译期间有不同的功能compileDebugJavaWithJavac负责为Java代码生成字节码并使其可用于进一步处理。在您的情况下,它是针对java 17的,但是compileDebugKotlin负责为Kotlin代码生成字节码在您的情况下,它是针对1.8的,这是不支持的,因此您应该添加

kotlinOptions {
    jvmTarget = '17'
}
  1. composeCompiler并非与所有版本的Kotlin都兼容。每个合成编译器都有相应的兼容Kotlin版本(合成到Kotlin兼容性Map)。您显示的是compose_version,它们不代表合成编译器,它们在中声明
composeOptions {
        kotlinCompilerExtensionVersion = "1.x.x"
    }

相关问题