由于NDK版本不兼容,但本地不兼容,因此CI的Android构建失败

时间:2020-06-25 02:10:13

标签: android gradle android-ndk android-gradle-plugin

这可能不是您第一次看到这样的问题。我仔细研究了一些解释,发现这与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 Catalina 10.15.4
  2. 未安装SDK
  3. Android Studio 4.0

CI配置:

  1. GitHub Actions Android(ubuntu-18.04)

项目配置:

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

欢迎任何建议,谢谢!

2 个答案:

答案 0 :(得分:2)

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

更改了选择NDK的逻辑,以使构建更加可复制。进行了一些更改,以放宽当NDK仅用于剥离依赖项时的错误,但只有在安装 no NDK时,它才错误地放宽了限制。

关于如何解决问题,只需将android.ndkVersion设置为build.gradle中CI上可用的任何值。

答案 1 :(得分:0)

./ gradlew clean

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

更改了选择NDK的逻辑,以使构建更加可复制。进行了一些更改,以放宽当仅使用NDK剥离依赖项时的错误,而只有在未安装NDK时才错误地放宽了限制。

关于如何解决问题,只需将android.ndkVersion设置为build.gradle中CI上可用的任何值