【问题标题】: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