我想编译一个适用于 iOS 和 Android 的库,如下所示的 build.gradle 文件。它适用于 iOS(如果我删除 androidTarget(+ com.android.library 插件),但是我无法为 Android 编译它。如果我尝试使用“设置”>“构建...”>“构建工具”> Gradle JVM 17我面临这个错误:
FAILURE:构建失败并出现异常。
- 出了什么问题: 无法确定任务“:compileDebugKotlinAndroid”的依赖项。 > 未知的 Kotlin JVM 目标:21
如果我尝试使用“设置”>“构建...”>“构建工具”>“Gradle JVM 15”,它将不再与此错误同步 gradle
Gradle JVM 版本不兼容。该项目配置为使用支持版本 15 的旧版 Gradle JVM,但当前的 AGP 需要支持版本 17 的 Gradle JVM。
我尝试了几种不同的组合,但到目前为止还没有成功,非常感谢任何帮助。
plugins {
kotlin("multiplatform") version "1.9.10"
id("com.android.library") version "8.1.2"
}
group = "com.example"
version = "1.0"
repositories {
google()
mavenCentral()
gradlePluginPortal()
}
kotlin {
androidTarget {
publishLibraryVariants("release")
}
iosX64 {
binaries {
framework {
baseName = "test"
linkerOpts += "-ld64"
}
}
}
iosArm64 {
binaries {
framework {
baseName = "test"
linkerOpts += "-ld64"
}
}
}
val hostOs = System.getProperty("os.name")
val isArm64 = System.getProperty("os.arch") == "aarch64"
val isMingwX64 = hostOs.startsWith("Windows")
val nativeTarget = when {
hostOs == "Mac OS X" && isArm64 -> macosArm64("native")
hostOs == "Mac OS X" && !isArm64 -> macosX64("native")
hostOs == "Linux" && isArm64 -> linuxArm64("native")
hostOs == "Linux" && !isArm64 -> linuxX64("native")
isMingwX64 -> mingwX64("native")
else -> throw GradleException("Host OS is not supported in Kotlin/Native.")
}
sourceSets {
val commonMain by getting
}
}
android {
namespace = "com.example.myapp"
compileSdk = 33
}
在我的例子中,我添加了这段代码,jdk 21安装在我的机器中,但项目在我的项目中使用java版本18,所以我设置了jvmToolChain = 18。问题已解决。
(如果您使用的是 kts,则将其添加到 buildSrc gradle 文件中)
科特林{ jvm工具链(18) }
如果是这种情况,希望这会对一些人有所帮助。