在Android Studio构建中,KMM返回命令PhaseScriptExecution失败,退出码为非零

8
我刚通过KMM插件创建了一个新的KMM项目,但是我无法在Xcode iosApp部分运行甚至调试。当我尝试从Android Studio运行iosApp时,构建过程失败(Command PhaseScriptExecution failed with nonzero exit code)。
构建的最终行是:
FAILURE:Build failed with an exception。
出了什么问题: 任务':shared:compileKotlinIosX64'执行失败。
编译完成并出现错误。
尝试: 使用--stacktrace选项运行以获取堆栈跟踪。 使用--info或--debug选项运行以获取更多日志输出。 使用--scan运行以获取完整的洞察力。 在https://help.gradle.org获取更多帮助。
8秒内构建失败 1个可执行任务:1个已执行 Command PhaseScriptExecution failed with a nonzero exit code **BUILD FAILED**
以下构建命令失败: PhaseScriptExecution Run\ Script /Users/tamegajr/AndroidStudioProjects/TesteKMM5/build/ios/iosApp.build/Release-iphonesimulator/iosApp.build/Script-7555FFB5242A651A00829871.sh (1 失败)
有人能帮忙解决这个问题吗?

感谢这个答案,我可以解决问题,谢谢这个答案帮了我 - Nuttapong Hongchumphae
8个回答

8

在2023年7月1日进行的工作/测试

对我有用的是什么?

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

    MAC用户 - Android Studio -> 设置

或�� cmd + ,

  1. 搜索"Gradle"

  2. Gradle JDK下拉菜单中,选择Oracle Open JDK-20 如果您看不到Oracle Open JDK 20 - 那么选择下载JDK选项 并下载版本20。

  3. 同步Gradle,完成!

希望能对某人有所帮助...


也对我有用。谢谢。 - Mehmet Gür
没问题,非常好用,谢谢! - undefined

4
在我的情况下,XCode的JAVA_HOME变量引起了问题。
  1. 在XCode上打开项目
  2. 在侧边栏上打开iosApp.xcodeproj
  3. 选择BuildPhases
  4. 展开"Run Script"

在构建脚本中添加以下两行代码,在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

1
救命稻草!非常感谢你。 - undefined

1

我曾经遇到同样的问题,但是这个解决方案帮助了我:

从 KMM 插件中获取(在依赖项中):

将这个:

classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.10")

改为这个:

classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.31")


你只是简单地复制粘贴了相同的答案在这个帖子上。 - Farid

1
我刚刚从Oracle官网安装了JVM 17,问题解决了。

1
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

0
我发现的解决方法是在“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)
    }
}

}


我会试试,非常感谢。 - tamegajr
我已经尝试过了,但对我没有起作用。你能否发布你的整个Gradle文件,这样我就可以检查一下我自己的哪里出了问题? - tamegajr

0
更新:2023年10月11日
我已经将Kotlin版本从1.8.0更新到1.8.20,并且它可以正常工作。也许这会对某些人有所帮助。
我从这里找到了这个建议。

0
对我来说,问题在于尽管我在AndroidStudio和build.gradle文件中设置了使用Java 11,但它仍然尝试使用Java 1.8。
然后我查看了项目的gradlew文件,并发现它使用了JAVA_HOME路径变量。
因为我有其他项目,它们使用Java 1.8,所以我在.zshrc文件中设置了一个JAVA_HOME变量为1.8。
我将其更改为11(我之前下载过),重新启动了AndroidStudio - 使用无效缓存并重启,以确保它立即生效。
我能够从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/...文件夹的路径。如果与上述不同,则相应地进行更改。


-1
经过对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项目。

顺便说一句,如果您遇到任何困难,值得检查一下此Stack Overflow帖子中关于Android Studio使用的JDK版本的设置或更改: 如何在macOS上设置或更改默认的Java(JDK)版本?

构建iosApp时出现多平台错误:命令PhaseScriptExecution失败,退出码为非零


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接