android - 无法在 docker 中获取 gradle build-tools - Apple M1

标签 android docker gradle apple-m1 android-sdk-manager

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

我能找到的最接近的问题是 Install build-tools: emulator not found Error with android 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 镜像。

鉴于它基于 Intel,我的任务在技术上已经完成,但从长远来看,它在 M1 上运行会容易得多。有任何想法吗?或者任何人都可以建议在什么地方提出这个问题?您认为这是 google 命令行工具问题还是 docker 问题?

最佳答案

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

简而言之:emulator在 Arm (M1) 上尚不可用,因此您需要手动安装它。可以关注official guide但简而言之,这对我有用

  1. 下载emulator对于 Apple Silicon( example 或者您可以在 [官方指南]( https://developer.android.com/studio/emulator_archive
  2. 解压Android SDK文件夹中的文件夹(它会创建一个SKD/emulator文件夹,里面有文件)
  3. 创建 SDK/emulator/package.xml文件 content from here并更新 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

关于android - 无法在 docker 中获取 gradle build-tools - Apple M1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71246017/

相关文章:

android - 在命令行或Android Studio中使用Gradle?

gradle - 如何使用 Gradle 重新运行失败的 TestNG 测试

android - Android Kotlin协同例程异常

Android解码并保存从 Intent 返回的音频流

android - 设置横向而不锁定传感器方向

linux - 如何使用 docker 镜像构建应用程序?

docker - 如何在 docker 容器中运行 Symfony 控制台命令

django - Docker:服务 'web'无法构建(Django应用程序)

android-studio - Android Studio - 构建库 aar 文件不会将 flavor 或 buildType 附加到输出

android - 在矩形外填充 Canvas