Starting March 27, 2025, we recommend using android-latest-release instead of aosp-main to build and contribute to AOSP. For more information, see Changes to AOSP.
The reboot triggers installing additional kernel modules and applies udev
rules.
Cuttlefish is part of the Android Open-Source Platform (AOSP). Builds of
the virtual device are found at the Android Continuous Integration site. To
find an index of all Android builds, navigate to the Android Continuous
Integration site at
http://ci.android.com/.
Enter a branch name. Use the default aosp-android-latest-release branch or
use a generic system image (GSI) branch
such as aosp-android13-gsi.
Navigate to the aosp_cf_x86_64_only_phone build target and click
userdebug for the latest build.
Click the green box below userdebug to select this build. A Details
panel appears with more information specific to
this build. In this panel, click Artifacts to see a list of all the
artifacts attached to this build.
In the Artifacts panel, download the artifacts for Cuttlefish.
Click the aosp_cf_x86_64_phone-img-xxxxxx.zip artifact for x86_64 or
the aosp_cf_arm64_only_phone-xxxxxx.zip artifact for ARM64, which
contains the device images. In the filename, "xxxxxx" is the build
ID for this device.
Scroll down in the panel and download cvd-host_package.tar.gz. Always
download the host package from the same build as your images.
On your local system, create a container folder and extract the packages:
In the same folder where you launched Cuttlefish, run the following
command to see a list of all the Android devices available through adb on your
host machine:
./bin/adb devices
View and interact with the virtual device in the web
By default, Cuttlefish launches with --start_webrtc, which enables a webview
through port 8443 on the host machine.
To view and interact with your virtual devices, navigate to
https://localhost:8443 in your web browser.
Stop the virtual device within the same directory as you used to launch the
device:
HOME=$PWD ./bin/stop_cvd
Content and code samples on this page are subject to the licenses described in the Content License. Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
Last updated 2025-06-12 UTC.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-06-12 UTC."],[],[],null,["# Get started\n\nThis page describes how to launch an AOSP build using\n[Cuttlefish](/docs/devices/cuttlefish).\n\nVerify KVM availability\n-----------------------\n\nCuttlefish is a virtual device and is dependent on virtualization being\navailable on the host machine.\n\nIn a terminal on your host machine, make sure that virtualization with a\nKernel-based Virtual Machine (KVM) is available: \n\n grep -c -w \"vmx\\|svm\" /proc/cpuinfo\n\nThis command should return a nonzero value.\n| **Note:** On a cloud machine, you might need to follow cloud-specific or vendor-specific steps to enable KVM. For Google Compute Engine (GCE), see [About nested virtualization](https://cloud.google.com/compute/docs/instances/enable-nested-virtualization-vm-instances).\n\nWhen running on an ARM64 machine, the most direct way is to check for\n`/dev/kvm`: \n\n find /dev -name kvm\n\n| **Tip:** You can use this command to confirm support of KVM on any environment.\n\n*** ** * ** ***\n\nLaunch Cuttlefish\n-----------------\n\n1. In a terminal window, download, build, and install the host Debian packages:\n\n sudo apt install -y git devscripts equivs config-package-dev debhelper-compat golang curl\n git clone https://github.com/google/android-cuttlefish\n cd android-cuttlefish\n tools/buildutils/build_packages.sh\n sudo dpkg -i ./cuttlefish-base_*_*64.deb || sudo apt-get install -f\n sudo dpkg -i ./cuttlefish-user_*_*64.deb || sudo apt-get install -f\n sudo usermod -aG kvm,cvdnetwork,render $USER\n sudo reboot\n\n The reboot triggers installing additional kernel modules and applies `udev`\n rules.\n2. Cuttlefish is part of the Android Open-Source Platform (AOSP). Builds of\n the virtual device are found at the Android Continuous Integration site. To\n find an index of all Android builds, navigate to the Android Continuous\n Integration site at\n \u003chttp://ci.android.com/\u003e.\n\n3. Enter a branch name. Use the default `aosp-android-latest-release` branch or\n use a [generic system image (GSI) branch](/docs/setup/create/gsi#building-gsis)\n such as `aosp-android13-gsi`.\n\n4. Navigate to the **aosp_cf_x86_64_only_phone** build target and click\n **userdebug** for the latest build.\n\n | **Tip:** For ARM64, use the branch `aosp-android-latest-release` and the device target `aosp_cf_arm64_only_phone-userdebug`.\n5. Click the green box below **userdebug** to select this build. A **Details**\n panel appears with more information specific to\n this build. In this panel, click **Artifacts** to see a list of all the\n artifacts attached to this build.\n\n6. In the Artifacts panel, download the artifacts for Cuttlefish.\n\n 1. Click the `aosp_cf_x86_64_phone-img-xxxxxx.zip` artifact for x86_64 or\n the `aosp_cf_arm64_only_phone-xxxxxx.zip` artifact for ARM64, which\n contains the device images. In the filename, \"xxxxxx\" is the build\n ID for this device.\n\n 2. Scroll down in the panel and download `cvd-host_package.tar.gz`. Always\n download the host package from the same build as your images.\n\n7. On your local system, create a container folder and extract the packages:\n\n 1. x86_64 architecture:\n\n mkdir cf\n cd cf\n tar -xvf /path/to/cvd-host_package.tar.gz\n unzip /path/to/aosp_cf_x86_64_phone-img-\u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-nx\"\u003exxxxxx\u003c/span\u003e\u003c/var\u003e.zip\n\n \u003cbr /\u003e\n\n 2. ARM64 architecture:\n\n mkdir cf\n cd cf\n tar -xvf /path/to/cvd-host_package.tar.gz\n unzip /path/to/aosp_cf_arm64_only_phone-img-\u003cvar translate=\"no\"\u003e\u003cspan class=\"devsite-syntax-nx\"\u003exxxxxx\u003c/span\u003e\u003c/var\u003e.zip\n\n \u003cbr /\u003e\n\n8. Launch Cuttlefish:\n\n HOME=$PWD ./bin/launch_cvd --daemon\n\nVerify that Cuttlefish is visible through adb\n---------------------------------------------\n\nSimilar to a physical device, Cuttlefish is visible through the\n[Android Debug Bridge (adb)](/docs/setup/build/adb).\n\nIn the same folder where you launched Cuttlefish, run the following\ncommand to see a list of all the Android devices available through adb on your\nhost machine: \n\n ./bin/adb devices\n\nView and interact with the virtual device in the web\n----------------------------------------------------\n\nBy default, Cuttlefish launches with `--start_webrtc`, which enables a webview\nthrough port 8443 on the host machine.\n\nTo view and interact with your virtual devices, navigate to\n**https://localhost:8443** in your web browser.\n\nFor more information, see\n[Cuttlefish: WebRTC Streaming](/docs/devices/cuttlefish/webrtc).\n\nStop Cuttlefish\n---------------\n\nStop the virtual device within the same directory as you used to launch the\ndevice: \n\n HOME=$PWD ./bin/stop_cvd"]]