在 Docker 容器内执行 AAPT 命令时出现问题

问题描述 投票:0回答:1

我正在开发一个 Dockerfile,尝试创建一个容器环境来运行需要 ADB 和 AAPT 可执行文件的 Java 代码。虽然我已经能够成功执行 ADB 命令,但在尝试在 Docker 容器内运行 AAPT 命令时遇到了问题。

这是我的 Dockerfile 的简化版本:

FROM maven:3.8.6-eclipse-temurin-19-alpine as build
COPY src /home/app/src
COPY pom.xml /home/app
RUN mvn -f /home/app/pom.xml clean package

FROM eclipse-temurin:19-jdk-alpine
VOLUME /tmp
RUN apk update && \
    apk add -v --no-cache android-tools
COPY --from=build /home/app/target/*.jar /project.jar
ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} -jar /project.jar"]

我已通过 apk 命令将 android-tools 包包含在容器中,这使我能够成功运行 ADB 命令。但是,我无法执行 AAPT 命令,而我的 Java 代码也需要这些命令。

我是否在寻找错误的 AAPT 包?如果是的话,运行 apk 以在容器中获取 AAPT 可执行文件的正确包是什么?

如果有人有在 Docker 容器中使用 AAPT 的经验,或者对可能导致此问题的原因有任何见解,我将非常感谢您的帮助。谢谢!

java android docker alpine-linux aapt
1个回答
0
投票

由于 AAPT2(Android 资产打包工具)Android SDK Build-Tools 的一部分,它是 Android SDK 的一个组件...将其添加到您的 Dockerfile 中应该会有所帮助。
我将使用 android-sdk-cmdline-tools-offline

# Use a base image
FROM maven:3.8.6-eclipse-temurin-19-alpine as build

# Set environment variables
ENV ANDROID_SDK_ROOT /usr/local/android-sdk
ENV BUILD_TOOLS_VERSION 34.0.0
ENV CMDLINE_TOOLS_VERSION 9644228

# Install dependencies
RUN apk update && \
    apk add --no-cache wget unzip

# Download and extract Android SDK command-line tools
RUN wget https://dl.google.com/android/repository/commandlinetools-linux-${CMDLINE_TOOLS_VERSION}_latest.zip -O sdk-tools.zip && \
    mkdir -p ${ANDROID_SDK_ROOT}/cmdline-tools && \
    unzip sdk-tools.zip -d ${ANDROID_SDK_ROOT}/cmdline-tools/ && \
    mv ${ANDROID_SDK_ROOT}/cmdline-tools/cmdline-tools ${ANDROID_SDK_ROOT}/cmdline-tools/latest && \
    rm sdk-tools.zip

# Add the Android SDK tools to the PATH
ENV PATH ${PATH}:${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin

# Install the Android Build Tools
RUN yes | sdkmanager "build-tools;${BUILD_TOOLS_VERSION}"

# Copy your project files
COPY src /home/app/src
COPY pom.xml /home/app

# Build your project
RUN mvn -f /home/app/pom.xml clean package

# Setup the runtime stage
FROM eclipse-temurin:19-jdk-alpine

# Set environment variables
ENV ANDROID_SDK_ROOT /usr/local/android-sdk
ENV BUILD_TOOLS_VERSION 34.0.0

# Install Android Build-Tools
COPY --from=build ${ANDROID_SDK_ROOT} ${ANDROID_SDK_ROOT}

# Add the Android SDK tools to the PATH
ENV PATH ${PATH}:${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin:${ANDROID_SDK_ROOT}/build-tools/${BUILD_TOOLS_VERSION}

# Setup a volume
VOLUME /tmp

# Copy the built jar file
COPY --from=build /home/app/target/*.jar /project.jar

# Set the entry point for your container
ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} -jar /project.jar"]

我添加了环境变量(

ANDROID_SDK_ROOT
BUILD_TOOLS_VERSION
CMDLINE_TOOLS_VERSION
),以便更轻松地引用 Android SDK 根路径和构建工具版本。我安装了
wget
unzip
来下载并解压 Android SDK 命令行工具。

这样,我就可以下载并解压 Android SDK 命令行工具到指定的

ANDROID_SDK_ROOT
,将 Android SDK cmdline-tools bin 目录添加到 PATH 中。
我使用
sdkmanager
安装指定版本的 Android Build-Tools(根据需要调整
BUILD_TOOLS_VERSION
CMDLINE_TOOLS_VERSION
)。

在运行时阶段,我从构建阶段复制了整个Android SDK安装,以确保

aapt
和其他构建工具在运行时环境中可用。我将 build-tools 目录添加到 PATH 中,以使
aapt
可执行文件在运行时容器的 PATH 中可用。

© www.soinside.com 2019 - 2024. All rights reserved.