# Getting started with Android Virtualization Framework

## Step 1: Prepare a device

We support the following devices:

* aosp\_panther (Pixel 7)
* aosp\_cheetah (Pixel 7 Pro)
* aosp\_oriole (Pixel 6)
* aosp\_raven (Pixel 6 Pro)
* aosp\_felix (Pixel Fold)
* aosp\_tangorpro (Pixel Tablet)
* aosp\_cf\_x86\_64\_phone (Cuttlefish a.k.a. Cloud Android). Follow [this
  instruction](https://source.android.com/docs/setup/create/cuttlefish-use) to
  use.

### Note on Pixel 6 and 6 Pro
AVF is shipped in Pixel 6 and 6 Pro, but isn't enabled by default. To enable
it, follow the instructions below:

1. If the device is running Android 13 or earlier, upgrade to Android 14.

1. Once upgraded to Android 14, execute the following command to enable pKVM.
   ```shell
   adb reboot bootloader
   fastboot flashing unlock
   fastboot oem pkvm enable
   fastboot reboot
   ```
### Note on Cuttlefish
Cuttlefish does not support protected VMs. Only non-protected VMs are
supported.

## Step 2: Build Android image

This step is optional unless you want to build AVF by yourself or try the
in-development version of AVF.

AVF is implemented as an APEX named `com.android.virt`. However, in order for
you to install it to your device (be it Pixel or Cuttlefish), you first need to
re-build the entire Android from AOSP. This is because the official Android
build you have in your device is release-key signed and therefore you can't
install your custom-built AVF APEX to it - because it is test-key signed.

### Pixel

1. [Download](https://source.android.com/docs/setup/download/downloading)
   source code from AOSP. Use the `main` branch.

1. [Download](https://developers.google.com/android/blobs-preview) the preview
   vendor blob that matches your device.

1. [Build](https://source.android.com/docs/setup/build/building) the `aosp_`
   variant of your device. For example, if your device is Pixel 7 (`panther`),
   build `aosp_panther`.

1. [Flash](https://source.android.com/docs/setup/build/running) the built
   images to the device.


### Cuttlefish

1. [Download](https://source.android.com/docs/setup/download/downloading)
   source code from AOSP. Use the `main` branch.

1. Build Cuttlefish:
   ```shell
   source build/envsetup.sh
   lunch aosp_cf_x86_64_phone-userdebug
   m
   ```

1. Run Cuttlefish:
   ```shell
   cvd start
   ```

## Step 3: Build AVF

Then you can repeat building and installing AVF to the device as follows:

1. Build the AVF APEX.
   ```sh
   banchan com.android.virt aosp_arm64
   UNBUNDLED_BUILD_SDKS_FROM_SOURCE=true m apps_only dist
   ```
   Replace `aosp_arm64` with `aosp_x86_64` if you are building for Cuttlefish.

1. Install the AVF APEX to the device.
   ```sh
   adb install out/dist/com.android.virt.apex
   adb reboot; adb wait-for-device
   ```

## Step 4: Run a Microdroid VM

[Microdroid](../../build/microdroid/README.md) is a lightweight version of Android
that is intended to run on pVM. You can run a Microdroid-based VM with an empty
payload using the following command:

```shell
packages/modules/Virtualization/vm/vm_shell.sh start-microdroid --auto-connect -- --protected
```

You will see the log messages like the below.

```
found path /apex/com.android.virt/app/EmptyPayloadAppGoogle@MASTER/EmptyPayloadAppGoogle.apk
creating work dir /data/local/tmp/microdroid/7CI6QtktSluD3OZgv
apk.idsig path: /data/local/tmp/microdroid/7CI6QtktSluD3OZgv/apk.idsig
instance.img path: /data/local/tmp/microdroid/7CI6QtktSluD3OZgv/instance.img
Created VM from "/apex/com.android.virt/app/EmptyPayloadAppGoogle@MASTER/EmptyPayloadAppGoogle.apk"!PayloadConfig(VirtualMachinePayloadConfig { payloadBinaryName: "MicrodroidEmptyPayloadJniLib.so" }) with CID 2052, state is STARTING.
[2023-07-07T14:50:43.420766770+09:00 INFO  crosvm] crosvm started.
[2023-07-07T14:50:43.422545090+09:00 INFO  crosvm] CLI arguments parsed.
[2023-07-07T14:50:43.440984015+09:00 INFO  crosvm::crosvm::sys::unix::device_helpers] Trying to attach block device: /proc/self/fd/49
[2023-07-07T14:50:43.441730922+09:00 INFO  crosvm::crosvm::sys::unix::device_helpers] Trying to attach block device: /proc/self/fd/54
[2023-07-07T14:50:43.462055141+09:00 INFO  crosvm::crosvm::sys::unix::device_helpers] Trying to attach block device: /proc/self/fd/63
[WARN] Config entry DebugPolicy uses non-zero offset with zero size
[WARN] Config entry DebugPolicy uses non-zero offset with zero size
[INFO] pVM firmware
avb_slot_verify.c:443: ERROR: initrd_normal: Hash of data does not match digest in descriptor.
[INFO] device features: SEG_MAX | RO | BLK_SIZE | RING_EVENT_IDX | VERSION_1 | ACCESS_PLATFORM
[INFO] config: 0x201a000
[INFO] found a block device of size 50816KB
[INFO] device features: SEG_MAX | BLK_SIZE | FLUSH | DISCARD | WRITE_ZEROES | RING_EVENT_IDX | VERSION_1 | ACCESS_PLATFORM
[INFO] config: 0x2022000
[INFO] found a block device of size 10304KB
[INFO] No debug policy found.
[INFO] Starting payload...
<omitted>
07-07 05:52:01.322    69    69 I vm_payload: vm_payload: Notified host payload ready successfully
07-07 05:52:01.364    70    70 I adbd    : persist.adb.watchdog set to ''
07-07 05:52:01.364    70    70 I adbd    : persist.sys.test_harness set to ''
07-07 05:52:01.365    70    70 I adbd    : adb watchdog timeout set to 600 seconds
07-07 05:52:01.366    70    70 I adbd    : Setup mdns on port= 5555
07-07 05:52:01.366    70    70 I adbd    : adbd listening on vsock:5555
07-07 05:52:01.366    70    70 I adbd    : adbd started
#
```

The `--auto-connect` option provides you an adb-shell connection to the VM. The
shell promot (`#`) at the end of the log is for that.

## Step 5: Run tests

There are various tests that spawn guest VMs and check different aspects of the
architecture. They all can run via `atest`.

```shell
atest MicrodroidHostTestCases
atest MicrodroidTestApp
```

If you run into problems, inspect the logs produced by `atest`. Their location
is printed at the end. The `host_log_*.zip` file should contain the output of
individual commands as well as VM logs.
