当Gradle运行transformClasses时,Android构建在Ubuntu Docker容器中失败

时间:2016-08-03 06:51:01

标签: android ubuntu gradle docker android-jack-and-jill

我的Android项目在具有大量RAM的Windows开发机器上构建得很好。但是在一个简单的Docker容器(FROM ubuntu:xenial + Android SDK)中,gradle build(./gradlew assembleTrunkDebug)在执行任务时失败了58%:

transformClassesWithPreJackPackagedLibrariesForTrunkDebug

即使使用--stacktrace --debug,我从错误中获得的最多是:

Gradle build daemon disappeared unexpectedly (it may have been killed or may have crashed)

我注意到有几件奇怪的事情: 我传递给docker容器实例化的内存参数无关紧要。它总是向我显示相同的内存统计信息。

Tasks:   2 total,   1 running,   1 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1019776 total,   860604 free,    88840 used,    70332 buff/cache
KiB Swap:  1168688 total,   853640 free,   315048 used.   824484 avail Mem

我通常会这样做:

docker run -it --volume=/Users/MyUser/code/localDebugRepo:/localDebugRepo --workdir="/localDebugRepo" --memory="2048m" --memory-swap="2048m" 66b48030ee34 /bin/bash

但我也尝试传递更少的内存和相同的内存交换或更多的总内存,但它总是向我显示Mem:1019776和Swap:1168688。

我还在任务管理器中注意到VBoxHeadless.exe只使用了41MB的RAM。虽然不幸的任务正在运行(崩溃前需要很长时间),但RAM的使用并没有改变,但磁盘传输量很大,而且只消耗越来越多(因为它在SSD驱动器上)。

Android建议用于最新sdks的新构建工具Jack和Jill必须允许使用至少1536m的内存。但是Docker镜像应该以最大2048m的速度运行,并且考虑到我无法缩小交换,我觉得那里出了问题。

那么有什么想法会导致这种一致的错误?

0 个答案:

没有答案