【问题标题】:Custom Android emulator (ranchu) build for AOSP 6为 AOSP 6 构建的自定义 Android 模拟器 (ranchu)
【发布时间】:2017-02-07 13:56:16
【问题描述】:

我需要构建 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
    
  2. 我为 qemu 下载了 Android 构建脚本,它们位于不同的存储库中:

    git clone https://qemu-android.googlesource.com/qemu-ranchu
    
  3. 我跑了qemu-ranchu/scripts/rebuild.sh

该脚本构建了 qemu 并在qemu-ranchu/binaries/linux-x86_64/ 中生成了一个二进制文件qemu-system-aarch64。在 AOSP 中,$aosp/prebuilts/android-emulator/linux-x86_64/qemu/linux-x86_64/ 中有一个同名文件,但这不是最终用户将执行的文件。 Android 开发人员会在 $aosp/prebuilts/android-emulator/linux-x86_64/ 中运行名为 emulator 的可执行文件,这显然是对裸 qemu 二进制文件的某种包装。

所以实际的问题是:

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

【问题讨论】:

    标签: android-emulator android-source qemu


    【解决方案1】:

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

    “仿真器”命令就像您正确推测主(重分叉)QEMU 二进制文件的包装器一样。它在 QEMU 本身和模拟手机的蒙皮显示器之间提供了一种粘合剂。除了 adb、控制台和 GL,它还进行一些跟踪和内存监控。

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

    总结您的问题的答案:

    1. 唯一真正的文档在源代码中
    2. 模拟器执行 QEMU 的外部分支版本
    3. 也许,我好像记得它构建的 QEMU 叫 qemu-android
    4. 简单的 QEMU 构建不太可能工作,尽管您可能会通过足够的努力获得仅 CLI 的 Android 版本
    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
    

    【讨论】:

      猜你喜欢
      • 2018-09-04
      • 1970-01-01
      • 1970-01-01
      • 2017-09-19
      • 1970-01-01
      • 1970-01-01
      • 2020-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多