【问题标题】:How can I use an emulator running on a docker container from another docker container?如何从另一个 docker 容器使用在 docker 容器上运行的模拟器?
【发布时间】:2019-05-06 15:09:45
【问题描述】:

为了在任何 jenkins 代理中执行我的测试而不需要任何额外的设置,我想让一切都在 Docker 中运行。

我的第一个方法是使用包含我所需的一切的基础映像,即我的应用程序代码、Android SDK、Flutter、模拟器和模拟器映像。遗憾的是,图像大小超过了 10 GB,所以我决定拆分职责:

  • 我的基础镜像将只包含 Androi sdk。以下图像将从它继承:

  • 图像 1 将让我的应用程序安装有卷和 Flutter,以便构建/测试。

  • Image 2 将运行模拟器。

这是我设置的 docker-compose:

---

version: '3'

services:
  flutter:
    build:
      args:
        - "FLUTTER_CHANNEL=stable"
        - "FLUTTER_VERSION=1.2.1"
      context: .
      dockerfile: DockerfileFlutter
    volumes:
      - .:/app
    working_dir: /app
    command: ["flutter", "test"]

  emulator:
    build:
      context: .
      dockerfile: DockerfileAndroidEmulator
    container_name: "emulator"
    privileged: true
    extra_hosts:
      - "emulator:127.0.0.1"
    depends_on:
      - flutter
    links:
      - flutter
    command: ["/opt/android-sdk-linux/tools/emulator", "@flutter_emulator", "-no-skin", "-no-audio", "-no-window"]

我面临的问题是我无法使用正在运行的模拟器,因为当我在服务flutter 中执行 adb devices 时,我没有看到在服务emulator 中启动并运行的模拟器.

我尝试通过adb connect 进行连接,但这不起作用。有没有我遗漏的可能解决方案或我做错了什么?

提前致谢。

【问题讨论】:

    标签: docker jenkins docker-compose android-emulator adb


    【解决方案1】:

    需要满足几个前提条件:

    • adb-server 正在“模拟器”容器上运行 adb start-server
    • adb-server 查看你的模拟器adb devices
    • adb-server 监听 5037 端口
    • 您可以从“flutter”容器访问此端口 - 检查 docker 网络https://docs.docker.com/compose/networking/

    延伸阅读:https://developer.android.com/studio/command-line/adb

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-20
      • 2021-10-02
      • 1970-01-01
      相关资源
      最近更新 更多