什么是 Cuttlefish?

Cuttlefish 是一种可配置的虚拟 Android 设备,既可以远程运行(使用第三方云产品,如 Google Cloud Engine),又可以在本地运行(在 Linux x86 机器上)。

Cuttlefish 的目标

  • 使平台和应用开发者不再依赖于物理硬件来开发和验证代码更改。
  • 通过与核心框架保持高度一致,以高保真度为重点来复制真实设备的基于框架的行为。
  • 支持 API 级别 28 之后的所有 API 级别。
  • 在各个 API 级别达到一致的功能水平,与物理硬件上的行为保持一致。
  • 实现规模化:
    • 能够并行运行多台设备。
    • 能够并发执行测试,实现高保真度且入门成本较低。
  • 提供可配置的设备,能够调整设备类型、RAM、CPU 等。

Cuttlefish 与其他设备的对比情况

Cuttlefish 和 Android 模拟器

Cuttlefish 与 Android 模拟器有许多相似之处,但 Cuttlefish 可以保证 Android 框架(无论这是纯 AOSP,还是您自己的树中的自定义实现)实现全保真。在实际应用中,这意味着 Cuttlefish 应该会在操作系统级别响应您的互动,就像使用相同的自定义或纯 Android 操作系统源代码构建的实体手机目标一样。

Android 模拟器围绕简化应用开发的用例构建而成,它包含许多功能钩子来迎合 Android 应用开发者的用例。如果您要使用您的自定义 Android 框架来构建模拟器,这可能会带来一些挑战。如果您需要能够代表您的自定义平台/框架代码或 Android 树形结构的虚拟设备,那么 Cuttlefish 虚拟设备是理想的选择。它是用于表示当前 AOSP 开发状态的规范设备。

Cuttlefish 和物理设备

Cuttlefish 虚拟设备与物理设备之间的主要区别在于硬件抽象层 (HAL) 级别,以及与任何自定义硬件互动的任何软件。除了硬件专用实现之外,您应该会发现 Cuttlefish 和物理设备表现出在功能上等效的行为。

Cuttlefish 有哪些益处?

您可以像与任何可能用于调试的其他 Android 设备互动一样与 Cuttlefish 互动。它会通过 adb 将自身注册为正常设备,您可以像与物理设备互动一样通过远程桌面与之互动。Cuttlefish 的用例非常广泛,涵盖应用测试、自定义系统构建测试等。

由于 Cuttlefish 力求实现框架全保真,因此可用于对您的框架和/或应用进行功能测试,在测试中没有无法模拟的物理硬件依赖项。

目前 Cuttlefish 通常如何用于测试?

Cuttlefish 在测试方面的一些常见应用包括:

  • CTS
  • 框架合规性
  • 持续集成测试
  • 自定义测试套件

我是否可以在云端托管 Cuttlefish?

可以,Cuttlefish 本身支持 Google Cloud,并计划支持其他云平台。

Cuttlefish Getting Started

Try Cuttlefish

  1. Make sure virtualization with KVM is available. grep -c -w "vmx\|svm" /proc/cpuinfo This should return a non-zero value. If running on a cloud machine, this may take cloud-vendor-specific steps to enable. For Google Compute Engine specifically, see the GCE guide.

ARM specific steps:

  • When running on an ARM machine, the most direct way is to check for the existence of /dev/kvm. Note that this method can also be used to confirm support of KVM on any environment.
  • Before proceeding to the next step, please first follow the guide to adjust APT sources.
  1. Download, build, and install the host debian package:sudo apt install -y git devscripts config-package-dev debhelper-compat git clone https://github.com/google/android-cuttlefish cd android-cuttlefish debuild -i -us -uc -b sudo dpkg -i ../cuttlefish-common_*_*64.deb || sudo apt-get install -f sudo usermod -aG kvm,cvdnetwork $USER sudo reboot The reboot will trigger installing additional kernel modules and applying udev rules.
  2. Go to http://ci.android.com/
  3. Enter a branch name. Start with aosp-master if you don‘t know what you’re looking for
  4. Navigate to aosp_cf_x86_64_phone and click on userdebug for the latest build
  5. Click on Artifacts
  6. Scroll down to the OTA images. These packages look like aosp_cf_x86_64_phone-img-xxxxxx.zip -- it will always have img in the name. Download this file
  7. Scroll down to cvd-host_package.tar.gz. You should always download a host package from the same build as your images.
  8. On your local system, combine the packages:mkdir cf cd cf tar xvf /path/to/cvd-host_package.tar.gz unzip /path/to/aosp_cf_x86_64_phone-img-xxxxxx.zip
  9. Launch cuttlefish with:

$ HOME=$PWD ./bin/launch_cvd

  1. Stop cuttlefish with:

$ HOME=$PWD ./bin/stop_cvd

Debug Cuttlefish

You can use adb to debug it, just like a physical device:

$ ./bin/adb -e shell

Launch Viewer (WebRTC)

When launching with ---start_webrtc (the default), you can see a list of all available devices at https://localhost:8443 . For more information, see the WebRTC on Cuttlefish documentation.

Launch Viewer (VNC)

When launching with --start_vnc_server=true , You can use the TightVNC JViewer. Once you have downloaded the TightVNC Java Viewer JAR in a ZIP archive, run it with

$ java -jar tightvnc-jviewer.jar -ScalingFactor=50 -Tunneling=no -host=localhost -port=6444

Click “Connect” and you should see a lock screen!

webRTC 下运行效果:

3 thoughts on “android新一代模拟器cuttlefish”

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注