# CM11 Android 4.4.2 for AEmulator Sunset

**Experimental: user reports CM11 boots on the first attempt (2026-10-07).**
AESS442-2 adds a guarded fallback for default-keyboard selection. AESS442-3
explicitly packages the pinned Goldfish software media-codec configuration and
the init-created `/etc -> /system/etc` alias. Both older archives already contain
the XML under `/system/etc`, but lack `/etc`; CM11's MediaCodecList opens
`/etc/media_codecs.xml` and logs show SoundPool unable to decode Ogg UI sounds.
The earlier missing-XML hypothesis was superseded by archive comparison.
Sunset.33 also restores missing aliases for existing VMs. Sound playback still
needs on-device testing.
Added 2026-10-04.

This is an unofficial ARMv7 CM11 guest, not firmware for a physical phone.
It targets AEmulator's userspace execution model and uses the host kernel.
The build includes CM File Manager and the CM `userdebug` managed root support.
Terminal is CM's upstream Jackpal Android Terminal Emulator 1.0.70, with both
matching ARM native libraries. No Google Apps or proprietary device blobs.
Retired CM account and physical-device update services are omitted.

Sources use release `cm-11.0-XNPH25R-bacon-d22b777afa`, with CM project commits
resolved from that tag and AOSP projects pinned to `android-4.4.2_r2`.
The unavailable CM SVOX fork is replaced with public AOSP SVOX from that release
(commit `838228cc17b5798e51bc20d06e54dbd781e441db`). Commercial `vendor/cyngn`
extras, Mac binaries and non-default IDE projects are excluded. The exact
426-project checkout is recorded in `manifest-resolved.xml`.

Build project: `/home/nyash/0drel/cm11-aess`. Sources and downloads remain there,
separate from the Sunset app build and other ROM projects. Run `prepare.py`
against that directory before `build-container.sh` inside a build container.
The latter expects source at `/src`, tools at `/tools`, and this recipe mounted
at `/recipe`. Base container currently available on the server:
`sm-t285-cm11-build@sha256:0138c2e800e4631087b9f66bee5d2aa4935335c352182e06cb16408291236e37`.
It contains Ubuntu 20.04, Python 2 and multilib build dependencies; tools use
Zulu OpenJDK 7.0.352. A 4096-file descriptor limit avoids JDK7 initialization
failure under modern Docker defaults. Do not inject JVM option banner variables:
the legacy version checker reads only the first output line. OpenJDK and GNU
make 4.2.1 produce legacy compatibility warnings. Further old-build-system
adaptations may be required.
The container uses `C.UTF-8`, checked at startup, so JDK7's javadoc reads UTF-8
framework sources rather than failing on non-ASCII comments with `LC_ALL=C`.
`prepare.py` also gates CM minui's generated kernel-header dependency when
`TARGET_NO_KERNEL=true`; generic userspace uses the platform Linux headers.
The framework overlay enables the navigation bar only. Rotation uses CM11's
existing sensor/policy defaults; this snapshot has no `config_supportAutoRotation`
resource (removed from our overlay on 2026-10-04).

Downloaded inputs:

| Input | SHA-256 |
| --- | --- |
| Zulu `zulu7.56.0.11-ca-jdk7.0.352-linux_x64.tar.gz` | `8a7387c1ed151474301b6553c6046f865dc6c1e1890bcf106acc2780c55727c8` |
| `https://jackpal.github.io/Android-Terminal-Emulator/downloads/Term.apk` | `4cbf6adb273a6afa01f7d5f4ea97ac22b5a97ce1a34c000f2ef308a6383e8821` |

Preserve upstream licenses and generated system notices, plus resolved source
manifest and every source patch, with distributed images. Terminal's upstream
source tag is `v1.0.70` (`f5ecc5a63145ddb2b6797922dc241a7fea6cd6da`), Apache 2.0.
Do not describe the heterogeneous Android/CM sources as uniformly GPLv3.
This obsolete, rooted system is intended for trusted testing, not a secure daily OS.

Do not publish the first-start ROM download prompt until an image has been tested
in AEmulator. Planned distribution name remains `Android442forAESS.aessvm`.

## Packaging

Compile `guest-fs-config.c` against the pinned `system/core/include` headers into
`packaged-AESS442-3/guest-fs-config`, then run `python3 recipe/pack.py /path/to/cm11-aess`.
It packages system files using CM's filesystem ownership/mode rules and root
files using ramdisk CPIO metadata. Absolute guest links become relative links
inside the archive. Settings are included; data and runtime files are omitted.
The initial profile has version zero so Sunset analyzes init scripts before boot.

`boot.img` is an Android v0 ramdisk-only container with **no kernel**. It is for
AEmulator's host-kernel userspace model only, not for flashing a physical device.
Packaging verifies headers, archive contents, paths, required applications and
libraries, and reads every payload back. This does not establish a successful
on-device import or guest boot. Root access is CM's userdebug implementation;
its behavior in the guest still needs testing.

Distribution includes `Android442forAESS-source.tar.gz`: the actual patched
source tree and checked-in prebuilts, recipe, resolved manifest, and terminal
APK. Git/repo metadata and build outputs are excluded. Upstream source licenses
remain in their directories and Android's generated NOTICE is retained in the VM.

For AESS442-3, additionally apply `Android442forAESS-source-update-AESS442-3.tar.gz`
over the original source bundle: it supplies the updated recipe and full modified
InputMethodManagerService source. Rebuild using the documented container, then
package. The original complete source bundle is retained unchanged.
