gmod-rs/android
Niko Marmeladkov d42b581180 fs pack: минимальный набор ассетов карты + встроенные ассеты в APK
Замер: для gm_construct реально читаются 335 файлов из VPK на 27,0 МБ
(277 материалов, 23 модели, 35 Lua-скриптов; крупнейшее — m_anm.ani 6,8 МБ)
плюс карта 35,0 МБ. Итого 62,1 МБ сырых, 31 МБ в tar.gz — против 6,7 ГБ
полной установки. Этого набора достаточно: клиент запускается с ним, карта
и пистолет полностью текстурированы (проверено кадром).

- VirtualFs: запись успешных чтений (start_recording/take_recorded);
- команда `gmod-rs fs pack <карта> --out <каталог>`: собирает мир, грузит
  модели игрока и оружия, автозагрузку Lua и копирует прочитанные файлы в
  структуру garrysmod/... плюс карту — получается самодостаточный корень
  ассетов для `--assets`;
- android/build.sh: если есть android/assets/gmod (или GMOD_RS_ANDROID_ASSETS),
  каталог кладётся в APK как assets/gmod;
- MainActivity: при первом запуске распаковывает assets/gmod в
  files/gmod_server/server, если карты там ещё нет — APK самодостаточен,
  adb push не нужен;
- .gitignore: android/assets/ (ассеты GMod не коммитим).

Все сьюты зелёные.
2026-10-23 17:03:50 +03:00
..
app/src/main/java/org fs pack: минимальный набор ассетов карты + встроенные ассеты в APK 2026-10-23 17:03:50 +03:00
.gitignore Android: кросс-сборка клиента, SDL-обвязка и сенсорное управление 2026-10-23 13:37:11 +03:00
AndroidManifest.xml Android: ландшафт, HUD над системными панелями, прыжок по тапу 2026-10-23 14:18:45 +03:00
build.sh fs pack: минимальный набор ассетов карты + встроенные ассеты в APK 2026-10-23 17:03:50 +03:00
README.md Android: ландшафт, HUD над системными панелями, прыжок по тапу 2026-10-23 14:18:45 +03:00

Android-клиент gmod-rs

APK под Android 12+ (API 31+), arm64-v8a. Нативный клиент — тот же крейт client, что и на десктопе: SDL3 + wgpu. Для Android он собирается как cdylib (libmain.so) с экспортом SDL_main; Java-обвязка — штатная SDLActivity из SDL3 (zlib-лицензия, файлы лежат в app/src/main/java/org/libsdl/app).

Сборка

./android/build.sh

Нужны: Android SDK (platform-tools, platforms;android-31+, build-tools, android.jar), NDK (проверено на r29), cmake, Rust с таргетом aarch64-linux-android. Скрипт сам находит SDK/NDK (ANDROID_HOME, ANDROID_NDK_HOME или /opt/android-sdk, /opt/android-ndk), собирает libclient.so + libSDL3.so, пакует и подписывает debug-ключом (android/debug.keystore, создаётся при первом запуске).

Результат: target/android/gmod-rs-debug.apk.

Установка

adb install -r target/android/gmod-rs-debug.apk

Ассеты GMod (каталог server из установки/DS-сервера) копируются во внешний каталог приложения:

adb shell mkdir -p /sdcard/Android/data/org.gmodrs.client/files/gmod_server
adb push ~/gmod_server/server /sdcard/Android/data/org.gmodrs.client/files/gmod_server/
# adb создаёт каталоги от shell, а приложению нужен доступ:
adb shell chmod -R 777 /sdcard/Android/data/org.gmodrs.client/files/gmod_server

Приложение по умолчанию открывает gm_construct и ищет ассеты в /sdcard/Android/data/org.gmodrs.client/files/gmod_server/server (точный путь передаёт MainActivity через getExternalFilesDir). Другой путь можно задать переменной GMOD_RS_ASSETS — но на телефоне переменные окружения задать непросто, поэтому проще положить ассеты по стандартному пути.

Минимально для gm_construct достаточно garrysmod/ (карты и контент игры) и sourceengine/ (текстуры/модели HL2); platform/ нужен для части эффектов. Проверено на усечённом наборе (garrysmod VPK + карта): карта грузится и рисуется, часть материалов заменяется заглушкой.

Запуск и логи

adb shell am start -n org.gmodrs.client/.MainActivity
adb logcat -s gmod-rs SDL

Управление

  • левая половина экрана — виртуальный стик (ходьба, сразу бегом);
  • правая половина — свайп обзора;
  • кнопки JUMP и DUCK справа снизу;
  • системная кнопка «назад» завершает приложение (SDL присылает Escape).

Ограничения

  • Steam/сеть отключены на Android: steamworks не собирается под эту цель, команда net недоступна.
  • Lua на Android — Lua 5.4 (vendored), а не LuaJIT: кросс-сборка LuaJIT под Android в mlua не поддерживается. API GMod-скриптов тот же.
  • Собран и проверен arm64-v8a (APK для телефона) и x86_64 (эмулятор). Проверка в эмуляторе API 35: карта грузится, кадры рисуются через SwiftShader (11–14 fps на софтверном GPU), стик/обзор/прыжок работают. На реальном arm64-устройстве не запускалось — проверьте adb logcat.
  • Для эмулятора: ANDROID_ABI=x86_64 ./android/build.sh, результат — target/android/gmod-rs-debug-x86_64.apk.