首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在docker中获得gradle构建工具- Apple M1

无法在docker中获得gradle构建工具- Apple M1
EN

Stack Overflow用户
提问于 2022-02-24 01:28:20
回答 2查看 992关注 0票数 3

最近,我转向了苹果公司的M1,在创建一个最终在内置linux上运行的对接映像时遇到了问题。同样的代码在我使用英特尔芯片的MacBook上运行得很好,并成功地创建了一个对接映像。

sdkmanager试图使用最新的commandlinetools导入build-tools;${ANDROID_BUILD_TOOLS_VERSION}时,会出现问题,但会出现以下错误:

代码语言:javascript
复制
Warning: Dependant package with key emulator not found!
Warning: Unable to compute a complete list of dependencies.ates...

我能找到的最接近的问题是安装构建工具:找不到模拟器android出错,两者都没有任何解决方案。还请注意,我已经运行了sdkmanager --list,并且emulator并不作为可用的包出现在那里(仅在M1上)。

这是我的Dockerfile (我不经常使用修理工,所以如果代码不是最干净的,请原谅):

代码语言:javascript
复制
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,之前的实现是引入sdk-tools-linux-3859397.zip而不是commandlinetools-linux-8092744_latest.zip,这也可以通过M1上的sdkmanager引入build-tools,并创建了一个码头映像。

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

EN

回答 2

Stack Overflow用户

发布于 2022-08-26 12:41:56

我在M1 Pro上也遇到了同样的问题,也帮我解决了这个问题。

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

  1. 下载苹果硅emulator (示例或您可以在官方指南(归档)中找到更多链接)
  2. 解压缩Android文件夹中的文件夹(它将创建一个包含文件的SKD/emulator文件夹)
  3. 使用SDK/emulator/package.xml创建来自这里的内容文件,并使用下载的版本更新xml <revision><major>31</major><minor>1</minor><micro>4</micro></revision>的最后一部分
  4. 您不应该在M1上再次看到相同的错误。

扰流板警报:我仍然不能完全构建M1,因为在实际构建过程中,我得到了错误

代码语言:javascript
复制
qemu-x86_64: Could not open '/lib64/ld-linux-x86-64.so.2': No such file or directory
票数 0
EN

Stack Overflow用户

发布于 2022-10-07 07:10:32

我也有同样的问题。我认为没有用于linux/armv8 8的android‘模拟器’包。因此,您将无法使用对接与本机图像。

为了使用linux/x86_64而不是linux/armv8 8,我尝试配置文件,但还有其他问题。我在docker-compose.yaml中添加了这一行:

代码语言:javascript
复制
platform: linux/x86_64

就像这样:

代码语言:javascript
复制
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"

但我对网络有很多意见。这个体系结构上的网络层似乎是错误的,有时它被卡在下载图像或组件上。

是否有办法使它与一种或另一种架构一起工作?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71246017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档