无法在Docker中获取gradle构建工具- Apple M1

xa9qqrwz  于 2022-11-14  发布在  Docker
关注(0)|答案(2)|浏览(225)

我最近换到了Apple M1,在创建一个最终在Buildkite linux CI上运行的Docker映像时遇到了问题。同样的代码在我的MacBook上运行得很好,使用了英特尔芯片,并成功地创建了一个Docker映像。
sdkmanager尝试使用最新的commandlinetools拉入build-tools;${ANDROID_BUILD_TOOLS_VERSION}时,会发生此问题,它会失败,并显示以下错误:

Warning: Dependant package with key emulator not found!
Warning: Unable to compute a complete list of dependencies.ates...

我能找到的最接近的问题是安装构建工具:没有找到模拟器和Error with android sdk,两者都没有任何分辨率。还请注意,我运行了sdkmanager --listemulator没有作为可用的包出现(只是在M1上)。
下面是我的Dockerfile(我不经常使用docker,所以如果代码不是最干净的,请原谅):

FROM gradle:7.4-jdk11

ENV SDK_URL="https://dl.google.com/android/repository/commandlinetools-linux-8092744_latest.zip" \
    ANDROID_HOME="/usr/local/android-sdk" \
    ANDROID_VERSION=32 \
    ANDROID_BUILD_TOOLS_VERSION=32.0.0

RUN mkdir "$ANDROID_HOME" .android \
    && cd "$ANDROID_HOME" \
    && curl -o sdk.zip $SDK_URL \
    && unzip sdk.zip \
    && rm sdk.zip \
    && yes | $ANDROID_HOME/cmdline-tools/bin/sdkmanager --sdk_root=$ANDROID_HOME --licenses \
    && $ANDROID_HOME/cmdline-tools/bin/sdkmanager --sdk_root=$ANDROID_HOME --update \
    && $ANDROID_HOME/cmdline-tools/bin/sdkmanager --sdk_root=$ANDROID_HOME "platform-tools" "build-tools;${ANDROID_BUILD_TOOLS_VERSION}" \
    && $ANDROID_HOME/cmdline-tools/bin/sdkmanager --sdk_root=$ANDROID_HOME "platforms;android-${ANDROID_VERSION}" \
    && apt-get update \
    && apt-get install -y build-essential file apt-utils curl gnupg \
    && curl -sL https://deb.nodesource.com/setup_14.x  | bash - \
    && apt-get -y install nodejs \
    && npm install -g firebase-tools -y \
    && rm -rf /var/lib/apt/lists/*

边注;我不得不将Android构建代理的jdk 8使用升级到jdk 11,之前的实现是拉入sdk-tools-linux-3859397.zip而不是commandlinetools-linux-8092744_latest.zip,这能够通过sdkmanager拉入build-tools,在M1上也很好,并创建了一个docker映像。
考虑到它是基于Intel的,我的任务在技术上已经完成了,但是从长远来看,它在M1上运行会容易得多。有什么想法吗?或者有人能建议在什么地方提出这个问题吗?你认为这是谷歌命令行工具的问题还是Docker的问题?

bpsygsoo

bpsygsoo1#

我只是在M1 Pro上遇到了同样的问题,this为我解决了这个问题。
简而言之:emulator还不能在Arm(M1)上使用,所以你需要手动安装它。你可以按照official guide,但简而言之,这对我很有效
1.下载适用于Apple Silicon(example)的emulator,或者您可以在[官方指南](https://developer.android.com/studio/emulator_archive)中找到更多链接
1.在Android SDK文件夹中解压缩文件夹(它将创建一个SKD/emulator文件夹,其中包含文件)
1.使用content from here创建SDK/emulator/package.xml文件,并使用您下载的版本更新xml <revision><major>31</major><minor>1</minor><micro>4</micro></revision>的最后一部分
1.在M1上不应再次看到相同的错误🎉

  • 剧透提示:我仍然无法完全构建M1,因为在实际构建过程中,我得到了错误 *
qemu-x86_64: Could not open '/lib64/ld-linux-x86-64.so.2': No such file or directory
2wnc66cl

2wnc66cl2#

我有同样的问题。我认为没有为linux/armv 8的android“模拟器”包。所以你将无法使用docker与本机映像。
我尝试配置docker-compose文件,以便使用linux/x86_64而不是linux/armv 8,但还有其他问题。我在docker-compose.yaml中添加了这一行:

platform: linux/x86_64

就像这样:

version: '3.7'
services:
  android:
    platform: linux/x86_64
    build:
      dockerfile: Dockerfile
      context: ./Docker
    working_dir: /app/Android/Scripts
    volumes:
      - ../:/app:rw,cached
    command: ./build_distribution.sh
#    command: sh -c "while true; do sleep 10; done"

但是我在网络上遇到了很多问题。似乎这个架构上的网络层有缺陷,有时它会随机下载一个图像或组件。
有没有办法让它与一种或另一种体系结构一起工作?

相关问题