Android 在 docker 容器中构建

标签 android docker gradle aapt2

我尝试在 docker 容器上运行 android build。

我的 dockerfile 的内容在这里:

FROM openjdk:8-jre-alpine

RUN mkdir -p /myapp
WORKDIR /myapp
COPY . .

RUN apk add --update nodejs nodejs-npm
RUN apk add git
RUN apk add zip
RUN apk --no-cache add curl

我创建了一个 docker 镜像并运行它。我在 docker 终端上运行以下命令。
wget https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip
unzip -q sdk-tools-linux-4333796.zip -d Android-sdk
export ANDROID_HOME=/path-to-sdk/Android-sdk
export PATH=${PATH}:${ANDROID_HOME}/tools:${ANDROID_HOME}/tools/bin:${ANDROID_HOME}/platform-tools
yes | sdkmanager  --licenses
cd MyApplication && chmod +x gradlew && ./gradlew :app:assembledebug

MyApplication 是 Android Studio 的默认空 Activity 项目。

错误日志在这里:

/gradlew :app:assembledebug

Task :app:preBuild UP-TO-DATE Task :app:preDebugBuild UP-TO-DATE Task :app:compileDebugAidl NO-SOURCE Task :app:compileDebugRenderscript UP-TO-DATE Task :app:checkDebugManifest UP-TO-DATE Task :app:generateDebugBuildConfig UP-TO-DATE Task :app:prepareLintJar UP-TO-DATE Task :app:mainApkListPersistenceDebug UP-TO-DATE Task :app:generateDebugResValues UP-TO-DATE Task :app:generateDebugResources UP-TO-DATE Task :app:mergeDebugResources FAILED



FAILURE:构建失败并出现异常。


  • 出了什么问题:任务“:app:mergeDebugResources”执行失败。

    java.util.concurrent.ExecutionException: com.android.builder.internal.aapt.v2.Aapt2InternalException: AAPT2 aapt2-3.3.0-alpha12-5013011-linux Daemon #0: Daemon startup failed
    This should not happen under normal circumstances, please file an issue if it does.

  • 尝试:使用 --stacktrace 选项运行以获取堆栈跟踪。使用 --info 或 --debug 选项运行以获得更多日志输出。运行 --scan 以获得完整的见解。
  • https://help.gradle.org 获得更多帮助


  • 编辑

    这个项目在我的 mac 笔记本电脑上运行良好。本地机器构建没问题,但它不适用于 docker 容器。

    编辑

    我跑--stacktrace范围。未找到 aapt2

    Caused by: java.io.IOException: Cannot run program "/root/.gradle/caches/transforms-1/files-1.1/aapt2-3.2.0-4818971-linux.jar/6f8af69a2b8f839763b018ee3b5c1d41/aapt2-3.2.0-4818971-linux/aapt2": error=2, No such file or directory at com.android.builder.internal.aapt.v2.Aapt2DaemonImpl.startProcess(Aapt2DaemonImpl.kt:80) at com.android.builder.internal.aapt.v2.Aapt2Daemon.checkStarted(Aapt2Daemon.kt:53) ... 8 more Caused by: java.io.IOException: error=2, No such file or directory ... 10 more

    最佳答案

    openjdk:8-jre-alpine 中遇到同样的问题 docker 形象。

    当我使用 oracle/openjdk:8 时问题已解决作为基础图像

    像这样更改您的 Dockerfile,然后重试:

    FROM oracle/openjdk:8
    RUN mkdir -p /myapp
    WORKDIR /myapp
    COPY . .
    
    RUN yum install -y nodejs nodejs-npm
    RUN yum install -y git zip curl
    

    关于Android 在 docker 容器中构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59499505/

    相关文章:

    docker - Docker网络命名空间

    java - 在TeamCity上使用Gradle构建时失败:任务:app:processDebugResources失败

    java - 错误 : "The newly created daemon process has a different context than expected"

    android - flutter 中一个屏幕上有两个 TabBar

    android - 如何判断我的 android 相机上的闪光灯硬件是否打开?

    android - recyclerView android获取项目索引

    android - 关于 Click 实现在 Kotlin 中不起作用

    docker - 如何用docker镜像打包文件

    python - 如何在简单的 dockerized Python 应用程序中显示输出?

    bash - 用 gradle 测试 bash 脚本