Build guide
From a manifest checkout to the root image and the recovery zip.
Release 1 is coming, not yet available. Source available with release 1.
The commands are on the Build page. This is how the build is put together.
Products and variants
The tree is an Android-style checkout: a manifest, one repository per part, build/envsetup.sh, lunch, mka.
lunch with no argument lists the products. A device’s device.conf gives them:
| Product | What it is |
|---|---|
mapple_<device> | the development layout: the root in the xnusys partition, made by hand |
mapple_<device>_single | one OS, installed by the zip, the root on userdata; listed when device.conf has single_* keys |
mapple_<device>_split | Android and iOS side by side; listed when it has split_* keys (repo init ... -g default,splitboot) |
The variant after the dash is userdebug (a DEVELOPMENT kernel, the default) or user (a RELEASE kernel).
What mka makes
With no target, mka runs them all, in this order: ipsw headers kernel shim loader adt payload installer bootimage userland manager audio gpu rootimage rootsparse zip. Any of them can be named alone. Steps that need sudo print the
command and stop; run it, then mka again.
NAME=value options: IPSW=path your own copy of the pinned iOS file (otherwise it is downloaded from Apple into
out/ipsw/), ANDROID_BOOT=path a backup of your phone’s boot partition (the boot image chains the loader in front of
it), KERNEL=path a kernel already built, TOUCH_FW=path the touch firmware for the payload, XCODE15_DEVELOPER_DIR=path
Xcode 15.4’s Developer directory.
Everything lands under out/target/product/<device>/. A device’s loader flags and boot-args differ per product: each
product’s loader, payload, boot image and zip are in the product’s own folder (single/, split/; the development
layout’s at the top).
Source: envsetup.sh and core/mka.sh of mapple_build, branch build at 375b298 (not on main yet).
Applies to realme 8i (spaced), release 1 · Updated 14 November 2026