Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
b15b9dc
Android port spike: libmain.so builds clean for arm64-v8a
JRickey May 1, 2026
ca3c5f7
Android: add env + emulator helper scripts
JRickey May 1, 2026
85de30c
Android: aarch64 asm coroutine swap (boost::context-style)
JRickey May 1, 2026
136f446
Android: stage Auto Backup config for SRAM save persistence
JRickey May 1, 2026
6f09bdd
Phase 2: Gradle/AGP project skeleton
JRickey May 1, 2026
9c6f41c
Phase 3: SDLActivity bridge — SDL_main runs on Android
JRickey May 1, 2026
15d04ee
Phase 4.1+4.2: cross-compile Torch as libtorch_runner.so
JRickey May 1, 2026
9120dc5
Phase 4.3: bundle non-copyrighted assets in APK + first-run extract
JRickey May 1, 2026
26ba0e7
Phase 4.4: ROM picker UI + JNI bridge to libtorch_runner.so
JRickey May 1, 2026
60e4971
Phase 5: first-boot triage — Hyrule Castle attract demo renders on An…
JRickey May 1, 2026
3a8301c
Phase 6.1: defer port_submit_display_list to SDL_main thread
JRickey May 1, 2026
4db2ffe
Phase 6.3: touch overlay — virtual SDL gamepad fed by Java touch events
JRickey May 1, 2026
5fbb91d
Phase 6.4: full touch layout — analog stick + 4 face buttons
JRickey May 1, 2026
3af4979
Phase 7: verify audio + ghost-fb on emulator + status doc
JRickey May 1, 2026
19f3302
Phase 8.1+8.2: fullscreen + landscape orientation + landscape-aware o…
JRickey May 1, 2026
ca9d315
Phase 8.3: auto-hide touch overlay when physical controller paired
JRickey May 2, 2026
b71141f
Phase 8.4: per-button press visual feedback (alpha + scale)
JRickey May 2, 2026
cb7c59f
Phase 8.5: app launcher icon (adaptive)
JRickey May 2, 2026
86b45c9
Phase 8.6: release signing config + assembleRelease/bundleRelease
JRickey May 2, 2026
6ffa021
Phase 8.7: prefer AAudio backend (low-latency) over OpenSL ES
JRickey May 2, 2026
73a97f0
Phase 8.8: ROM re-extraction via Intent extra + launcher shortcut
JRickey May 2, 2026
bb6dbc0
Android: drop ssb64.o2r bundling (no longer produced) + reaffirm no-R…
JRickey May 24, 2026
04f5a86
Track libultraship ssb64-android-rebased in agent/android-port-rebased
JRickey May 24, 2026
f0645e6
Android platform gates: US-only, drop shaders / hires / updater / dis…
JRickey May 24, 2026
48b3ca2
Bump submodules: NDK build fixes (decomp ptrdiff_t, LUS GLES sRGB + h…
JRickey May 24, 2026
123e406
android: trigger axis init + menu toggle deferral + isMenuVisible getter
JRickey May 24, 2026
1a256c9
android: touch overlay polish — N64 buttons, Z/R triggers, menu hambu…
JRickey May 24, 2026
20c0229
android: hide Quit BattleShip header button in the LUS menu
JRickey May 24, 2026
45d6a89
ci: build Android APK + AAB on release tags
JRickey May 24, 2026
542cd8e
ci(android): drop AAB from release artifacts
JRickey May 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 83 additions & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,85 @@ jobs:
path: dist/BattleShip${{ matrix.version == 'jp' && '-JP' || '' }}-x86_64.AppImage
if-no-files-found: error

build-android:
# US-only — the Android pipeline (Gradle asset staging, touch overlay,
# ROM picker UI) has only ever been tested against the US decomp.
# Pinning is also enforced in CMakeLists.txt; setting SSB64_VERSION=jp
# on Android would FATAL out at configure time.
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
# Same as the other jobs — fetch-tags-aware history for the
# BATTLESHIP_VERSION string the CMake derives from `git describe`.
fetch-depth: 0
- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: '17'
- name: Install Android SDK + NDK r29
uses: android-actions/setup-android@v3
with:
# Match android/app/build.gradle.kts: ndkVersion = "29.0.14206865"
# and compileSdk = 34. ssb64-port has confirmed r29 + API 34
# build clean against bionic / NDK toolchain; older NDKs trip on
# the ptrdiff_t shim in decomp/include/stddef.h.
packages: 'platforms;android-34 build-tools;34.0.0 ndk;29.0.14206865'
- name: Generate f3d.o2r (open-source Fast3D shaders bundled in APK)
# Mirrors the GenerateF3DO2R CMake target. We don't invoke the full
# CMake build here because Gradle's externalNativeBuild handles that;
# we just need the f3d.o2r file present at repo root so Gradle's
# stageGameAssets task picks it up at configure time. The file
# contents are just shaders/ packed as a ZIP — no toolchain needed.
working-directory: libultraship/src/fast
run: cmake -E tar cf "$GITHUB_WORKSPACE/f3d.o2r" --format=zip shaders
- name: Decode release keystore (if configured via secrets)
# If SSB64_ANDROID_KEYSTORE_BASE64 is set in the repo secrets, decode
# it to a real .jks file and feed the gradle script's env-var lookup
# (signingProp() in build.gradle.kts) so the release build is signed
# with the release key. Otherwise Gradle falls back to the debug
# signing config — the resulting APK still runs, it's just not
# distributable through Play Store.
if: ${{ secrets.SSB64_ANDROID_KEYSTORE_BASE64 != '' }}
env:
SSB64_ANDROID_KEYSTORE_BASE64: ${{ secrets.SSB64_ANDROID_KEYSTORE_BASE64 }}
run: |
echo "$SSB64_ANDROID_KEYSTORE_BASE64" | base64 -d > "$GITHUB_WORKSPACE/release.jks"
echo "SSB64_RELEASE_KEYSTORE=$GITHUB_WORKSPACE/release.jks" >> "$GITHUB_ENV"
echo "SSB64_RELEASE_KEYSTORE_PASSWORD=${{ secrets.SSB64_ANDROID_KEYSTORE_PASSWORD }}" >> "$GITHUB_ENV"
echo "SSB64_RELEASE_KEY_ALIAS=${{ secrets.SSB64_ANDROID_KEY_ALIAS }}" >> "$GITHUB_ENV"
echo "SSB64_RELEASE_KEY_PASSWORD=${{ secrets.SSB64_ANDROID_KEY_PASSWORD }}" >> "$GITHUB_ENV"
- name: Build APK
# assembleRelease produces the sideload APK that users install
# directly. We intentionally do NOT run bundleRelease — the AAB
# is Play-Store-only (needs Google's bundletool to install on
# a device), and this project isn't distributed through Play.
# Skipping it also keeps the GitHub Release page uncluttered.
working-directory: android
run: ./gradlew --no-daemon assembleRelease
- name: Stage release APK under a stable name
# Gradle drops the file at app/build/outputs/apk/release/ with
# a name like app-release.apk or app-release-unsigned.apk
# depending on signing config. Normalize to BattleShip-android.apk
# so the release job's files: list doesn't need a glob.
run: |
mkdir -p dist
shopt -s nullglob
apk=(android/app/build/outputs/apk/release/app-release*.apk)
if (( ${#apk[@]} == 0 )); then
echo "::error::no APK produced under android/app/build/outputs/apk/release/"
ls -la android/app/build/outputs/apk/release/ || true
exit 1
fi
cp "${apk[0]}" dist/BattleShip-android.apk
ls -la dist/
- uses: actions/upload-artifact@v4
with:
name: BattleShip-android
path: dist/BattleShip-android.apk
if-no-files-found: error

build-windows:
runs-on: windows-2022
strategy:
Expand Down Expand Up @@ -205,7 +284,7 @@ jobs:

release:
name: Publish GitHub Release
needs: [build-macos, build-linux, build-windows]
needs: [build-macos, build-linux, build-windows, build-android]
if: startsWith(github.ref, 'refs/tags/v') # only on tag pushes
runs-on: ubuntu-latest
steps:
Expand All @@ -216,13 +295,16 @@ jobs:
- name: Publish Release
uses: softprops/action-gh-release@v2
with:
# Android: sideload APK only (no Play Store distribution, so
# the AAB is skipped). Android is US-only so there's no -JP.
files: |
artifacts/BattleShip.dmg
artifacts/BattleShip-JP.dmg
artifacts/BattleShip-x86_64.AppImage
artifacts/BattleShip-JP-x86_64.AppImage
artifacts/BattleShip-windows.zip
artifacts/BattleShip-JP-windows.zip
artifacts/BattleShip-android.apk
generate_release_notes: true
draft: true # land as a draft so a human can sanity-check
# before the release is visible to the public.
2 changes: 1 addition & 1 deletion .gitmodules
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[submodule "libultraship"]
path = libultraship
url = https://github.com/JRickey/libultraship.git
branch = ssb64
branch = ssb64-android-rebased
[submodule "torch"]
path = torch
url = https://github.com/JRickey/Torch.git
Expand Down
Loading