# android_local_manifest Local manifest for building [LineageOS 23.2](https://lineageos.org/) (Android TV) for the **Orange Pi 5 Ultra** (Rockchip RK3588). ## Prerequisites - A Linux build host with [LineageOS build dependencies](https://wiki.lineageos.org/requirements) installed - ~250GB free disk space - `repo` tool installed - An SD card (or other block device) at least 20GB, plus `sfdisk`/`kpartx`/`mkfs.vfat`/`mkfs.ext4` (all standard `util-linux`/`e2fsprogs` tools) for creating the flashable image ## Setup ```bash # Initialize LineageOS 23.2 source tree repo init -u https://github.com/LineageOS/android.git -b lineage-23.2 # Add this local manifest curl -o .repo/local_manifests/manifest.xml -L https://git.bscubed.dev/lineage-rockchip/android_local_manifest/raw/branch/lineage-23.2/manifest.xml --create-dirs # Sync the full source tree (including local manifest overrides) repo sync -c -j$(nproc) ``` ### Updating the local manifest ```bash curl -o .repo/local_manifests/manifest.xml -L https://git.bscubed.dev/lineage-rockchip/android_local_manifest/raw/branch/lineage-23.2/manifest.xml --create-dirs repo sync --force-sync ``` ## Building ```bash # Set up build environment source build/envsetup.sh # Select the Android TV target breakfast tart # Build mka ``` Use plain `mka` (no target — this builds the default `droid` goal), **not** `mka bacon`. This device has no Android recovery (`TARGET_NO_RECOVERY := true`, U-Boot/extlinux boots it directly), which means `INTERNAL_OTA_PACKAGE_TARGET` is never assigned by the build system. `bacon`'s OTA-zip packaging rule depends on that variable and has no other build dependencies, so it fails almost instantly and aborts the whole build before `system.img`/`vendor.img` are even produced. Plain `mka` builds everything this device actually needs — `boot.img`, `system.img`, `vendor.img`, `ramdisk.img` — without ever touching that broken rule. ## Creating a flashable image Once the build finishes, `device/rockchip/tart/mkimg.sh` assembles a bootable GPT image (U-Boot + FAT32 boot partition with `extlinux.conf`/kernel/DTB/ramdisk + system/vendor/metadata/userdata partitions): ```bash # Run in the same shell you built in (needs TARGET_PRODUCT / ANDROID_PRODUCT_OUT # from `breakfast`), from the root of the source tree. Do NOT prefix with sudo — # root wouldn't see those env vars; the script escalates privileges internally # per-command only where needed: device/rockchip/tart/mkimg.sh ``` This produces `out/target/product/tart/lineage-.img`. Write it to an SD card: ```bash sudo dd if=out/target/product/tart/lineage-*.img of=/dev/sdX bs=4M status=progress ``` (Replace `/dev/sdX` with your SD card's device node — **not** a partition like `/dev/sdX1`.) ### Fast re-flashing during development `device/rockchip/tart/wrimg.sh` writes individual partition images directly to an already-flashed physical device, without rebuilding the whole GPT image — useful when iterating on `system`/`vendor` without wanting to recreate the boot partition each time: ```bash device/rockchip/tart/wrimg.sh # writes boot + system + vendor device/rockchip/tart/wrimg.sh system # writes system only device/rockchip/tart/wrimg.sh vendor # writes vendor only device/rockchip/tart/wrimg.sh boot # writes boot only device/rockchip/tart/wrimg.sh wipe # reformats userdata device/rockchip/tart/wrimg.sh wipe-metadata # reformats metadata ``` It auto-detects the target device by matching partition labels/sizes against `mkimg.sh`'s layout (`boot`/`system`/`vendor`/`metadata`/`userdata`), so the device must already have been flashed with an image from `mkimg.sh` at least once. ## Repositories This local manifest pulls in the following repositories from `git.bscubed.dev/lineage-rockchip/`: | Repository | Path | Description | |-----------|------|-------------| | `android_device_rockchip_tart` | `device/rockchip/tart` | Device tree | | `android_device_rockchip_tart-kernel` | `device/rockchip/tart-kernel` | Kernel boot artifacts (U-Boot, ramdisks) | | `android_kernel_rockchip_tart` | `kernel/rockchip/tart` | Kernel source (built from source) | | `android_vendor_rockchip_tart` | `vendor/rockchip/tart` | Vendor blobs (firmware) | | `android_external_drm_hwcomposer` | `external/drm_hwcomposer` | DRM hwcomposer | | `android_external_ffmpeg` | `external/ffmpeg` | FFmpeg media library | | `android_external_ffmpeg_codec2` | `external/ffmpeg_codec2` | FFmpeg C2 codec HAL | | `android_external_alsa-lib` | `external/alsa-lib` | ALSA library | | `android_external_alsa-utils` | `external/alsa-utils` | ALSA utilities | | `android_external_libudev-zero` | `external/libudev-zero` | libudev compatibility | ## Branch All repositories use the `lineage-23.2` branch. ## License Device tree and build scripts: Apache-2.0 External repositories retain their original licenses.