无法在Apple M1中获取渐变构建工具



我最近切换到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...

我能找到的最接近的问题是安装构建工具:找不到模拟器和安卓sdk出错,两者都没有任何解决方案。还要注意的是,我已经运行了sdkmanager --list,而emulator并不是可用的包(仅在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构建代理将jdk8的使用升级到jdk11,之前的实现是引入sdk-tools-linux-3859397.zip而不是commandlinetools-linux-8092744_latest.zip,并且能够通过sdkmanager引入build-tools,这在M1上也很好,并创建了一个docker映像。

考虑到它建立在英特尔上,我的任务在技术上是完整的,但从长远来看,它在M1上运行会容易得多。有什么想法吗?或者有人能建议在什么地方提出这个问题吗?你认为这是谷歌命令行工具的问题还是docker的问题?

我刚刚在M1 Pro上遇到了同样的问题,这为我解决了问题。

简而言之:emulator在Arm(M1)上还不可用,所以您需要手动安装它。你可以遵循官方指南,但简而言之,这对我有效

  1. 下载适用于Apple Silicon的emulator(例如,或者您可以在[官方指南]中找到更多链接(https://developer.android.com/studio/emulator_archive
  2. 解压缩Android SDK文件夹中的文件夹(它将创建一个包含文件的SKD/emulator文件夹)
  3. 使用此处的内容创建SDK/emulator/package.xml文件,并使用下载的版本更新xml<revision><major>31</major><minor>1</minor><micro>4</micro></revision>的最后一部分
  4. 您不应该在M1上再次看到相同的错误

剧透警报:我仍然无法在M1上完全构建,因为在实际构建过程中,我收到错误

qemu-x86_64: Could not open '/lib64/ld-linux-x86-64.so.2': No such file or directory

我也有同样的问题。我认为没有适用于linux/armv8的android"模拟器"包。因此,您将无法将docker与原生图像一起使用。

我试图配置docker compose文件,以便使用linux/x86_64而不是linux/armv8,但还有其他问题。我在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"

但我对网络有很多问题。这个体系结构上的网络层似乎有缺陷,有时它会随机下载图像或组件。。。

有没有一种方法可以让它与一个或其他架构协同工作?

最新更新