Android Studio中的KMM生成返回Command PhaseScriptExecution失败,退出代码为非



我刚刚通过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日

什么对我有效?

  1. 打开Android Studio设置/首选项

    MAC用户-安卓工作室->设置

cmd+,

  1. 搜索"Gradle">

  2. Gradle JDK下拉列表中,选择Oracle Open JDK-20如果您没有看到Oracle Open JDK 20,则选择下载JDK选项并下载版本20。

  3. 同步Gradle,你就完成了!

希望它能帮助别人。。。

我刚刚从oracle网站安装了jvm 17,问题解决了

在我的案例中,XCode的JAVA_HOME变量导致了问题。

  1. 在XCode上打开项目
  2. 在侧面板上打开iosApp.xcodeproj
  3. 选择构建阶段
  4. 展开";运行脚本">

在gradlew任务之前,将这两行添加到构建脚本中。(我使用了Android Studio的内置JDK。如果你想使用另一个JDK,你应该在下面的代码中更改JAVA_HOMEJDK_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失败,退出代码为,为非零

相关内容

  • 没有找到相关文章