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

问题描述 投票:0回答:6

我刚刚通过 KMM 插件创建了一个新的 KMM 项目,但我无法在项目的 Xcode iosApp 部分中运行甚至调试。当我尝试从 Android Studio 运行 iosApp 时,构建过程失败(命令 PhaseScriptExecution 失败,退出代码非零)

最终的建筑线条是:

FAILURE:构建失败并出现异常。

  • 出了什么问题: 任务“:shared:compileKotlinIosX64”执行失败。

编译完成,但有错误

  • 尝试: 使用 --stacktrace 选项运行以获取堆栈跟踪。使用 --info 或 --debug 选项运行以获得更多日志输出。使用 --scan 运行以获得完整的见解。

  • https://help.gradle.org

    获取更多帮助

8秒内构建失败 1 个可操作任务:已执行 1 个 命令 PhaseScriptExecution 失败,退出代码非零

** 构建失败 **

以下构建命令失败: PhaseScriptExecution运行\脚本/Users/tamegajr/AndroidStudioProjects/TesteKMM5/build/ios/iosApp.build/Release-iphonesimulator/iosApp.build/Script-7555FFB5242A651A00829871.sh (1 次失败)

谁能帮忙解决这个问题吗?

kotlin gradle mobile cross-platform kotlin-multiplatform-mobile
6个回答
1
投票

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


1
投票

工作/测试日期 - 2023 年 7 月 1 日

什么对我有用?

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

    MAC 用户 - Android Studio -> 设置

cmd + ,

  1. 搜索“Gradle”

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

  3. 同步 Gradle,就完成了!

希望它对某人有帮助...


1
投票

在我的例子中,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

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)
    }
}

}


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/... 文件夹的路径。如果与上述不同,请相应更改。


-2
投票

在对 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?

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

© www.soinside.com 2019 - 2024. All rights reserved.