我刚刚通过KMM插件创建了一个新的KMM项目,但我无法在项目的Xcode iosApp部分运行甚至调试。当我尝试从Android Studio运行iosApp时,构建过程失败(Command PhaseScriptExecution失败,退出代码为非零(
建筑的最后几行是:
失败:生成失败,出现异常。
- 出了什么问题:任务":shared:compileKotlinIosX64"的执行失败
编译完成,出现错误
-
尝试:使用--stacktrace选项运行以获取堆栈跟踪。使用--info或--debug选项运行以获得更多日志输出。使用--scan运行以获得完整的见解。
-
获取更多帮助,请访问https://help.gradle.org
BUILD FAILED in 8s1项可操作任务:1项已执行命令PhaseScriptExecution失败,退出代码为非零
**生成失败**
以下生成命令失败:PhaseScriptExecution运行\Script/Users/tamegajr/AndroidStudioProjects/TesteKMM5/build/ios/iosApp.build/Release-iphonesimulator/iosApp.build/Script-7555FFB5242A651A0082987.sh(1个故障(
有人能帮忙解决这个问题吗?
工作/测试日期:2023年7月1日
什么对我有效?
-
打开Android Studio设置/首选项
MAC用户-安卓工作室->设置
或cmd+,
-
搜索"Gradle">
-
在Gradle JDK下拉列表中,选择Oracle Open JDK-20如果您没有看到Oracle Open JDK 20,则选择下载JDK选项并下载版本20。
-
同步Gradle,你就完成了!
希望它能帮助别人。。。
我刚刚从oracle网站安装了jvm 17,问题解决了
在我的案例中,XCode的JAVA_HOME变量导致了问题。
- 在XCode上打开项目
- 在侧面板上打开iosApp.xcodeproj
- 选择构建阶段
- 展开";运行脚本">
在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
我发现的解决方案是取消注释"iosSimuratorArm64((";在";build.gradle.kts(:共享(";。
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
我将其更改为11(我之前下载了它(,重新启动AndroidStudio-使用Invalidate缓存并重新启动,只是可以肯定的是-它立即起作用
我能够在AndroidStudio的iOS模拟器中运行代码。
在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 Simulators上运行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版本的堆栈溢出帖子:如何在macOS上设置或更改默认的Java(JDK(版本?
构建iosApp时出现多平台错误:命令PhaseScriptExecution失败,退出代码为,为非零