Repository navigation
Releases: tarek369/GeneralsZH-Android
Release list
v0.4 — Android (launch-crash root-cause fix, game-data import)
Highlights
Fixed: launch crashes on many devices (Scudo "invalid chunk state" / "corrupted chunk header")
Root cause found and fixed: the Android startup code was freeing SDL-owned cached storage-path buffers — a use-after-free plus double-free. Depending on device/allocator state this either aborted immediately at launch (Samsung S24+/Tab S8-class reports, Mali-G610 reports) or silently corrupted the heap and crashed later in rendering. Issues #4, #9, #6, #7, #10.
New: in-app game data import (Android 13+)
Android 13+ blocks file managers from writing into Android/data/, which broke the old "copy your .big files" setup. On first launch the app now offers a one-time folder import: pick the folder containing your game's Data directory and it's copied into the app's private storage. No permissions needed. (Issue #12.)
Improved: Meta Quest 3 launch
The app now waits for a non-degenerate window surface before creating the Vulkan device — the Quest's volumetric panel reports a 1x1 surface until laid out, which previously crashed vkCreateAndroidSurfaceKHR. (Issue #11 — reports from Quest users welcome.)
Also in this build
- Garrison-death crash fix from v0.3 (
W3DTreeBuffer::unitMoved) - Version identifier now reads 0.4-android (previously always 0.1)
Known issues
- Intermittent in-game crash (
DxvkResourceAllocationPoolSIGSEGV after minutes of play on some devices): under active investigation; unchanged from v0.3 — this build is strictly more stable, not less. If you hit it, a bug report with the crash log helps (#13's sibling reports tracked in the issues). - Enemy AI inactivity (upstream engine issue, #5)
- High memory usage by design of the original engine's memory pool (#3)
Install
Install the APK, then either use the in-app import or copy your game's Data folder (with the .big files from your own Zero Hour install) to Android/data/me.generalsx.zh/files/GameData/Data/.
v0.3 — Android Alpha (Garrison-crash fix + Scudo symbol-hiding)
v0.3 — Android Alpha
Engine null-deref crash fix, plus the Scudo symbol-hiding mitigation that v0.2 was missing.
What's fixed since v0.2
- ✅ Garrison-death crash fixed (#8) — the game no longer SIGSEGVs when a unit dies while garrisoned inside a building/vehicle. Root cause:
W3DTreeBuffer::unitMoved()dereferenced a nullm_datapointer after an out-of-boundstreeTypeindex (fault address0x20, an exact match). The redeploy-occupants motion swept a unit over a stale tree-partition cell. Bounds-checkedtreeTypeagainstm_numTreeTypesand null-checkedm_data, mirroring a guard the save/load path already had. Hardened two sibling code paths with the same hazard. - ✅ Scudo allocator: symbol-hiding now included — v0.2 shipped ~55 minutes before the commit that hides the engine's
operator new/deletefrom the dynamic symbol table. As a result, v0.2 still let DXVK/libc++/SDL3 allocations reach the engine's pooloperator delete, which triggered Scudo "invalid chunk state" / "corrupted chunk header" aborts on Samsung/Exynos and ARM Mali devices. v0.3 is built from current HEAD and carries that fix. This should address the launch crashes in #4 (Galaxy S24+/Exynos 2400) and #9 (Tecno Camon 30 Pro / Mali-G610). Please retest and report back.
Likely improved (needs device confirmation)
- 🔄 #6 — crash after selecting Solo Play (Galaxy Z Flip 5) — plausibly the same allocator path as #4. Likely improved by the symbol-hiding change; cannot confirm without the device.
Known issues (not fixed in this build)
- ❌ #5 — Enemy AI not working — upstream gameplay-logic issue, not Android-specific. Tracked separately.
- ❌ #7 — black-screen crash (Poco X3 Pro) — Adreno 640 is below the stated Adreno 7xx+ minimum. Likely hardware/Vulkan-driver support; please attach a logcat if you can.
- ❌ Magenta/pink screen tint (#8 follow-up) — the color-tint rendering issue reported alongside the garrison crash is a separate shader/rendering problem still under investigation.
- 🔄 #3 — High RAM usage (~2–3 GB) — architectural (legacy memory-pool design). Expected for now.
How to install / upgrade
- Download
GeneralsZH-full.apkbelow - Uninstall v0.1/v0.2 first if you hit a signature mismatch, then
adb install GeneralsZH-full.apk(the APK is signed with the same debug key as v0.1/v0.2, so in-place upgrade should work — but if your installed copy came from elsewhere, uninstall first) - Copy your game's
.bigfiles to/sdcard/Android/data/me.generalsx.zh/files/GameData/Data/
Requirements (unchanged)
- arm64-v8a Android tablet/phone (Android 7.0+, API 24+)
- Vulkan-capable GPU — Adreno 7xx+, Mali-G77+ (older GPUs like Adreno 6xx are below minimum)
- ~3 GB free RAM
- Your own copy of C&C Generals Zero Hour (Steam ~$5)
Feedback
If v0.3 fixes your crash, a one-line "works on " comment on the relevant issue (#4, #8, #9) is hugely helpful. If it still crashes, please attach a logcat / bug report — the Scudo situation is tracked and real device logs are the fastest path to a fix.
v0.2 — Android Alpha (Settings Fix + DXVK Stability)
v0.2 — Android Alpha
Settings menu crash fixed, DXVK rendering stability improved.
What's fixed since v0.1
- ✅ Settings menu crash — the Settings button no longer crashes the app (#2). The engine tried to enumerate desktop display modes which don't exist on Android.
- ✅ ANativeWindow race condition — added a wait loop that ensures the Android Surface is attached before DXVK creates the Vulkan swapchain. Fixes the
CreateAndroidSurfaceKHRnull-pointer crash on some devices. - ✅ DXVK allocator isolation — DXVK's internal allocations now use standard
malloc/freeinstead of the engine's custom memory pool, preventing free-list corruption. Survival time before the DXVK crash increased from ~10s to ~39s. - ✅ Audio backend — OpenAL now uses the Oboe audio backend (AAudio/OpenSL ES) with
PerformanceMode::Noneto avoid OEM audio policy denials. FFmpeg is integrated for audio file decoding. (Audio is still being tested — let us know if you hear sound!)
Known issues
- 🔄 DXVK rendering crash — after ~30-40 seconds of gameplay or menu interaction, DXVK may crash in
DxvkResourceAllocationPool::alloc(). This is a Vulkan memory management issue under investigation. The game auto-restarts. - ❌ Samsung/Exynos (Scudo) — the engine's memory allocator still probes memory in a way that triggers Scudo's "invalid chunk state" abort on Samsung devices (#4). Working on a fix.
- 🔄 High RAM usage — the engine uses 2-3GB RAM due to the legacy memory pool design (#3).
Requirements
- arm64-v8a Android tablet (Android 7.0+, API 24+)
- Vulkan-capable GPU (Adreno 7xx+, Mali-G77+)
- ~3GB free RAM
- Your own copy of C&C Generals Zero Hour (Steam ~$5)
How to install
- Download
GeneralsZH-full.apkbelow adb install GeneralsZH-full.apk(uninstall v0.1 first if installed)- Copy your game's
.bigfiles to/sdcard/Android/data/me.generalsx.zh/files/GameData/Data/ - Launch "Generals Zero Hour"
See the README for detailed instructions.
Legal
No game assets are distributed. You must own a legal copy of the game.
v0.1 — Android Alpha
v0.1 — Android Alpha
First public build of C&C Generals Zero Hour running natively on Android.
What works
- ✅ Full engine initialization (all 30+ subsystem stores)
- ✅ DXVK D3D8→Vulkan rendering on Adreno/Mali GPUs
- ✅ Main menu renders with text
- ✅ Touch input: tap (left-click), long-press (right-click), drag (selection box), two-finger pan/pinch zoom
- ✅ Font extraction from APK (automatic on first launch)
- ✅ Full gameplay session — skirmish tested and working
What's not ready yet
- ❌ Audio playback — OpenAL initializes but no sound is produced yet
- 🔄 Performance optimization
⚠️ Re-uploaded July 7 — fixed two launch bugs
The first APK uploaded earlier had two bugs: (1) it was the wrong binary entirely
(the early DXVK test spike — "DXVK d3d8 spike" in the launcher, crashes on
startup), and (2) even after fixing that, a missing libglm.so caused
dlopen failed on launch, and AGP's release symbol-stripping broke DXVK's
Vulkan dispatch tables causing a SIGSEGV during rendering. All three are
fixed. If you downloaded before this fix, re-download GeneralsZH-full.apk.
The correct build shows as "Generals Zero Hour" in your launcher. If you
see "DXVK d3d8 spike" instead, you have the old broken APK.
If it still crashes after re-downloading, please grab a logcat:
adb logcat -c # clear old logs
# launch the game, let it crash
adb logcat -d | grep -iE "generals|dxvk|sdl|openal|FATAL|signal|crash" > crash.logand post the output. It really helps.
Requirements
- arm64-v8a Android tablet (Android 7.0+, API 24+)
- Vulkan-capable GPU (Adreno 7xx+, Mali-G77+)
- ~3GB free RAM
- Your own copy of C&C Generals Zero Hour (Steam ~$5)
How to install
- Download
GeneralsZH-full.apkbelow adb install GeneralsZH-full.apk(uninstall the old "DXVK d3d8 spike" app first if you have it:adb uninstall me.generalsx.spike)- Copy your game's
.bigfiles to/sdcard/Android/data/me.generalsx.zh/files/GameData/Data/ - Launch "Generals Zero Hour"
See the README for detailed instructions.
Legal
No game assets are distributed. You must own a legal copy of the game.