Files
games/docs/development/006-ANDROID_RUST_NATIVE_BUILD.md
2026-09-16 09:29:19 +02:00

1.6 KiB

Build Rust Android natif

Contrat SDL

SDLActivity charge SDL3, puis game_android_entrypoint, et invoque le symbole SDL_main.

Le crate Rust game-android-entrypoint est un cdylib. Il est compilé avec exactement une feature métier lors du packaging d'une application :

  • reflex ;
  • snake.

Le même nom de bibliothèque native peut être utilisé dans les deux APK puisque chaque module Android possède son propre répertoire jniLibs.

Toolchain

SDL Android requiert actuellement SDK 35 ou ultérieur, NDK r28c ou ultérieur et API minimale 21. La baseline projet conserve compileSdk 36, minSdk 21 et l'AAR SDL3 3.4.16.

Installer au minimum :

rustup target add aarch64-linux-android
cargo install cargo-ndk

cargo-ndk détecte un NDK installé par Android Studio ou utilise ANDROID_NDK_HOME lorsqu'il est défini.

Build

Depuis la racine :

python3 scripts/build_android_rust.py reflex
python3 scripts/build_android_rust.py snake

Puis :

cd Android
gradle :game-reflex-poc:assembleDebug
gradle :game-snake-poc:assembleDebug
cd ..

Les bibliothèques générées sous Android/*/src/main/jniLibs/ sont des artefacts de build et ne sont pas versionnées.

Exception FFI Rust

Rust 2024 exige un attribut unsafe pour imposer un nom de symbole d'export. Le projet autorise donc exclusivement #[unsafe(export_name = "SDL_main")] dans game-android-entrypoint. Cette exception ne permet ni bloc unsafe, ni fonction unsafe, ni déréférencement des pointeurs argc/argv.