【发布时间】:2022-10-07 15:10:32
【问题描述】:
我最近切换到 Apple M1,但在创建最终在 Buildkite linux CI 上运行的 docker 映像时遇到问题。相同的代码在我的配备 Intel 芯片的 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/*
边注;我不得不将 jdk8 的使用升级到 jdk11 用于 Android 构建代理,之前的实现是拉入 sdk-tools-linux-3859397.zip 而不是 commandlinetools-linux-8092744_latest.zip,并且能够通过 sdkmanager 拉入 build-tools 在 M1 上就好了还创建了一个 docker 映像。
鉴于它建立在 Intel 之上,我的任务在技术上是完整的,但从长远来看,它在 M1 上运行会容易得多。有任何想法吗?或者任何人都可以建议提出这个问题的正确地方是什么?您认为这是 google 命令行工具问题还是 docker 问题?
标签: android docker gradle apple-m1 android-sdk-manager