This page describes cvdr and its usage.
cvdr is a CLI binary tool for accessing and managing Cuttlefish instances
remotely.
It wraps Cloud Orchestrator, to provide user-friendly
interface.
cuttlefish-cvdremote is available to download via apt install with adding
the apt repository at Artifact Registry:
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://us-apt.pkg.dev/doc/repo-signing-key.gpg -o /etc/apt/keyrings/android-cuttlefish-artifacts.asc
sudo chmod a+r /etc/apt/keyrings/android-cuttlefish-artifacts.asc
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/android-cuttlefish-artifacts.asc] \
https://us-apt.pkg.dev/projects/android-cuttlefish-artifacts android-cuttlefish-unstable main" | \
sudo tee /etc/apt/sources.list.d/android-cuttlefish-artifacts.list > /dev/null
sudo apt update
sudo apt install cuttlefish-cvdremote
cvdr --helpTo configure, modify the configuration file:
-
System-level configuration is defined in
/etc/cvdr.toml -
User-level configuration is defined in
~/.config/cvdr/cvdr.tomland takes precedence
To build cvdr manually, please run:
git clone https://github.com/google/cloud-android-orchestration.git
cd cloud-android-orchestration # Root directory of git repository
go build ./cmd/cvdrThe cvdr binary will be produced in the cloned repository.
To configure cvdr, you have to provide a configuration file by setting
either CVDR_SYSTEM_CONFIG_PATH or CVDR_USER_CONFIG_PATH environment variable.
To create a convenient alias, please run or add to ~/.bashrc:
export CVDR_USER_CONFIG_PATH=/path/to/cvdr.toml
alias cvdr="$(realpath ./cvdr)"
See either build/debian/cuttlefish_cvdremote/host/etc/cvdr.toml or scripts/on-premises/single-server/cvdr.toml as examples of how to write a configuration file.
To launch with the latest image enrolled in ci.android.com, please run:
cvdr \
--branch=aosp-main \
--build_target=aosp_cf_x86_64_phone-trunk_staging-userdebug \
createAssuming you build AOSP from scratch, ensure you run lunch $MY_BUILD_TARGET with your target before proceeding, see Build Android for more details.
To create an instance using the build artifacts from your local AOSP repo, please run with your working directory being your AOSP root:
cvdr create --local_imageAlternatively, manually specify the images and create an instance:
cvdr --local_cvd_host_pkg_src="${ANDROID_PRODUCT_OUT}/dist/cvd-host_package.tar.gz --local_images_zip_src=${ANDROID_PRODUCT_OUT}/dist/your-target-img.zip"For this to work, you have to build the .zip images using m dist in AOSP root beforehand.
On success, we expect the result like below.
Creating Host........................................ OK
Fetching main bundle artifacts....................... OK
Starting and waiting for boot complete............... OK
Connecting to cvd-1.................................. OK
2e8137432a96f93558c838da5e590ec775a97e5a7bb20e66929d1a59eb337351 (http://localhost:8080/v1/zones/local/hosts/2e8137432a96f93558c838da5e590ec775a97e5a7bb20e66929d1a59eb337351/)
cvd/1
Status: Running
ADB: 127.0.0.1:33975
Displays: [720 x 1280 ( 320 )]
Logs: http://localhost:8080/v1/zones/local/hosts/2e8137432a96f93558c838da5e590ec775a97e5a7bb20e66929d1a59eb337351/cvds/1/logs/
If you want to validate, please refer the first provided URL in the output log
and check if the page seems like below.
Also, you should be able to see the device is enrolled via adb devices.

Please run cvdr --help for advanced functionalities of cvdr, including individual commands and their flags, including how to manage or delete CVDs.