Android Alpine 上的 SDK - adb 没有那个文件或目录
Android SDK on Alpine - adb No such file or directory
我正在尝试构建一个包含 Android SDK 的 Alpine 映像 - 特别是 platform-tools
包。
我的 Dockerfile 执行以下操作:
- 安装 Java 并设置
JAVA_HOME
(Android 需要)。
- 从 Google 下载 Android SDK 工具。
- 解压缩包。
- 设置
ANDROID_HOME
。还设置 PATH
以便可以使用 sdkmanager
可执行文件。
- 使用
sdkmanager
安装 platform-tools
。
- 将
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.
我正在尝试构建一个包含 Android SDK 的 Alpine 映像 - 特别是 platform-tools
包。
我的 Dockerfile 执行以下操作:
- 安装 Java 并设置
JAVA_HOME
(Android 需要)。 - 从 Google 下载 Android SDK 工具。
- 解压缩包。
- 设置
ANDROID_HOME
。还设置PATH
以便可以使用sdkmanager
可执行文件。 - 使用
sdkmanager
安装platform-tools
。 - 将
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.