Vmware+Ubuntu20+Cuttlefish模拟运行Android12

使用Cuttlefish模拟运行Andoird12~
Views: 1235
4 1
Read Time:1 Minute, 40 Second

最近出于工作需要,开始接触Android模拟器Cuttlefish。其实在接触Cuttlefish之前,我曾在AndroidStuido内使用过其内置集成的模拟器。而在AndroidStudio内集成的模拟器实际上是由Goldfish进行实现的,其可以用于Application的模拟运行,但是无法模拟整个系统的运行。而Cuttlefish能够在最大程度上地还原系统在真实硬件上的运行,非常适合用来测试编译出来的系统镜像。

今天这篇教程就来教大家如何在虚拟机内使用Cuttlefish模拟器来模拟运行Android系统。在写这篇教程之前,我曾Google与百度了很多资料,几乎没有太多有用的信息,希望这篇教程能够帮助到大家,欢迎各位转载~

在本教程中,所需环境为VMware® Workstation 16 Pro,安装的虚拟机为Ubuntu20,最终运行的Android为Android12。

运行环境

Preliminary preparation

由于Cuttlefish模拟器的运行需要系统支持KVM,所以 我们在使用VMware创建Ubuntu时,需要使能虚拟化Intel VT-x/EPT或AMD-V/RVI(V)选项,如图所示:

当我们的Ubantu系统启动后,使用如下命令检查是否支持KVM:

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

如果输出结果为非0,则表明支持KVM,否则代表不支持,无法运行Cuttlefish。

之后,我们需要安装一些必要的依赖,使用如下命令进行安装:

sudo apt install -y git devscripts config-package-dev debhelper-compat

事实上在编译运行Cuttlefish时是需要golang的,这里不推荐大家使用apt安装golang,因为apt中golang的版本还为1.13,版本比较老旧,这里推荐大家手动安装golang,手动安装golang的教程不在这里赘述,可以自行Google。在本教程中,使用的golang版本为:go version go1.18 linux/amd64。

安装好依赖之后,请在保证自己为root用户的情况下(这一点非常重要,可以避免后续一些问题)创建一个名为cuttlefish的文件夹,使用如下命令进行创建:

mkdir -p ~/cuttlefish

进入到cuttlefish目录,拉取cuttlefish相关代码:

git clone https://github.com/google/android-cuttlefish && cd android-cuttlefish

使用dpkg进行编译:

debuild -i -us -uc -b -d

进行安装:

dpkg -i ../cuttlefish-base_*_*64.deb
dpkg -i ../cuttlefish-user_*_*64.deb
dpkg -i ../cuttlefish-common_*_*64.deb

在这一步的过程中,有可能会提示缺少bridge-utils相关依赖,请使用如下命令进行安装相关依赖:

sduo apt-get install bridge-utils

在dpkg安装完成后,还需要针对模拟器的运行修改一些权限,使用如下命令:

sudo usermod -aG kvm,cvdnetwork,render $USER

权限更改完成后,使用sudo reboot命令重启系统,在重启的过程中将会安装一些关键的模块。

重启完成后,我们需要去Android官方的网站去下载我们需要模拟运行的版本镜像。进入http://ci.android.com/,这是Android持续集成编译的网站,我们需要关注的是下载镜像名中包含cf的镜像,如图所示:

如果你不太确定该选择哪一个,个人建议选择aosp_cf_x86_64_phone这个版本,点击下载按钮的地方,点击Artifacts

点击进入之后,我们下载名为aosp_cf_x86_64_phone-img-xxxxxx.zip与cvd-host_package.tar.gz的这两个文件(在Ubuntu内可以通过curl或者wget下载)。之后使用如下命令进行解压:

mkdir cf
cd cf
tar xvf /path/to/cvd-host_package.tar.gz
unzip /path/to/aosp_cf_x86_64_phone-img-xxxxxx.zip

注意事项:

1. /path/to/ 指存放以上两个文件的真实目录前缀,请勿照搬~

2. aosp_cf_x86_64_phone-img-xxxxxx.zip 与 cvd-host_package.tar.gz 必须是同一个Build下的文件

之后,我们启动Cuttlefish:

HOME=$PWD ./bin/launch_cvd

在实际运行过程中,我发现在某些CPU类型上是无法正常启动成功的,如果Intel的11代或者12代处理器上,往往无法正常启动。在咨询了Google官方开发者后,可以通过如下命令启动模拟器:

HOME=$PWD ./bin/launch_cvd --vm_manager=qemu_cli

原因大致是由于Cuttlefish的底层VM是crosVM,在平台兼容上存在问题,可以通过上述命令切换为QEMU,如果提示系统没有QEMU,通过如下命令进行安装:

sudo apt-get install qemu-kvm

在模拟器启动成功后,我们可以看到这样的输出:

这就代表我们的Cuttlefish已经成功开始运行Andoird系统。如在启动过程中提示权限相关问题,请使用如下命令之后再重启:

sudo usermod -aG kvm,cvdnetwork,render root

同时Cuttlefish支持使用adb模式进行debug,我们可以通过如下命令开启adb调试:

./bin/adb -e shell

效果如图所示:

此时我们可以看看系统运行的一些进程是否正常(此处system_server与surfaceflinger均正常运行):

我们再通过getprop命令观察一下系统信息:

这里可以明显看到,Android版本为1 2,sdk版本为32。

另外,我试了一下在系统内ping百度,居然是通的,想必是利用了宿主机的网络。

如果我们需要关闭Cuttlefish,使用如下命令进行关闭:

HOME=$PWD ./bin/stop_cvd

以上模拟运行的是我们下载的官方镜像,那么其实我们也可以模拟运行自己编译的镜像,此时我们需要在AOSP源码编译环境的顶层目录下进行操作:

source  build/envsetup.sh
launch   aosp_cf_****.img
launch_cvd

如果我们需要可视化界面怎么办呢,很简单。我们可以通过在launch_cvd命令后增加–start_webrtc=true来开启webrtc,此时我们可以在本机或者远程主机上通过Chrome浏览器网页进入可视化界面,网页地址为https://ip:8443,其中ip为cuttlefish运行环境所在的ip,如图所示:

以上就是本篇博客的全部内容啦,希望能够对大家有所帮助~

Happy
Happy
100 %
Sad
Sad
0 %
Excited
Excited
0 %
Sleepy
Sleepy
0 %
Angry
Angry
0 %
Surprise
Surprise
0 %
FranzKafka95
FranzKafka95

极客,文学爱好者。如果你也喜欢我,那你大可不必害羞。

Articles: 88

One comment

Leave a Reply

Your email address will not be published. Required fields are marked *

en_USEN