Build it yourself
The public-development goal is not only to show that the port runs on my hardware. The source, dependency baselines, build steps, game-data boundary and validation criteria are documented so another person can reproduce the work without access to my private development workspace.
01 / REPRODUCIBILITY STATUS
What is public, and what is not
Redistributable source
The sanitized source tree is published at raposomiguel50/system-shock-android. The current public pre-release is v0.1.0-pre.3.
Game data
You must supply your own compatible System Shock resources from a legally obtained copy. The source tree and APK exclude res/data, res/sound and other proprietary game resources.
Evidence boundary
Fresh-clone bootstrap/build, semantic APK verification, RP5 side-by-side QA, manual gameplay QA, signed non-debuggable release verification and the first-run Android folder importer all passed before v0.1.0-pre.3 was published.
v0.1.0-pre.1 remains historical evidence of the first dependency-bootstrap defect. v0.1.0-pre.2 preserved the corrected bootstrap path. v0.1.0-pre.3 is the first public release that includes a validated APK.
02 / BUILD
Windows / PowerShell 7 build path
Clone the public repository or download the v0.1.0-pre.3 source ZIP.
| Public release | v0.1.0-pre.3 |
|---|---|
| Release source commit | b51dbe495a0127754a82880dc3b38f736d937ce9 |
| Shockolate baseline | 4cc3d07dfff2d11b6d3a0a9960a51cf4ca253690 |
| SDL | 2.32.10 - 5d249570393f7a37e037abf22cd6012a4cc56a71 |
| SDL_mixer | 2.8.1 - 171eb2d420d5643e4ee11514a06e04a41a463bbd |
| JDK | 17 |
| Gradle | 8.1.1 via the included wrapper |
| Android SDK | Platform 34 + Build Tools 34.0.0 |
| NDK | 29.0.14206865 |
| CMake | 3.22.1 from the Android SDK |
| ABI | arm64-v8a |
1. Get the source
Clone https://github.com/raposomiguel50/system-shock-android.git or download the tagged source ZIP above. Use the exact v0.1.0-pre.3 tag to reproduce this release.
2. Bootstrap dependencies
Run pwsh -File .\scripts\bootstrap-deps.ps1. The helper obtains SDL and SDL_mixer at the exact pinned commits into the ignored .deps directory.
3. QA build
Run pwsh -File .\scripts\qa-gate.ps1 for the isolated QA build and semantic verifier. The QA package uses a distinct application ID so it can be tested without replacing the normal package.
4. Signed release build
Configure the private release-signing environment variables documented in the repository and run pwsh -File .\scripts\release-gate.ps1. The final public release variant is non-debuggable and rejects the generic Android debug certificate.
03 / GAME DATA
Bring your own compatible resources
Shockolate expects a resource layout containing res/data and res/sound. The port keeps those commercial files separate from source and APK distribution.
Expected layout
Prepare a res directory containing both data and sound. The upstream Shockolate documentation states that original CD-ROM or System Shock: Enhanced Edition assets are supported by this source lineage.
Android storage
The native Android entry point changes its working directory to SDL_AndroidGetInternalStoragePath(). Imported resources are therefore copied into the application's private files area.
First-run importer
The signed v0.1.0-pre.3 APK uses Android's Storage Access Framework. On first run choose Select res folder, select the res directory that contains data and sound, and approve access. The app copies the data through a staging directory and launches the game after a successful import.
ADB and run-as remain useful developer tools, but they are not required for the public release's normal first-run data import.
04 / INSTALL & TEST
Public pre-release installation
Install the APK
Download SystemShock-Android-v0.1.0-pre.3-arm64-v8a.apk from the GitHub release and install it on a compatible ARM64 Android device.
Import your data
Make your legally obtained res folder available on the device. Launch the app, select that folder when prompted and approve access. The data is copied into private app storage.
Validate behavior
Check menu/gameplay, 4:3 presentation, right-stick look/cursor toggle, touchscreen pointer behavior, Android text input and game audio. Record device/OS/controller details when reporting compatibility.
05 / RELEASE GATES
Evidence completed for v0.1.0-pre.3
The public pre-release was not accepted merely because a build command returned success. Source, artifact, signing and real-device gates were kept separate and all had to pass.
| Source checkout | PASS. Fresh checkout of the accepted release source. |
|---|---|
| Dependency bootstrap | PASS. SDL and SDL_mixer downloaded from scratch and verified to pinned commits. |
| APK build | PASS. ARM64 QA and release variants built successfully. |
| APK semantic gate | PASS. Package/version/ABI/native libraries checked; proprietary game data absent. |
| Device QA | PASS on Retroid Pocket 5. Side-by-side QA preserved the existing baseline package. |
| Own-data import | PASS on Retroid Pocket 5. Signed non-debuggable release-QA build imported the selected res folder through Android's folder picker. |
| Runtime QA | PASS on Retroid Pocket 5. Game launch, presentation, controls, text input and audio were accepted. |
| Release signing | PASS. Stable release certificate SHA-256: 7419c3aae7efaeea3e0e10945a98164418faf92fa1e55deac2b654c72cb34409. |
| Published APK | PASS. SHA-256: f7128eabd872ffd4f08644c05823b151992710c265d383c220b67796094155a9. |
06 / FEEDBACK
Report what you find
External reproduction results are useful even when everything works. Use the structured GitHub forms for bugs, suggestions, compatibility reports, documentation corrections or general questions.