Releases: wchen99998/aosp
Release list
v0.1.10
v0.1.10 Release Notes
Rebuilt aosp_cf_arm64_only_phone_qemu outputs after fixing the guest-side
gfxstream Vulkan deadlock caused by holding ResourceTracker::mLock across the
synchronous vkQueueWaitIdle() round-trip in
ResourceTracker::on_vkQueueSubmitTemplate().
What Changed
- Updated the guest gfxstream Vulkan encoder so
on_vkQueueSubmitTemplate()copies the post-submit fence and sync objects it
needs undermLock, releases the lock, waits invkQueueWaitIdle(), and
only then signals the copied-out OS objects. - Kept the source delta in the tracked patch snapshot as
patches/0010-external-mesa3d-gfxstream-avoid-resource-tracker-deadlock.patch
so the ignoredsrc/checkout and the repo's recorded source delta stay
aligned. - The change narrows lock scope instead of adding extra waits, so it is not
expected to introduce a material performance regression.
Why
VulkanQueueSubmitWithCommands intentionally avoids the normal VkEncoder
transport lock for these submits, so the deadlock was not primarily caused by
holding the encoder lock across host I/O. The real lock inversion was in the
guest:
- render-thread submit flow held
ResourceTracker::mLockwhile synchronously
waiting forvkQueueWaitIdle() - another guest thread could reserve an earlier seqno and then block in
DestroyMapping::mapHandles_VkFence()waiting on the samemLock - the host decoder then waited forever for the earlier seqno packet that the
guest could no longer flush
Releasing mLock before the host round-trip removes that edge.
Validation
m -j$(nproc)completed successfully for
aosp_cf_arm64_only_phone_qemuon2026-03-24../scripts/prepare_plain_qemu.shcompleted successfully against the rebuilt
image set.- Plain-QEMU boot validation completed successfully using the documented
software-GL path withQEMU_BOOT_HARDWARE_VULKAN=pastel:adb get-statereturneddevicegetprop sys.boot_completedreturned1- runtime properties confirmed
ro.hardware.vulkan=pastel,ro.hardware.gralloc=minigbm, and
ro.hardware.hwcomposer=ranchu /dev/block/by-name/frpresolved to/dev/block/vda2
- Boot logs captured in
/tmp/qemu-v018-hvc0.logand/tmp/qemu-v018-hvc2.log
showsys.boot_completed=1, andSurfaceFlinger: Boot is finishedappears
in the HVC2 log. DATE=2026-03-24 TAG=v0.1.10 ./scripts/make_release_bundle.shcompleted
successfully and generated the release archive, manifest, checksum file, and
release notes asset.
Validation Scope
- This validation confirms the rebuilt image boots and the release bundle is
usable on the host-safe plain-QEMU software path. - It does not reproduce the original gfxstream deadlock end-to-end on a
gfxstream-capable host, so this release relies on the guest-side root-cause
analysis and code inspection for the deadlock fix itself.
What Is Included
aosp_cf_arm64_only_phone_qemu-out-2026-03-24.tar.zst- matching manifest and SHA-256 files
- generated release notes under
release-assets/v0.1.10-notes.md
How To Use It
- Extract the archive under the repository root.
- Place the included image files under
src/out/target/product/vsoc_arm64_only. - Run
./scripts/prepare_plain_qemu.sh. - Follow
docs/BOOT.mdfor the plain-QEMU launch flow.
Release Asset Paths
release-assets/aosp_cf_arm64_only_phone_qemu-out-2026-03-24.tar.zstrelease-assets/aosp_cf_arm64_only_phone_qemu-out-2026-03-24.manifest.txtrelease-assets/aosp_cf_arm64_only_phone_qemu-out-2026-03-24.sha256release-assets/v0.1.10-notes.md
v0.1.9
Validated update for aosp_cf_arm64_only_phone_qemu on 2026-03-24.
What changed:
- tracks the full patch series under
patches/instead of relying on ignoredsrc/state - removes Bluetooth, UWB, and NFC from the built QEMU image
- keeps
ro.surface_flinger.max_frame_buffer_acquired_buffers=3baked into the product - includes the additional NFC platform-availability and allowed-deps fixes needed to keep the image buildable after removing the NFC stack
Validation summary:
- rebuilt
aosp_cf_arm64_only_phone_qemusuccessfully - staged a fresh plain-QEMU bundle with
scripts/prepare_plain_qemu.sh - booted a fresh guest with
scripts/run_plain_qemu.sh - confirmed
sys.boot_completed=1 - confirmed
ro.surface_flinger.max_frame_buffer_acquired_buffers=3 - confirmed
com.android.systemuiis running - confirmed
pm list featuresreports no Bluetooth, UWB, or NFC features - confirmed
pm list packagesreports no Bluetooth, UWB, or NFC packages - confirmed
ps -Ashows no Bluetooth, UWB, or NFC service processes - confirmed
getpropexposes no Bluetooth, UWB, or NFC properties - confirmed
/system/apexand/vendor/apexcontain nocom.android.bt,com.android.uwb,com.android.nfcservices, orcom.google.cf.nfc
Assets:
aosp_cf_arm64_only_phone_qemu-out-2026-03-24.tar.zst: compiled build outputs used for the validated boot- matching manifest and SHA-256 files
v0.1.9-patches.tar.gz: tracked patch series from this repo commit
v0.1.8
Initial release of the validated aosp_cf_arm64_only_phone_qemu build outputs.
What is included:
aosp_cf_arm64_only_phone_qemu-out-2026-03-23.tar.zst- matching manifest and SHA-256 files
Why this asset format:
- the direct processed
plain-qemu/os-disk.rawboot image is too large to publish comfortably - this release instead ships the compiled output set that was used to produce the validated plain-QEMU bundle
How to use:
- Extract the archive under the repository root.
- Place the included image files under
src/out/target/product/vsoc_arm64_only. - Run
./scripts/prepare_plain_qemu.sh. - Follow
docs/BOOT.mdfor the validated no-harness QEMU launch flow.
v0.1.7
v0.1.7 Release Notes
Rebuilt aosp_cf_arm64_only_phone_qemu outputs after baking
ro.surface_flinger.max_frame_buffer_acquired_buffers=3 into the QEMU product.
What Changed
- Added the QEMU-specific SurfaceFlinger default-property override
ro.surface_flinger.max_frame_buffer_acquired_buffers=3. - Kept the change in the tracked patch snapshot so the ignored
src/checkout
and the repo's recorded source delta stay aligned. - Updated the QEMU graphics contract, validation checklist, and boot notes to
describe the new baked runtime expectation.
Validation
m -j$(nproc)completed successfully for
aosp_cf_arm64_only_phone_qemuon2026-03-23.- Confirmed the generated output contains
ro.surface_flinger.max_frame_buffer_acquired_buffers=3in
out/target/product/vsoc_arm64_only/vendor/build.prop. ./scripts/prepare_plain_qemu.shcompleted successfully against the rebuilt
image set.DATE=2026-03-23 TAG=v0.1.7 ./scripts/make_release_bundle.shcompleted
successfully and generated the release archive, manifest, checksum file, and
release notes asset.
What Is Included
aosp_cf_arm64_only_phone_qemu-out-2026-03-23.tar.zst- matching manifest and SHA-256 files
- generated release notes under
release-assets/v0.1.7-notes.md
How To Use It
- Extract the archive under the repository root.
- Place the included image files under
src/out/target/product/vsoc_arm64_only. - Run
./scripts/prepare_plain_qemu.sh. - Follow
docs/BOOT.mdfor the plain-QEMU launch flow.
Release Asset Paths
release-assets/aosp_cf_arm64_only_phone_qemu-out-2026-03-23.tar.zstrelease-assets/aosp_cf_arm64_only_phone_qemu-out-2026-03-23.manifest.txtrelease-assets/aosp_cf_arm64_only_phone_qemu-out-2026-03-23.sha256release-assets/v0.1.7-notes.md
v0.1.6
v0.1.6 Release Notes
Rebuilt aosp_cf_arm64_only_phone_qemu outputs after adding guest-side device
permissions for the goldfish address-space and pipe devices required by the
ranchu gralloc allocator.
What Changed
- Added ueventd entries for
/dev/goldfish_address_spaceand
/dev/goldfish_pipe_dprctd(0666 system:system) to the shared cuttlefish
ueventd.rc. These are no-ops on non-QEMU cuttlefish builds because the
device nodes are never created. - Created a QEMU-specific SELinux policy directory
(shared/config/qemu/sepolicy/) containing:device.te— defines theqemu_deviceSELinux typedomain.te— grants domain-wide access toqemu_devicecharacter devices
(required because gfxstream same-process HAL libraries load into arbitrary
app domains)file_contexts— labels/dev/goldfish_address_spaceand
/dev/goldfish_pipe_dprctdasqemu_device
- Wired the new sepolicy directory into the QEMU product makefile via
BOARD_VENDOR_SEPOLICY_DIRS, so only the QEMU product carries these policies.
Why
The ranchu gralloc allocator opens /dev/goldfish_address_space (via
GoldfishAddressSpaceHostMemoryAllocator) and /dev/goldfish_pipe_dprctd (via
qemu_pipe_open("refcount")). Without ueventd rules the kernel-created nodes
default to root:root 0600, and without SELinux labels they are assigned the
unlabeled type — both of which block the allocator from opening them, causing
a fatal crash at boot.
Validation
- Full plain-QEMU software-GL validation with
QEMU_BOOT_HARDWARE_GRALLOC=minigbm:adb -s 127.0.0.1:6570 get-statereturneddeviceadb -s 127.0.0.1:6570 shell getprop sys.boot_completedreturned1adb -s 127.0.0.1:6570 shell getprop ro.hardware.grallocreturned
minigbmadb -s 127.0.0.1:6570 shell ps -A | grep allocatorshowed
android.hardware.graphics.allocator-service.minigbm
- Confirmed
vendor/etc/ueventd.rcin the built image contains the goldfish
entries (/dev/goldfish_address_spaceand/dev/goldfish_pipe_dprctd). - Confirmed
vendor/etc/selinux/vendor_file_contextslabels both goldfish
device nodes asqemu_device.
What Is Included
aosp_cf_arm64_only_phone_qemu-out-2026-03-22.tar.zst- matching manifest and SHA-256 files
- generated release notes under
release-assets/v0.1.6-notes.md
How To Use It
- Extract the archive under the repository root.
- Place the included image files under
src/out/target/product/vsoc_arm64_only. - Run
./scripts/prepare_plain_qemu.sh. - Follow
docs/BOOT.mdfor the plain-QEMU launch flow.
Release Asset Paths
release-assets/aosp_cf_arm64_only_phone_qemu-out-2026-03-22.tar.zstrelease-assets/aosp_cf_arm64_only_phone_qemu-out-2026-03-22.manifest.txtrelease-assets/aosp_cf_arm64_only_phone_qemu-out-2026-03-22.sha256release-assets/v0.1.6-notes.md
v0.1.5
Validated aosp_cf_arm64_only_phone_qemu rebuild after fixing the missing
mapper/ranchu product integration in the QEMU flavor.
What is included:
aosp_cf_arm64_only_phone_qemu-out-2026-03-21-r2.tar.zst- matching manifest and SHA-256 files
What changed:
- the QEMU product now installs the ranchu mapper VINTF fragment
vendor/etc/vintf/manifest/mapper.ranchu.xml - the cuttlefish graphics SELinux service contexts now include
mapper/ranchu servicemanagernow findsmapper/ranchuin the guest image instead of
failing on a missing VINTF declaration
Why this asset format:
- the direct processed
plain-qemu/os-disk.rawboot image is too large to publish comfortably - this release instead ships the compiled output set that was used to produce the validated plain-QEMU bundle
Validation summary:
- plain-QEMU software-GL boot still reached
adb deviceand
sys.boot_completed=1withQEMU_BOOT_HARDWARE_GRALLOC=minigbm - targeted ranchu validation on this non-gfxstream host progressed past the
old missing-mapper failure and now aborts later with
GoldfishAddressSpaceHostMemoryAllocator failed to open, which is the
expected host-pipe limitation on this machine
How to use:
- Extract the archive under the repository root.
- Place the included image files under
src/out/target/product/vsoc_arm64_only. - Run
./scripts/prepare_plain_qemu.sh. - Follow
docs/BOOT.mdfor the validated no-harness QEMU launch flow.
v0.1.4
v0.1.4 Release Notes
Rebuilt aosp_cf_arm64_only_phone_qemu outputs after fixing the QEMU gralloc
selector to key off ro.boot.hardware.gralloc during early-init.
What Changed
init.vendor.qemu.rcnow selects the ranchu allocator from the boot property
instead of the later-derivedro.hardware.grallocproperty.- This avoids the
early-initordering bug whereallocator.rccould still
leave the default minigbm service selected even when
QEMU_BOOT_HARDWARE_GRALLOC=ranchu. - The main graphics-contract and validation docs were updated to describe the
boot-property-based selector.
What Is Included
aosp_cf_arm64_only_phone_qemu-out-2026-03-21-r1.tar.zst- matching manifest and SHA-256 files
- generated release notes under
release-assets/v0.1.4-notes.md
How To Use It
- Extract the archive under the repository root.
- Place the included image files under
src/out/target/product/vsoc_arm64_only. - Run
./scripts/prepare_plain_qemu.sh. - Follow
docs/BOOT.mdfor the plain-QEMU launch flow.
Release Asset Paths
release-assets/aosp_cf_arm64_only_phone_qemu-out-2026-03-21-r1.tar.zstrelease-assets/aosp_cf_arm64_only_phone_qemu-out-2026-03-21-r1.manifest.txtrelease-assets/aosp_cf_arm64_only_phone_qemu-out-2026-03-21-r1.sha256release-assets/v0.1.4-notes.md
v0.1.4-temp1
Initial release of the validated aosp_cf_arm64_only_phone_qemu build outputs.
What is included:
aosp_cf_arm64_only_phone_qemu-out-2026-03-21.tar.zst- matching manifest and SHA-256 files
Why this asset format:
- the direct processed
plain-qemu/os-disk.rawboot image is too large to publish comfortably - this release instead ships the compiled output set that was used to produce the validated plain-QEMU bundle
How to use:
- Extract the archive under the repository root.
- Place the included image files under
src/out/target/product/vsoc_arm64_only. - Run
./scripts/prepare_plain_qemu.sh. - Follow
docs/BOOT.mdfor the validated no-harness QEMU launch flow.
v0.1.3 — Dual gralloc backend support (standalone)
v0.1.3 Release Notes
Validated aosp_cf_arm64_only_phone_qemu build outputs with dual gralloc
backend support (minigbm + ranchu).
What Changed
- The QEMU product now ships both gralloc backends as standalone vendor
binaries (not APEXes):android.hardware.graphics.allocator-service.minigbm+mapper.minigbm
— default for plain-QEMU/software-GLandroid.hardware.graphics.allocator-service.ranchu+mapper.ranchu
— gfxstream-native, for gfxstream-capable hosts
- The QEMU init fragment (
init.vendor.qemu.rc) stops the default minigbm
allocator and starts the ranchu one whenro.hardware.gralloc=ranchu. - SELinux file_contexts added for the ranchu allocator binary and mapper.
- The goldfish
allocator-service.ranchumodule no longer bundles init_rc or
vintf_fragments so it coexists with the minigbm allocator on Cuttlefish.
What Is Included
aosp_cf_arm64_only_phone_qemu-out-2026-03-21.tar.zst- matching manifest and SHA-256 files
How To Use It
- Extract the archive under the repository root.
- Place the included image files under
src/out/target/product/vsoc_arm64_only. - Run
./scripts/prepare_plain_qemu.sh. - Follow
docs/BOOT.mdfor the validated no-harness QEMU launch flow.
For gfxstream hosts, set QEMU_BOOT_HARDWARE_GRALLOC=ranchu in the launch
environment.
Validated Facts
- guest ADB:
127.0.0.1:6550 sys.boot_completed=1ro.hardware.gralloc=minigbmro.hardware.hwcomposer=ranchudebug.hwui.renderer=skiagldebug.renderengine.backend=skiaglthreadedro.hardware.egl=anglero.hardware.vulkan=pastelandroid.hardware.graphics.allocator-service.minigbmrunning (PID 552)android.hardware.graphics.allocator-service.ranchubinary present at
/vendor/bin/hw/mapper.ranchu.sopresent at/vendor/lib64/hw/- no SurfaceFlinger crashes
- no gralloc APEX in
/vendor/apex/
v0.1.3-test1
Initial release of the validated aosp_cf_arm64_only_phone_qemu build outputs.
What is included:
aosp_cf_arm64_only_phone_qemu-out-2026-03-21.tar.zst- matching manifest and SHA-256 files
Why this asset format:
- the direct processed
plain-qemu/os-disk.rawboot image is too large to publish comfortably - this release instead ships the compiled output set that was used to produce the validated plain-QEMU bundle
How to use:
- Extract the archive under the repository root.
- Place the included image files under
src/out/target/product/vsoc_arm64_only. - Run
./scripts/prepare_plain_qemu.sh. - Follow
docs/BOOT.mdfor the validated no-harness QEMU launch flow.