This document provides steps for building AVF from AOSP, and then install it to Pixel 6 series to better understand AVF and do some experiments.
WARNING: Unless Android 13 is released to AOSP (expected to be at Summer 2022, exact date TBD) by the time when you read this documentation, or you or your company have early access to Android Tiramisu source tree, you CANNOT follow this instruction. In that case, you can only USE the AVF that is shipped in the Android 13 Beta Image.
This is because AVF in the beta image is signed by Google and therefore it can't be updated to a new AVF built in AOSP which can't be signed by the Google key that is not shared with AOSP.
First, upgrade your Pixel 6 or Pixel 6 Pro to the Android 13 Beta Image. This can be done in two ways:
Then enable ADB debugging in "Settings" -> "System" -> "Developer options". Finally, enable PKVM.
adb reboot bootloader
fastboot flashing unlock
fastboot oem pkvm enable
fastboot reboot
Prepare your Android 13 (Tiramisu) source tree.
mkdir tm cd tm repo init -u <URL> -m <your_tm_branch> repo sync -c --no-tags -j 10
Patch GSI so that it includes AVF. Edit build/make/target/product/gsi_release.mk
and add the following line to the end (or anywhere in the file that makes sense):
PRODUCT_PACKAGES += com.android.virt
Build GSI.
source build/envsetup.sh choosecombo 1 aosp_arm64 userdebug m
Flash GSI to the Pixel device.
adb reboot bootloader fastboot reboot fastboot fastboot delete-logical-partition product_a fastboot flash system out/target/product/generic_arm64/system.img fastboot --disable-verification flash vbmeta out/target/product/generic_arm64/vbmeta.img fastboot -w reboot
Deleting the logical partition product_a
is needed because the GSI image is bigger than the logical partition system_a
of the beta image. --disable-verification
when flashing the vbmeta
partition is critical. Don't miss it.
Lastly, check if you are running GSI.
adb shell getprop ro.build.product adb shell ls /dev/kvm adb shell ls /apex/com.android.virt/bin/vm
The result should be as follows.
generic_arm64 /dev/kvm /apex/com.android.virt/bin/vm
Checkout AOSP master branch.
mkdir aosp cd aosp repo init -u https://android.googlesource.com/platform/manifest -b master repo sync -c --no-tags -j 10
Then build the com.android.virt
APEX.
source build/envsetup.sh banchan com.android.virt aosp_arm64 UNBUNDLED_BUILD_SDKS_FROM_SOURCE=true m apps_only dist
Install the newly built AVF to the device
adb install out/dist/com.android.virt.apex adb reboot
If this doesn't work for some reason, try this:
adb root adb shell setenforce 0 adb push out/dist/com.android.virt.apex /data/local/ adb shell cmd -w apexservice deactivatePackage /system/system_ext/apex/com.android.virt.apex adb shell cmd -w apexservice activatePackage /data/local/com.android.virt.apex // Don't adb reboot