我正在尝试构建一个包含Android SDK的Alpine图片-具体来说是platform-tools
包。
我的Dockerfile执行以下操作:
JAVA_HOME
(Android所需)。ANDROID_HOME
。同时设置PATH
,以便可以使用sdkmanager
可执行文件。platform-tools
安装sdkmanager
。platform-tools
添加到PATH
。 platform-tools
包含一个名为adb
的可执行文件,但是由于某种原因,它看不到。运行adb
返回:
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,但该问题应该使用平台工具v24.0及更高版本解决。
答案 0 :(得分:1)
Alpine使用musl libc而非glibc and friends,因此某些软件可能会遇到问题,具体取决于其libc要求的深度。
adb
使用glibc
进行编译,因此它将无法在Alpine中运行,这通常会导致错误:No such file or directory
。
您可以通过运行glibc
来验证文件是使用file <path to file> | grep "interpreter /lib64/ld-linux-x86-64.so.2"
编译的。
答案 1 :(得分:0)
您可以像这样安装android-tools
:
RUN apk add \
android-tools \
--repository=http://dl-cdn.alpinelinux.org/alpine/edge/testing
关键是如图所示设置--repository
,因为它仅在边缘测试仓库中。
我不认为它包含整个SDK,因此对于其他工具,可能还需要下载和解压缩。我不知道这样是否可以处理您想要的所有内容,但是adb
至少会打印一个帮助文档。
答案 2 :(得分:0)
这可能会有所帮助,尽管在使用兼容层时 Gradle 守护进程在 Alpine Linux 上随机崩溃。
<块引用>gcompat 是 Alpine 用户的首选兼容层。
apk 添加 gcompat
之后,您可以正常运行二进制文件。