Skip to content

Releases: tarek369/GeneralsZH-Android

v0.4 — Android (launch-crash root-cause fix, game-data import)

Choose a tag to compare

@tarek369 tarek369 released this 08 Sep 17:03

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 (DxvkResourceAllocationPool SIGSEGV 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)

Choose a tag to compare

@tarek369 tarek369 released this 11 Aug 18:45

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 null m_data pointer after an out-of-bounds treeType index (fault address 0x20, an exact match). The redeploy-occupants motion swept a unit over a stale tree-partition cell. Bounds-checked treeType against m_numTreeTypes and null-checked m_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/delete from the dynamic symbol table. As a result, v0.2 still let DXVK/libc++/SDL3 allocations reach the engine's pool operator 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

  1. Download GeneralsZH-full.apk below
  2. 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)
  3. Copy your game's .big files 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)

Choose a tag to compare

@tarek369 tarek369 released this 14 Jul 08:55

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 CreateAndroidSurfaceKHR null-pointer crash on some devices.
  • ✅ DXVK allocator isolation — DXVK's internal allocations now use standard malloc/free instead 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::None to 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

  1. Download GeneralsZH-full.apk below
  2. adb install GeneralsZH-full.apk (uninstall v0.1 first if installed)
  3. Copy your game's .big files to /sdcard/Android/data/me.generalsx.zh/files/GameData/Data/
  4. 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

Choose a tag to compare

@tarek369 tarek369 released this 07 Jul 10:32

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.log

and 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

  1. Download GeneralsZH-full.apk below
  2. adb install GeneralsZH-full.apk (uninstall the old "DXVK d3d8 spike" app first if you have it: adb uninstall me.generalsx.spike)
  3. Copy your game's .big files to /sdcard/Android/data/me.generalsx.zh/files/GameData/Data/
  4. 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.