什么是 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
- 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.
- 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.
- Go to http://ci.android.com/
- Enter a branch name. Start with
aosp-master
if you don‘t know what you’re looking for - Navigate to
aosp_cf_x86_64_phone
and click onuserdebug
for the latest build - Click on
Artifacts
- Scroll down to the OTA images. These packages look like
aosp_cf_x86_64_phone-img-xxxxxx.zip
-- it will always haveimg
in the name. Download this file - Scroll down to
cvd-host_package.tar.gz
. You should always download a host package from the same build as your images. - 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
- Launch cuttlefish with:
$ HOME=$PWD ./bin/launch_cvd
- 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 下运行效果:
这个部署麻烦吗?
按照教程一步步走就行
能不能加个Q:364923792,付费