Cuttlefish虚拟Android设备

1,687 阅读2分钟

我们常用的Android模拟器即AS中看到的其本身是基于Android Goldfish所产生,而Google推动的新一代模拟器代号是 Cuttlefish。 Cuttlefish更接近真实设备的性能,也支持更高更新的Android版本,更灵活的虚拟化支持。

环境参数:

  • android-14.0.0_r27
  • Ubuntu 22.04.5 LTS
  • aosp_cf_x86_64_phone-userdebug

安装Android Cuttlefish

验证KVM可用性

确认一下机器是否支持虚拟化:

grep -c -w "vmx|svm" /proc/cpuinfo

此命令返回非零值为可用。

在ARM64机器运行,检查 /dev/kvm:

find /dev -name kvm

使用此命令来确认是否在任何环境中都支持 KVM

下载cuttlefish

sudo apt install -y git devscripts equivs config-package-dev debhelper-compat golang curl
git clone https://github.com/google/android-cuttlefish

后续可能出现的问题

  1. 下载Bazel APT 软件仓库

    Google开源的编译构建工具,与makefile & CMake不同,主要用于云编译。

    build_packages.sh脚本会去下载bazel构建工具,可能会出现如下错误:

    Failed to connect to bazel.build port 443 after 134965
    

    需要修改本地镜像,手动去下载Bazel APT 软件仓库

    使用以下命令启用 bazel-apt 仓库

    sudo apt install apt-transport-https curl gnupg
    curl -fsSL https://bazel.build/bazel-release.pub.gpg | gpg --dearmor >bazel-archive-keyring.gpg
    sudo mv bazel-archive-keyring.gpg /usr/share/keyrings
    echo "deb [arch=amd64 signed-by=/usr/share/keyrings/bazel-archive-keyring.gpg] https://mirrors.tuna.tsinghua.edu.cn/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list
    

    使用以下命令安装 bazel

    sudo apt update && sudo apt install bazel
    
  2. http error

    国内访问不了国外的Go库,在构建cuttlefish时会发生以下错误时: 所以我们需要设置代理:

    cd android-cuttlefish
    gedit frontend/src/goutil
    

    进入android-cuttlefish目录后编辑android-cuttlefish/frontend/src/goutil文件内容

    #屏蔽
    # export GOPROXY="proxy.golang.org|proxy.golang.org|direct"
    #新增
    go env -w GO111MODULE=on 
    go env -w GOPROXY=https://goproxy.cn,direct
    

构建cuttlefish

cd android-cuttlefish
tools/buildutils/build_packages.sh

最终运行结果: 图片.png

目录会新增几个deb文件,其中cuttlefish-base_*_*64.debcuttlefish-user_*_*64.deb比较重要:

图片.png

安装软件包并重启系统

sudo dpkg -i ./cuttlefish-base_*_*64.deb || sudo apt-get install -f
sudo dpkg -i ./cuttlefish-user_*_*64.deb || sudo apt-get install -f
sudo usermod -aG kvm,cvdnetwork,render $USER
sudo reboot

编译AOSP

aosp_cf_x86_64_phone-userdebug中的cf为Cuttlefish缩写

cd android-14.0.0_r27
source build/envsetup.sh
lunch aosp_cf_x86_64_phone-userdebug
make

启动Android Cuttlefish

默认情况下,Cuttlefish 使用 --start_webrtc 进行启动

launch_cvd

图片.png 终端显示启动成功后,浏览器访问https://localhost:8443,打开左侧开关,等待设备启动:

注意不要使用firfox访问cuttlefish的后台,否则会提示adb连接问题从而启动设备失败,需要使用chrome浏览器

图片.png

停止Android Cuttlefish

启动设备的同一目录内停止虚拟设备

stop_cvd

图片.png