Android 在 CI 中构建失败,因为 NDK 版本不兼容,但不在本地

Android build failed in CI because of NDK version is not compatible, but not locally

可能这不是你第一次看到这样的问题。我查看了一些解释并意识到这与 Gradle 插件没有下载默认版本的 SDK 有关,因为在 CI 中你通常设置的机器可能不完全是安装相同的默认版本,然后它会失败。

参考文献:

我的问题是最终了解实际发生了什么,我很好奇 如果我什至没有在本地安装任何 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 的行为与我的本地设置不同。

我的本地设置:

  1. OSX卡特琳娜 10.15.4
  2. 没有安装SDK
  3. Android Studio 4.0

CI 配置:

  1. GitHub 操作 Android (ubuntu-18.04)

项目配置:

  1. Gradle Android 插件: 4.0.0
  2. Gradle 版本(使用包装器确保两个命令都使用相同的版本执行):6.1.1
  3. 构建工具:29.0.3

欢迎任何建议,提前致谢!

这是https://issuetracker.google.com/148189425

选择 NDK 的逻辑已更改,以使构建更具可重现性。当 NDK 仅用于剥离依赖项时,进行了更改以放宽限制,但它错误地仅在安装 no NDK 时放宽限制。

至于如何解决您的问题,只需将 android.ndkVersion 设置为您在 build.gradle.CI 上可用的任何内容即可。

./gradlew clean

运行 React Native 项目 android 文件夹内的上述命令

选择 NDK 的逻辑已更改,以使构建更具可重现性。当 NDK 仅用于剥离依赖项时进行了更改以放宽限制,但它错误地仅在未安装 NDK 时放宽限制。

关于如何解决您的问题,只需将 android.ndkVersion 设置为 build.gradle

中 CI 上可用的任何内容