Android 在 CI 中构建失败,因为 NDK 版本不兼容,但不在本地
Android build failed in CI because of NDK version is not compatible, but not locally
可能这不是你第一次看到这样的问题。我查看了一些解释并意识到这与 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卡特琳娜 10.15.4
- 没有安装SDK
- Android Studio 4.0
CI 配置:
- GitHub 操作 Android (ubuntu-18.04)
项目配置:
- Gradle Android 插件: 4.0.0
- Gradle 版本(使用包装器确保两个命令都使用相同的版本执行):6.1.1
- 构建工具: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 上可用的任何内容
可能这不是你第一次看到这样的问题。我查看了一些解释并意识到这与 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卡特琳娜 10.15.4
- 没有安装SDK
- Android Studio 4.0
CI 配置:
- GitHub 操作 Android (ubuntu-18.04)
项目配置:
- Gradle Android 插件: 4.0.0
- Gradle 版本(使用包装器确保两个命令都使用相同的版本执行):6.1.1
- 构建工具: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 上可用的任何内容