gmod-rs/android/README.md
Niko Marmeladkov 8d572b8190 Android: ландшафт, HUD над системными панелями, прыжок по тапу
- MainActivity фиксирует ландшафт (SDL перебивал манифест FULL_USER) и
  передаёт путь к ассетам через getExternalFilesDir;
- короткий тап по JUMP не теряется между кадрами (jump_pending);
- HUD сдвинут внутрь от статус-бара и нижней панели;
- логгер на Android собирается без неиспользуемой ветки.
2026-10-23 14:18:45 +03:00

76 lines
4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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`).
## Сборка
```bash
./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`.
## Установка
```bash
adb install -r target/android/gmod-rs-debug.apk
```
Ассеты GMod (каталог `server` из установки/DS-сервера) копируются во внешний
каталог приложения:
```bash
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 + карта): карта грузится и
рисуется, часть материалов заменяется заглушкой.
## Запуск и логи
```bash
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`.