Android Alpine 上的 SDK - adb 没有那个文件或目录

Android SDK on Alpine - adb No such file or directory

我正在尝试构建一个包含 Android SDK 的 Alpine 映像 - 特别是 platform-tools 包。

我的 Dockerfile 执行以下操作:

  1. 安装 Java 并设置 JAVA_HOME(Android 需要)。
  2. 从 Google 下载 Android SDK 工具。
  3. 解压缩包。
  4. 设置ANDROID_HOME。还设置 PATH 以便可以使用 sdkmanager 可执行文件。
  5. 使用 sdkmanager 安装 platform-tools
  6. platform-tools 添加到 PATH

platform-tools 包含一个名为 adb 的可执行文件,但由于某种原因无法看到它。 运行 adb returns:

bash: /android-sdk/platform-tools/adb: No such file or directory

这是我的 Dockerfile:

FROM alpine:latest

# Install bash and java
RUN apk update
RUN apk add bash openjdk8
ENV JAVA_HOME=/usr/lib/jvm/java-1.8-openjdk
ENV PATH="$PATH:$JAVA_HOME/bin"

# Download Android SDK and set PATH
RUN mkdir /android-sdk
RUN wget https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip && unzip *.zip -d /android-sdk && rm *.zip
ENV ANDROID_HOME="/android-sdk"
ENV PATH="$PATH:$ANDROID_HOME/tools/bin"

# Install platform-tools
RUN yes | sdkmanager "platform-tools"
ENV PATH="$PATH:$ANDROID_HOME/platform-tools"
RUN adb version # throws error: adb not found

我查看了 this question,但该问题应该可以通过 platform-tools v24.0 及更高版本解决。

Alpine 使用 musl libc instead of glibc and friends,因此某些软件可能 运行 出现问题,具体取决于其 libc 要求的深度。

adb是用glibc编译的,所以在Alpine中无法运行,这通常会导致错误:No such file or directory.

您可以通过 运行ning file <path to file> | grep "interpreter /lib64/ld-linux-x86-64.so.2".

验证文件是否使用 glibc 编译

您可以像这样安装android-tools

RUN apk add \
    android-tools \
    --repository=http://dl-cdn.alpinelinux.org/alpine/edge/testing

关键是如图所示设置 --repository,因为它仅在边缘测试库中。

我不认为它包含整个 SDK,因此可能需要下载和解压缩其他工具。我不知道这是否能满足您的所有需求,但 adb 至少会打印一份帮助文档。

这可能会有所帮助,尽管 Gradle 守护程序在使用兼容层时在 Alpine Linux 上随机崩溃。

gcompat is the go-to compatibility layer for Alpine users.

apk add gcompat

After that you run your binaries as normal.

来源:https://wiki.alpinelinux.org/wiki/Running_glibc_programs