现有一个Android项目,项目比较大,分了好几个模块,用Docker拉起一个gradle镜像。
从docker hub 上拉取镜像
docker pull gradle:4.4
启动镜像
docker run -i -v /Users/wjy/Desktop/android/android:/opt/data -v /Users/wjy/Desktop/android-sdk-linux:/root/sdk/ -t gradle:4.4.5 /bin/bash
这里将项目挂在到了容器中的/opt/data
目录下,Android-SDK 挂载到了/root/sdk/
目录下
报错!!!
Linux
Linux
Failed to execute aapt
com.android.ide.common.process.ProcessException: Failed to execute aapt
...
...
Caused by: java.util.concurrent.ExecutionException: org.gradle.process.internal.ExecException: A problem occurred starting process 'command '/root/.gradle/caches/modules-2/files-2.1/com.android.boost.toolkits/toolskit/1.1.11-snap/7044c8cdb0e07254d756e8ad13899c18f484625d/toolskit-1.1.11-snap/aapt/linux/aapt''
at com.google.common.util.concurrent.AbstractFuture.getDoneValue(AbstractFuture.java:528)
at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:509)
at com.google.common.util.concurrent.AbstractFuture$TrustedFuture.get(AbstractFuture.java:85)
at com.android.builder.core.AndroidBuilder.processResources(AndroidBuilder.java:794)
... 55 more
Caused by: org.gradle.process.internal.ExecException: A problem occurred starting process 'command '/root/.gradle/caches/modules-2/files-2.1/com.android.boost.toolkits/toolskit/1.1.11-snap/7044c8cdb0e07254d756e8ad13899c18f484625d/toolskit-1.1.11-snap/aapt/linux/aapt''
at org.gradle.process.internal.DefaultExecHandle.execExceptionFor(DefaultExecHandle.java:222)
at org.gradle.process.internal.DefaultExecHandle.setEndStateInfo(DefaultExecHandle.java:202)
at org.gradle.process.internal.DefaultExecHandle.failed(DefaultExecHandle.java:342)
at org.gradle.process.internal.ExecHandleRunner.run(ExecHandleRunner.java:86)
at org.gradle.internal.operations.BuildOperationIdentifierPreservingRunnable.run(BuildOperationIdentifierPreservingRunnable.java:35)
... 6 more
Caused by: net.rubygrapefruit.platform.NativeException: Could not start '/root/.gradle/caches/modules-2/files-2.1/com.android.boost.toolkits/toolskit/1.1.11-snap/7044c8cdb0e07254d756e8ad13899c18f484625d/toolskit-1.1.11-snap/aapt/linux/aapt'
at net.rubygrapefruit.platform.internal.DefaultProcessLauncher.start(DefaultProcessLauncher.java:27)
at net.rubygrapefruit.platform.internal.WrapperProcessLauncher.start(WrapperProcessLauncher.java:36)
at org.gradle.process.internal.ExecHandleRunner.run(ExecHandleRunner.java:68)
... 7 more
Caused by: java.io.IOException: Cannot run program "/root/.gradle/caches/modules-2/files-2.1/com.android.boost.toolkits/toolskit/1.1.11-snap/7044c8cdb0e07254d756e8ad13899c18f484625d/toolskit-1.1.11-snap/aapt/linux/aapt" (in directory "/opt/data/xxx/app"): error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
at net.rubygrapefruit.platform.internal.DefaultProcessLauncher.start(DefaultProcessLauncher.java:25)
... 9 more
Caused by: java.io.IOException: error=2, No such file or directory
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
at java.lang.ProcessImpl.start(ProcessImpl.java:134)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
... 10 more
解决错误
在模块的
gradle.properties
已经配置了isAlipayUseCustomAapt26=false
。
切换到目录/root/.gradle/caches/modules-2/files-2.1/com.android.boost.toolkits/toolskit/1.1.11-snap/7044c8cdb0e07254d756e8ad13899c18f484625d/toolskit-1.1.11-snap/aapt/linux/
执行命令:ldd aapt
报错
进过查找确认,认为可能是镜像内的库中没有lib32stdc++6
、lib32z1 lib32z1-dev
导致的
修改Dockerfile
FROM openjdk:8
CMD ["gradle"]
ENV GRADLE_HOME /opt/gradle
RUN mkdir -p /root/.gradle
VOLUME /root/.gradle
RUN apt-get update \
&& apt-get install --yes --no-install-recommends \
fontconfig \
unzip \
wget \
\
bzr \
git \
mercurial \
openssh-client \
subversion \
lib32stdc++6 \
lib32z1 lib32z1-dev \
&& rm -rf /var/lib/apt/lists/*
ENV GRADLE_VERSION 4.4
RUN set -o errexit -o nounset \
&& echo "Downloading Gradle" \
&& wget --no-verbose --output-document=gradle.zip "https://services.gradle.org/distributions/gradle-${GRADLE_VERSION}-all.zip" \
\
&& echo "Installing Gradle" \
&& unzip gradle.zip \
&& rm gradle.zip \
&& mv "gradle-${GRADLE_VERSION}" "${GRADLE_HOME}/" \
&& ln --symbolic "${GRADLE_HOME}/bin/gradle" /usr/bin/gradle \
\
&& echo "Testing Gradle installation" \
&& gradle --version
然后重新打包构建,问题完美解决