【问题标题】:Android Gradle - Gitlab CI - Docker - CMake - NullPointerExceptionAndroid Gradle - Gitlab CI - Docker - CMake - NullPointerException
【发布时间】:2017-06-06 22:02:52
【问题描述】:

我正在尝试让简单的 Android 单元测试在 Gitlab CI 上运行,但我无法在 CI Docker 映像中正确构建内容。我有一个从Library 项目中提取的master 项目。库中有 C 代码,所以我需要使用 CMake 来构建它。使用 Android Studio 时,所有这些都在我的 Windows 机器上本地运行。但是,一旦我移动到 CI 服务器,就会出现以下错误:

对 :Library 调试使用增量 javac 编译。 增量java编译是一个孵化特性。 在 /android-sdk-linux/licenses 中检查包 CMake 3.6.3155560 的许可证 已接受软件包 CMake 3.6.3155560 的许可。 准备“安装 CMake 3.6.3155560(修订版:3.6.3155560)”。 “安装 CMake 3.6.3155560(修订版:3.6.3155560)”准备就绪。 完成“安装 CMake 3.6.3155560(修订版:3.6.3155560)” 在 /android-sdk-linux/cmake/3.6.3155560 中安装 CMake 3.6.3155560 “安装 CMake 3.6.3155560(修订版:3.6.3155560)”完成。 “安装 CMake 3.6.3155560(修订版:3.6.3155560)”完成。 FAILURE:构建失败并出现异常。 * 什么地方出了错: 配置项目 ':Library' 时出现问题。 > java.lang.NullPointerException(没有错误信息) * 尝试: 使用 --debug 选项运行以获得更多日志输出。 * 例外情况是: org.gradle.api.ProjectConfigurationException:配置项目“:库”时出现问题。 在 org.gradle.configuration.project.LifecycleProjectEvaluator.addConfigurationFailure(LifecycleProjectEvaluator.java:94) 在 org.gradle.configuration.project.LifecycleProjectEvaluator.notifyAfterEvaluate(LifecycleProjectEvaluator.java:89) ... 在 org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54) 在 org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40) 原因:java.lang.NullPointerException 在 com.android.builder.sdk.DefaultSdkLoader.installSdkTool(DefaultSdkLoader.java:572) 在 com.android.build.gradle.internal.SdkHandler.installCMake(SdkHandler.java:302) 在 com.android.build.gradle.tasks.ExternalNativeJsonGenerator.create(ExternalNativeJsonGenerator.java:628) 在 com.android.build.gradle.internal.TaskManager.createExternalNativeBuildJsonGenerators(TaskManager.java:1241) 在 com.android.build.gradle.internal.LibraryTaskManager.lambda$createTasksForVariantData$11(LibraryTaskManager.java:240) ... 在 com.sun.proxy.$Proxy15.afterEvaluate(未知来源) 在 org.gradle.configuration.project.LifecycleProjectEvaluator.notifyAfterEvaluate(LifecycleProjectEvaluator.java:82) ... 56 更多 构建失败 总时间:1 分 25.384 秒 停止了 0 个工作守护进程。 收到结果Failure[value=org.gradle.initialization.ReportedException:org.gradle.internal.exceptions.LocationAwareException:配置项目':Library'时出现问题。]来自守护进程DaemonInfo{pid=39,address=[1f3b75f9-7080- 48b5-b298-0e6136640a0a 端口:41964,地址:[/127.0.0.1]],状态=忙碌,lastBusy=1496784783851,上下文=DefaultDaemonContext[uid=0e3eadf0-a7bd-4ede-9eb8-0c2a96ebef58,javaHome=/usr/lib/ jvm/java-8-openjdk-amd64,daemonRegistryDir=/root/.gradle/daemon,pid=39,idleTimeout=10800000,daemonOpts=-Xmx1536m,-Dfile.encoding=UTF-8,-Duser.country,-Duser。 language=en, -Duser.variant]} (构建应该完成)。 错误:作业失败:退出代码 1

根据线路判断

Caused by: java.lang.NullPointerException
    at com.android.builder.sdk.DefaultSdkLoader.installSdkTool(DefaultSdkLoader.java:572)
    at com.android.build.gradle.internal.SdkHandler.installCMake(SdkHandler.java:302)

看起来这是 CMake 的问题。但看起来它已安装并且许可证已被接受,如上面该块开头的输出所示。


谁能给我一些关于问题出在哪里的指点?
* 是不是 gradle 不知道 CMake 安装在哪里? * NDK 可能有问题吗? * 或者我可以在哪里找到 com.android.build.gradle.internal.SdkHandler.installCMake 和 com.android.builder.sdk.DefaultSdkLoader.installSdkTool 的源代码。
我的搜索没有结果。

我可以根据要求提供更多关于我的设置的信息。 (即android项目、docker镜像、gitlab-ci.yml等)

【问题讨论】:

    标签: nullpointerexception cmake android-gradle-plugin gitlab-ci


    【解决方案1】:

    好吧,mbertin 于 2 月 2 日在here 评论说,通过使用较低的 gradle 构建工具,它为他解决了问题。 (即classpath 'com.android.tools.build:gradle:2.2.2)。

    尝试后,我的构建脚本通过了该错误! (有人知道为什么吗?)

    感谢 Stack Overflow 的情感支持!你是最棒的!

    【讨论】:

      猜你喜欢
      • 2020-02-02
      • 2020-04-02
      • 2016-03-13
      • 2022-09-28
      • 2022-08-10
      • 2023-01-29
      • 2018-03-26
      • 2019-05-09
      • 2020-01-08
      相关资源
      最近更新 更多