Ubuntu Touch for Treble devices with AIDL-era vendor stacks (Android 12+), redesigned to keep stock boot components untouched.
- Keep stock
boot.imguntouched. - Keep stock kernel untouched.
- Flash only:
system.imgvbmeta-disabled.img
- Do not flash
boot,vendor_boot,dtbo,vendor, oruserdata.
Android boots normally, then launches Ubuntu userspace late in boot:
- Stock bootloader + stock kernel + stock ramdisk init (PID 1)
- PHH-based
/systemboots Android framework + vendor HAL services /system/etc/init/ubuntu-gsi.rcstartsubuntu-gsi-launcher- Launcher mounts
rootfs.erofs, builds overlay on/data/uhl_overlay, thenchroots into Ubuntu systemd - Lomiri/Mir starts from inside the Ubuntu chroot
Authoritative design doc: docs/halium-architecture.md
halium/etc/init/ubuntu-gsi.rcAndroid init service definitionsbin/ubuntu-gsi-launcherchroot pivot driverbin/ubuntu-gsi-stop-android-uiSurfaceFlinger hand-off helpercompat/PHH/TrebleDroid-style compatibility enginelomiri/start-lomiri.shLomiri/libhybris startup scaffold
scripts/fetch_phh_gsi.shPHH base download/preparebuild_rootfs.shUbuntu chroot rootfs buildbuild_rootfs_erofs.shrootfs -> erofs packbuild_vbmeta_disabled.shdisabled vbmeta buildbuild_system_img.shPHH base + Halium overlay mergeflash.shflashessystem + vbmetaonly
deprecated/- legacy pre-Halium components kept for reference
sudo apt install \
debootstrap qemu-user-static e2fsprogs erofs-utils jq wget unzip \
android-sdk-libsparse-utils android-tools-fastboot python3avbtool is recommended for production vbmeta-disabled.img generation.
git clone --recursive https://github.com/zerofrip/Ubuntu_Touch_AIDL_GSI.git
cd Ubuntu_Touch_AIDL_GSI
make buildPipeline:
- PHH fetch -> rootfs build -> erofs pack -> vbmeta-disabled -> system image compose
Artifacts are generated under builder/out/:
system.imglinux_rootfs.erofsvbmeta-disabled.img
make flashor manually:
fastboot --disable-verity --disable-verification flash vbmeta builder/out/vbmeta-disabled.img
fastboot flash system builder/out/system.img
fastboot rebootSelective flash:
make flash-system
make flash-vbmetaEnable Ubuntu launcher (default is auto-on from init rules):
adb shell setprop persist.ubuntu_gsi.enable 1Disable launcher and boot Android-only userspace:
adb shell setprop persist.ubuntu_gsi.enable 0
adb rebootThe compatibility layer is inspired by:
Main files:
halium/compat/quirks.jsonhalium/compat/compat-engine.shhalium/compat/prop-handler.shhalium/compat/lib/detect-platform.sh
Engine supports mode-aware execution (android, linux, both) for per-action filtering.
config.env defaults:
PHH_GSI_VERSION=v559PHH_GSI_VARIANT=arm64-ab-vanilla
Override in config.env or via environment variables if your target requires a different base.
Quick reference flash guide: docs/flash_quickstart.md
- Legacy docs/scripts that mention
linux_rootfs.squashfs,userdata.imgpivot, or binder bridge daemons are historical and replaced by the Halium-style flow. - See
docs/halium-architecture.mdfor current behavior.