我们常用的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
后续可能出现的问题
-
下载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 -
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
最终运行结果:
目录会新增几个deb文件,其中cuttlefish-base_*_*64.deb和cuttlefish-user_*_*64.deb比较重要:
安装软件包并重启系统
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
终端显示启动成功后,浏览器访问
https://localhost:8443,打开左侧开关,等待设备启动:
注意不要使用firfox访问cuttlefish的后台,否则会提示adb连接问题从而启动设备失败,需要使用chrome浏览器
停止Android Cuttlefish
启动设备的同一目录内停止虚拟设备
stop_cvd