我刚刚通过 KMM 插件创建了一个新的 KMM 项目,但我无法在项目的 Xcode iosApp 部分中运行甚至调试。当我尝试从 Android Studio 运行 iosApp 时,构建过程失败(命令 PhaseScriptExecution 失败,退出代码非零)
最终的建筑线条是:
FAILURE:构建失败并出现异常。
编译完成,但有错误
尝试: 使用 --stacktrace 选项运行以获取堆栈跟踪。使用 --info 或 --debug 选项运行以获得更多日志输出。使用 --scan 运行以获得完整的见解。
8秒内构建失败 1 个可操作任务:已执行 1 个 命令 PhaseScriptExecution 失败,退出代码非零
** 构建失败 **
以下构建命令失败: PhaseScriptExecution运行\脚本/Users/tamegajr/AndroidStudioProjects/TesteKMM5/build/ios/iosApp.build/Release-iphonesimulator/iosApp.build/Script-7555FFB5242A651A00829871.sh (1 次失败)
谁能帮忙解决这个问题吗?
我刚刚从oracle网站安装了jvm 17,问题就解决了
工作/测试日期 - 2023 年 7 月 1 日
什么对我有用?
打开 Android Studio 设置/首选项
MAC 用户 - Android Studio -> 设置
或 cmd + ,
搜索“Gradle”
在 Gradle JDK 下拉列表中,选择 Oracle Open JDK-20 如果您没有看到 Oracle Open JDK 20 - 然后选择 Download JDK 选项 并下载版本 20。
同步 Gradle,就完成了!
希望它对某人有帮助...
在我的例子中,XCode 的 JAVA_HOME 变量导致了问题。
将这两行添加到构建脚本中,在 gradlew 任务之前。 (我使用的是Android Studio内置的JDK。如果你想使用其他JDK,你应该更改下面代码中的JAVA_HOME和JDK_HOME路径。)
export JAVA_HOME=/Applications/Android\ Studio.app/Contents/jbr/Contents/Home/
export JDK_HOME=/Applications/Android\ Studio.app/Contents/jbr/Contents/
你的最终构建脚本应该是这样的;
export JAVA_HOME=/Applications/Android\ Studio.app/Contents/jbr/Contents/Home/
export JDK_HOME=/Applications/Android\ Studio.app/Contents/jbr/Contents/
cd "$SRCROOT/.."
./gradlew :shared:embedAndSignAppleFrameworkForXcode
我发现的解决方案是取消注释“build.gradle.kts(:shared)”中的“iosSimulatorArm64()”。
kotlin {
android()
iosX64()
iosArm64()
iosSimulatorArm64() //sure all ios dependencies support this target
cocoapods {
summary = "Some description for the Shared Module"
homepage = "Link to the Shared Module homepage"
ios.deploymentTarget = "14.1"
podfile = project.file("../iosLink/Podfile")
framework {
baseName = "shared"
}
}
sourceSets {
val commonMain by getting
val commonTest by getting {
dependencies {
implementation(kotlin("test-common"))
implementation(kotlin("test-annotations-common"))
}
}
val androidMain by getting
val androidTest by getting {
dependencies {
implementation(kotlin("test-junit"))
implementation("junit:junit:4.13.2")
}
}
val iosX64Main by getting
val iosArm64Main by getting
val iosSimulatorArm64Main by getting
val iosMain by creating {
dependsOn(commonMain)
iosX64Main.dependsOn(this)
iosArm64Main.dependsOn(this)
iosSimulatorArm64Main.dependsOn(this)
}
val iosX64Test by getting
val iosArm64Test by getting
//val iosSimulatorArm64Test by getting
val iosTest by creating {
dependsOn(commonTest)
iosX64Test.dependsOn(this)
iosArm64Test.dependsOn(this)
//iosSimulatorArm64Test.dependsOn(this)
}
}
}
对我来说,问题是,即使我在 AndroidStudio 和 build.gradle 文件中的所有位置设置为使用 java 11,它仍然尝试使用 java 1.8。
然后我查看了项目的
gradlew
文件,发现它使用了 JAVA_HOME 路径变量。
因为我有其他项目并且这些项目使用 java 1.8,所以我在
.zshrc
文件中将 JAVA_HOME 变量设置为 1.8。在 Mac 上,在我编写的
.zhsrc
文件中
之前:
export JAVA_HOME=/Users/username/Library/Java/JavaVirtualMachines/corretto-1.8.0_292/Contents/Home
之后:
export JAVA_HOME=/Users/username/Library/Java/JavaVirtualMachines/corretto-11.0.18/Contents/Home
如果您的项目中使用其他Java版本,则必须在JAVA_HOME变量中设置其版本号。另请检查 Library/Java/... 文件夹的路径。如果与上述不同,请相应更改。
在对 2-3 个月旧的 KMM 示例项目进行一些代码审查并将其与新项目进行比较之后,我找到了在尝试在 Ios 模拟器上运行 iosApp 时构建失败的解决方案,只需将此更改应用于 build.gradle.kts 即可根项目:
从 KMM 插入中,您将获得(依赖项):
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.10")
更改为:
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.31")
就这样,问题解决了。我希望 Jetbrains 上的人可以在 KMM 插件的未来更新中解决这个问题。
2020年8月30日:
Jetbrains 似乎已经纠正了一些问题,现在您可以使用版本 1.7.10(目前最后一个稳定版本)构建并运行 KMM 项目。
顺便说一句,如果您有任何问题,值得查看这篇有关 Android Studio 使用的 JDK 版本的堆栈溢出帖子:How to set or change the default Java (JDK) version on macOS?