一 编译system.img
下载最新的android代码,运行编译
lunch选择aosp_x86-eng
make编译整个工程
在out/target/product/generic_x86目录下有:
system.img system-qemu.img userdata.img vendor-qemu.img vendor.img kernel-ranchu-64 ramdisk.img
选择system-qemu.img和vendor-qemu.img,这两个镜像是专门为qemu运行制作的,如果选择system.img 和vendor.img,则avd运行失败。
二 替换AVD的镜像
在sdk下进入如下目录,使用上面的镜像替换下面的镜像,system-qemu.img重名为system.img,vendor-qemu.img重命名为vendor.img。替换kernel-ranchu-64 更新kernel,替换ramdisk.img 更新rootfs,替换userdata.img更新userdata.
~/Android/Sdk/system-images/android-P/google_apis_playstore/x86$ ls
advancedFeatures.ini encryptionkey.img package.xml system.img
build.prop kernel-ranchu-64 ramdisk.img userdata.img
data NOTICE.txt source.properties vendor.img
如果出现运行失败的话,将虚拟机的快照删除在:
~/.android/avd/Nexus_5X_API_P.avd$ ls
AVD.conf encryptionkey.img system.img.qcow2
cache.img encryptionkey.img.qcow2 userdata.img
cache.img.qcow2 hardware-qemu.ini userdata-qemu.img
config.ini sdcard.img userdata-qemu.img.qcow2
data sdcard.img.qcow2 vendor.img.qcow2
emulator-user.ini snapshots version_num.cache
.android/avd/Nexus_5X_API_P.avd$ rm *.qcow2
~/.android/avd/Nexus_5X_API_P.avd$ ls //快照删除了
AVD.conf data hardware-qemu.ini userdata.img
cache.img emulator-user.ini sdcard.img userdata-qemu.img
config.ini encryptionkey.img snapshots version_num.cache
三 使用串口调试emulator
使用如下命令可以启动已经创建的虚拟机,并在当前窗口输出串口信息便于我们进行debug
$emulator -avd Pixel_2_XL_API_28 -shell