You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Proxmox虚拟机的GitLab CI/CD中运行Android模拟器?

解决方案:Proxmox虚拟机上GitLab Runner Docker执行器运行Android模拟器插桩测试

针对你在Proxmox虚拟机的GitLab Runner(Docker执行器)中运行Android模拟器插桩测试的需求,且无法开启Proxmox嵌套虚拟化的场景,提供以下可行方案:

方案1:给GitLab Runner虚拟机透传KVM设备(无需嵌套虚拟化)

无需在Proxmox全局开启嵌套虚拟化,仅给运行GitLab Runner的虚拟机单独透传宿主机的KVM设备,风险远低于全局嵌套虚拟化:

  • 在Proxmox宿主机找到目标虚拟机的配置文件(路径为/etc/pve/qemu-server/<VMID>.conf,<VMID>是你的GitLab Runner虚拟机ID),添加如下配置:
    args: -device kvm
    
  • 重启该虚拟机,登录后检查/dev/kvm是否存在,确保权限为root:kvm
  • 在GitLab CI配置中,给Docker执行器的容器添加设备映射并开启特权模式:
    android-test-job:
      script:
        # 初始化模拟器并运行测试
        - sdkmanager "system-images;android-33;google_apis;x86_64"
        - echo "no" | avdmanager create avd -n test-emulator -k "system-images;android-33;google_apis;x86_64"
        - emulator -avd test-emulator -no-window -no-audio -no-boot-anim &
        - adb wait-for-device
        - ./gradlew connectedAndroidTest
      tags:
        - docker-runner
      image: your-custom-android-ci-image # 包含Android SDK的自定义镜像
      privileged: true
      devices:
        - /dev/kvm:/dev/kvm
    

方案2:虚拟机层面预启动模拟器,CI容器远程连接

将Android模拟器直接运行在GitLab Runner所在的虚拟机上(利用透传的KVM加速),CI容器通过adb远程连接到模拟器,避免在容器内启动模拟器:

  • 在GitLab Runner虚拟机上安装Android SDK,创建并后台启动模拟器:
    # 安装必要组件
    sdkmanager "platform-tools" "emulator" "system-images;android-33;google_apis;x86_64"
    # 创建AVD
    avdmanager create avd -n persistent-emulator -k "system-images;android-33;google_apis;x86_64" -f
    # 后台启动模拟器(无窗口、无音频)
    nohup emulator -avd persistent-emulator -no-window -no-audio -no-boot-anim &
    # 设置adb允许远程连接
    adb tcpip 5555
    
  • 在GitLab CI配置中,让容器内的adb连接到虚拟机的模拟器:
    android-test-job:
      script:
        - adb connect <RUNNER_VM_IP>:5555
        - adb wait-for-device
        - ./gradlew connectedAndroidTest
      tags:
        - docker-runner
      image: your-custom-android-ci-image
    
    注:可将模拟器设置为开机自启,避免每次手动启动。

方案3:优化无硬件加速模拟器的启动参数(临时备选)

如果上述KVM方案暂时无法实施,可尝试优化无加速模拟器的启动参数(仅针对x86_64架构,arm64无加速基本无法正常运行):

emulator -avd test-emulator -no-window -no-audio -no-boot-anim -no-accel -memory 2048 -cores 2

添加内存和核心分配参数,部分情况下能提升模拟器响应速度,但性能仍远低于KVM加速,仅作为临时应急方案。

补充说明

你之前尝试的arm64-v8a无加速模拟器无法运行,核心原因是arm64模拟器在无硬件加速时,依赖软件模拟指令集,性能极差,几乎无法完成启动;x86_64架构的模拟器无加速时性能虽差,但通过参数优化有极小概率可用,但仍不推荐作为长期方案。

内容的提问来源于stack exchange,提问作者Ali Golmirzaei

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 16:46:04