由于 NDK 版本不兼容,Android 构建在 CI 中失败,但在本地不兼容
Posted
技术标签:
【中文标题】由于 NDK 版本不兼容,Android 构建在 CI 中失败,但在本地不兼容【英文标题】:Android build failed in CI because of NDK version is not compatible, but not locally 【发布时间】:2020-10-15 09:45:49 【问题描述】:这可能不是您第一次看到这样的问题。我已经研究了一些解释并意识到这与 Gradle 插件没有下载默认版本的 SDK 有关,并且由于在 CI 中您通常设置的机器可能没有安装完全相同的默认版本,那么它会失败。
参考资料:
https://github.com/gradle/gradle/issues/12440 https://github.com/actions/virtual-environments/issues/578 android: No version of NDK matched the requested version我的问题是最终了解实际发生的情况,我很好奇 如果我什至没有在本地安装任何 NDK 版本,为什么它只在 CI 上失败而不是在本地失败
因此,我运行了与 CI (./gradlew assembleDebug) 中相同的命令,但最终只得到了这样的警告(构建成功):
> Task :app:stripDebugDebugSymbols UP-TO-DATE
WARNING: Compatible side by side NDK version was not found for android.ndkVersion '21.3.6528147'
Compatible side by side NDK version was not found for android.ndkVersion '21.3.6528147'
但是,CI 中的相同命令最终会得到以下结果:
2020-06-25T01:45:32.2616030Z > Task :app:mergeDebugNativeLibs
2020-06-25T01:45:32.3617430Z > Task :app:stripDebugDebugSymbols FAILED
2020-06-25T01:45:32.7615428Z
2020-06-25T01:45:32.7615773Z > Task :app:mergeExtDexDebug
2020-06-25T01:45:32.7657658Z FAILURE: Build failed with an exception.
2020-06-25T01:45:32.7658080Z
2020-06-25T01:45:32.7658405Z * What went wrong:
2020-06-25T01:45:32.7659460Z Execution failed for task ':app:stripDebugDebugSymbols'.
2020-06-25T01:45:32.7659848Z > No version of NDK matched the requested version 21.0.6113669. Versions available locally: 21.3.6528147
2020-06-25T01:45:32.7660128Z
2020-06-25T01:45:32.7660439Z * Try:
2020-06-25T01:45:32.7661003Z Run with --info or --debug option to get more log output. Run with --scan to get full insights.
2020-06-25T01:45:32.7661296Z
2020-06-25T01:45:32.7661602Z * Exception is:
2020-06-25T01:45:32.8621953Z org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:stripDebugDebugSymbols'.
2020-06-25T01:45:32.8622201Z 148 actionable tasks: 148 executed
所以,我想了解有什么区别,或者什么会导致 CI 的行为与我的本地设置不同。
我的本地设置:
-
OSX Catalina 10.15.4
未安装 SDK
Android Studio 4.0
CI 配置:
-
GitHub Actions Android (ubuntu-18.04)
项目配置:
-
Gradle Android 插件:4.0.0
Gradle 版本(使用 wrapper 确保两个命令以相同版本执行):6.1.1
构建工具:29.0.3
欢迎任何建议,提前谢谢!
【问题讨论】:
【参考方案1】:这是https://issuetracker.google.com/148189425。
选择 NDK 的逻辑已更改,以使构建更具可重复性。进行了更改以放宽当 NDK 仅用于剥离依赖项时,但它仅在 no 安装 NDK 时才错误地放宽限制。
至于如何解决您的问题,只需将 android.ndkVersion
设置为 build.gradle 中 CI 上可用的任何内容。
【讨论】:
非常感谢您,先生。是的,我实际上能够修复它,但对奇怪的行为感到好奇,并正在寻找一个最终消除我所有这些小顾虑的解释。您的回答准确地解释了我在寻找什么,现在整个上下文对我来说很清楚,感谢您的帮助! 根据最近更新的bug应该在4.2中修复。【参考方案2】:./gradlew clean
在 react native 项目的 android 文件夹中运行上述命令
选择 NDK 的逻辑已更改,以使构建更具可重复性。进行了更改以放宽当 NDK 仅用于剥离依赖项时,但它仅在未安装 NDK 时才错误地放宽限制。
至于如何解决您的问题,只需将 android.ndkVersion 设置为 build.gradle 中 CI 上可用的任何内容
【讨论】:
以上是关于由于 NDK 版本不兼容,Android 构建在 CI 中失败,但在本地不兼容的主要内容,如果未能解决你的问题,请参考以下文章
Android踩坑小记:ndk版本与Android Gradle Plugin版本兼容
Android踩坑小记:ndk版本与Android Gradle Plugin版本兼容
Android踩坑小记:ndk版本与Android Gradle Plugin版本兼容
由于 NDK 路径中的反斜杠,Qt Creator 无法构建 Android 库