王锐
王锐
发布于 2026-09-13 / 6 阅读
0
0

使用cuttlefish虚拟机测试AOSP程序

一、通过docker搭建 cuttlefish 虚拟设备

1.1 构建 cuttlefish 基础镜像,Dockerfile 文件内容如下:

1. 构造传入了 apt 代理 以及 http 代理,构造时,可以传入此变量避免网速访问失败导致问题

2. 使用 /home/cuttlefish 作为工作目录

FROM ubuntu:24.04

ENV DEBIAN_FRONTEND=noninteractive

ARG APT_HTTP_PROXY
ARG APT_HTTPS_PROXY

RUN printf 'Acquire::http::Proxy "%s";\n' "${APT_HTTP_PROXY}" \
        > /etc/apt/apt.conf.d/99proxy && \
    printf 'Acquire::https::Proxy "%s";\n' "${APT_HTTPS_PROXY}" \
        >> /etc/apt/apt.conf.d/99proxy

ARG HTTP_PROXY
ARG HTTPS_PROXY
ARG NO_PROXY

ARG http_proxy
ARG https_proxy
ARG no_proxy

RUN apt-get update && \
    apt-get install -y \
        ca-certificates \
        curl \
        gnupg \
        sudo \
        iproute2 \
        iptables \
        iputils-ping \
        net-tools \
        procps \
        adb \
        jq \
        unzip \
        rsync \
        socat \
        openssh-client \
        kmod \
        acl \
        && rm -rf /var/lib/apt/lists/*

# ------------------------------------------------------------
# Google Cuttlefish Artifact Registry
# ------------------------------------------------------------

RUN curl -v \
        --proxy "${HTTPS_PROXY}" \
        --connect-timeout 10 \
        --max-time 60 \
        -fsSL \
        https://us-apt.pkg.dev/doc/repo-signing-key.gpg \
        -o /etc/apt/trusted.gpg.d/artifact-registry.asc \
    && chmod a+r /etc/apt/trusted.gpg.d/artifact-registry.asc \
    && echo \
       "deb https://us-apt.pkg.dev/projects/android-cuttlefish-artifacts android-cuttlefish main" \
       > /etc/apt/sources.list.d/android-cuttlefish-artifacts.list

RUN apt-get update && \
    apt-get install -y \
        cuttlefish-base \
        cuttlefish-user \
    && rm -rf /var/lib/apt/lists/*

# Cuttlefish 常用目录
RUN mkdir -p \
    /aosp-out \
    /cvd-state \
    /home/cuttlefish

COPY entrypoint.sh /usr/local/bin/cuttlefish-entrypoint

RUN chmod +x /usr/local/bin/cuttlefish-entrypoint

ENV HOME=/home/cuttlefish

WORKDIR /home/cuttlefish

ENTRYPOINT ["/usr/local/bin/cuttlefish-entrypoint"]

CMD ["sleep", "infinity"]

配置完成后,即可通过命令 docker compose build cuttlefish-common 开始构造,也可代代理参数构造,命令如下:

docker build \
  -t local/cuttlefish-host:ubuntu24.04 \
  --build-arg HTTP_PROXY=http://10.44.0.10:18080 \
  --build-arg HTTPS_PROXY=http://10.44.0.10:18080 \
  --build-arg NO_PROXY=localhost,127.0.0.1,.local \
  --build-arg APT_HTTP_PROXY=http://10.44.0.10:18080 \
  --build-arg APT_HTTPS_PROXY=http://10.44.0.10:18080 \
  .

1.2 配置docker_compose.yml 文件并启动容器

docker-compose.yml的内容如下

需要注意的是,/data/aosp/out 为主机上的 aosp 编译生成产物,如果不是此路径,可按需修改成宿主机上的 aosp 编译生成产物的路径

services:

  cuttlefish-common:
    build:
      context: .
      dockerfile: Dockerfile
      # 构建时传入代理(仅 build 阶段使用,不会进入最终容器)
      args:
        HTTP_PROXY: ${http_proxy:-}
        HTTPS_PROXY: ${https_proxy:-}
        NO_PROXY: ${NO_PROXY:-localhost,127.0.0.1,.local}

    image: local/cuttlefish-host:ubuntu24.04

    container_name: cuttlefish-common
    hostname: cuttlefish-common

    privileged: true
    ulimits:
      nofile:
        soft: 1048576
        hard: 1048576

    devices:
      - /dev/kvm:/dev/kvm
      - /dev/net/tun:/dev/net/tun
      - /dev/vhost-net:/dev/vhost-net
      - /dev/vhost-vsock:/dev/vhost-vsock

    volumes:
      # AOSP 编译产物
      - /data/aosp/out:/aosp-out

      # user01 独立 HOME / Cuttlefish 状态
      - /data/cuttlefish/common/home:/home/cuttlefish

      # 独立 runtime
      - /data/cuttlefish/common/state:/cvd-state

    ports:
      # WebRTC
      - "8443:8443"

      # ADB
      - "6520:6520"

      # WebRTC media
      - "15550-15599:15550-15599/udp"

    environment:
      HOME: /home/cuttlefish
      CUTTLEFISH_INSTANCE: "1"

    shm_size: "2gb"

    restart: unless-stopped

配置完毕后,执行 docker compose up -d 启动容器

二、测试

测试流程如下:

# 1. 首先进入容器中
sudo docker compose exec cuttlefish-common bash

# 2. 配置全局环境变量,按需修改
export CVD_HOST_DIR=/aosp-out/host/linux-x86/cvd-host_package
export PATH=$CVD_HOST_DIR/bin:$PATH
export ANDROID_PRODUCT_OUT=/aosp-out/target/product/vsoc_x86_64_only

# 3. 建立软连接
ln -s /aosp-out/host/linux-x86/cvd-host_package/etc /home/cuttlefish/etc
ln -s /aosp-out/host/linux-x86/cvd-host_package/usr /home/cuttlefish/usr

# 4. 指定 aosp 编译目标程序后,启动项目
launch_cvd --system_image_dir=/aosp-out/target/product/vsoc_x86_64_only

# 5. 启动成功后,即可连接主机进行相关测试
adb connect 127.0.0.1:6520

三、调试时,常用命令

待完善

四、带完善内容

为了方便测试,本容器给出的权限还是太多了,后期完善 docker compose 文件


评论