- client получил lib.rs (общий запуск) и cdylib с экспортом SDL_main; - steamworks и mlua-фичи разведены по target cfg: на Android нет Steam, Lua 5.4 вместо LuaJIT; - виртуальный стик, обзор свайпом и кнопки прыжка/приседа в map; - android/: манифест, SDLActivity Java, build.sh (aapt2+d8+apksigner). |
||
|---|---|---|
| .. | ||
| app/src/main/java/org/libsdl/app | ||
| .gitignore | ||
| AndroidManifest.xml | ||
| build.sh | ||
| README.md | ||
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/
Приложение по умолчанию открывает gm_construct и ищет ассеты в
/sdcard/Android/data/org.gmodrs.client/files/gmod_server/server. Другой путь
можно задать переменной GMOD_RS_ASSETS (например, через adb shell setprop
не сработает — переменные окружения Android-приложения задаются только из
Java/обвязки; для отладки удобнее положить ассеты по стандартному пути).
Минимально для gm_construct достаточно garrysmod/ (карты и контент игры) и
sourceengine/ (текстуры/модели HL2); platform/ нужен для части эффектов.
Управление
- левая половина экрана — виртуальный стик (ходьба, сразу бегом);
- правая половина — свайп обзора;
- кнопки
JUMPиDUCKсправа снизу; - системная кнопка «назад» завершает приложение (SDL присылает Escape).
Ограничения
- Steam/сеть отключены на Android:
steamworksне собирается под эту цель, командаnetнедоступна. - Lua на Android — Lua 5.4 (vendored), а не LuaJIT: кросс-сборка LuaJIT под Android в mlua не поддерживается. API GMod-скриптов тот же.
- Проверено только arm64-v8a; x86_64-эмулятор требует отдельной сборки
(см.
ANDROID_ABI/TARGETвbuild.sh).