3.3 KiB
Instructions for building custom AVF on Pixel 6 or 6 Pro
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.
Upgrade to Android 13 Beta Image
First, upgrade your Pixel 6 or Pixel 6 Pro to the Android 13 Beta Image. This can be done in two ways:
- Join Android Beta Program and then OTA to Android 13.
- Manually flash Android 13 Beta Images.
Then enable ADB debugging in "Settings" -> "System" -> "Developer options". Finally, enable PKVM.
adb reboot bootloader
fastboot flashing unlock
fastboot oem pkvm enable
fastboot reboot
Building GSI and flashing it
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
Building and installing AVF from AOSP
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