为AOSP 6定制Android模拟器(ranchu)

Fir*_*his 8 qemu android-emulator android-source

我需要构建一个Android模拟器的自定义版本,并开始重建模拟器而不对AOSP 6.0.1 R62进行任何更改.

令我惊讶的是,仿真器源代码不再包含在AOSP中.仿真器似乎预先构建在AOSP存储库中.经过一些研究,我设法建立了qemu(ranchu)本身:

  1. 我下载了qemu来源:

    git clone -b qemu-android-2.2.0 \
    https://android.googlesource.com/platform/external/qemu-android
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我下载了位于不同存储库中的qemu的Android构建脚本:

    git clone https://qemu-android.googlesource.com/qemu-ranchu
    
    Run Code Online (Sandbox Code Playgroud)
  3. 我跑了 qemu-ranchu/scripts/rebuild.sh

该脚本构建QEMU和生成的二进制qemu-system-aarch64qemu-ranchu/binaries/linux-x86_64/.在AOSP中,有一个具有相同名称$aosp/prebuilts/android-emulator/linux-x86_64/qemu/linux-x86_64/的文件,但这不是最终用户将执行的文件.一个Android开发人员会运行一个名为emulatorin 的可执行文件$aosp/prebuilts/android-emulator/linux-x86_64/,它显然是某种基于qemu二进制文件的包装器.

所以实际的问题是:

  1. 是否有关于ranchu构建的文档及其涉及的所有内容?我找不到任何:(
  2. 不要将emulator*可执行文件里面包含他们QEMU还是他们执行外部QEMU的二进制?
  3. 如果我aosp/prebuilts/android-emulator/linux-x86_64/qemu/linux-x86_64/用我的自定义二进制文件覆盖qemu二进制文件,运行emulator实际上是否会调用我的自定义qemu?
  4. 我可以绕过emulatorqemu-system-aarch64直接运行我的AOSP映像吗?或者尝试配置它是疯了吗?
  5. 所有emulator*二进制文件的来源在哪里?

sts*_*uad 0

“ranchu”模型是“goldfish”平台的下一代版本。这是对带有一些 VirtIO 设备(块、网络、控制台)以及自定义半虚拟化“管道”设备的“virt”板的轻量级调整。这允许来宾的用户空间与主机通信,主机既可用于与主机上的 adb 通信等功能,也可用于加速 OpenGL 命令的直通接口。

“模拟器”命令是您正确推测主(大量分叉)QEMU 二进制文件的包装器。它在 QEMU 本身和模拟手机的皮肤显示屏之间提供了粘合剂。除了 adb、console 和 GL 之外,它还执行一些跟踪和内存监控。

现在有一个更现代的模拟器,称为 Cuttlefish,它消除了一些 NIH 谷歌添加的内容,并使用 VirtIO 来实现更标准化的设备模型。该模拟器本身基于CrosVM,设计为可在KVM下运行,这使其更适合在云中进行大规模测试。

总结一下您的问题的答案:

  1. 唯一真正的文档位于源代码中
  2. 模拟器执行 QEMU 的外部分叉版本
  3. 也许,我似乎记得它构建的 QEMU 叫做 qemu-android
  4. 尽管您可能会通过足够的努力获得仅 CLI 版本的 Android,但普通的 QEMU 构建不太可能起作用
  5. 代码位于 AOSP 树中

我的(非常旧的)笔记如下:

repo init -u https://android.googlesource.com/platform/manifest -b emu-master-dev
cd ${REPO_ROOT}external/qemu
./android-configure.sh --no-strip --debug
make -j4

#The actual "QEMU2" emulator will be in ../qemu-android but the qemu
#directory includes all the wrapper programs you need. The emulator
##configure script overrides and replaces the upstream configure script
#and ensures it is properly linked in with the OpenGL wrappers.

export ANDROID_PRODUCT_OUT=/home/alex/lsrc/qemu/android/hackbox.generic
./objs/emulator -verbose -show-kernel -logcat '*:s' -selinux permissive -kernel ~/lsrc/qemu/linux.git/arch/arm/boot/zImage -sysdir /home/alex/lsrc/qemu/android/hackbox.generic -data userdata.img -ranchu -memory 2548 -qemu -d unimp,guest_errors
Run Code Online (Sandbox Code Playgroud)