# Android Le frontend Android est un projet Gradle multi-module séparé du workspace Cargo. ## Modules ```text Android/ ├── common/ ├── game-reflex-poc/ └── game-snake-poc/ ``` `common` est une Android Library Java qui fournit la frontière commune. Elle compile contre l'AAR SDL3 avec une dépendance `compileOnly` afin que son propre AAR reste valide. Chaque module `game-*` est une application Android indépendante ; il dépend du module `common` et package directement l'AAR SDL3 dans son APK via `implementation`. ## Toolchain de référence Pour la baseline `0.1.0-0-pre.9` : - Android Gradle Plugin `9.4.0` ; - Gradle `9.6.0` attendu par AGP 9.4 ; - JDK `17` ; - `compileSdk 36` ; - `targetSdk 36` ; - `minSdk 21` ; - SDL3 Android AAR `3.4.16`. Le NDK n'est pas encore utilisé directement dans ce delta. Le prochain jalon introduira la compilation Rust Android `cdylib` et figera la configuration NDK réellement nécessaire. ## SDL3 AAR L'archive n'est pas vendorizée dans le dépôt. Placer : ```text SDL3-3.4.16.aar ``` dans : ```text Android/libs/ ``` Le module `common` consomme cet artefact et `SaseGameActivity` étend désormais `org.libsdl.app.SDLActivity`. ## Limite volontaire de ce jalon Les APK peuvent être compilés côté Java/SDL3 une fois l'AAR disponible, mais ne disposent pas encore du `cdylib` Rust contenant le point d'entrée de jeu. Le lancement fonctionnel sur appareil/émulateur appartient donc au delta suivant. ## Rust Android natif Le crate `game-android-entrypoint` produit `libgame_android_entrypoint.so`. Il est compilé séparément pour chaque jeu avec une feature Cargo et copié dans le `jniLibs` du module Android concerné. Pour `arm64-v8a` : ```bash rustup target add aarch64-linux-android cargo install cargo-ndk python3 ../scripts/build_android_rust.py reflex python3 ../scripts/build_android_rust.py snake ``` Le script extrait temporairement `libSDL3.so` de l'AAR uniquement pour fournir le chemin de linkage à `rustc`; l'AAR reste responsable du packaging SDL3 dans l'APK. ## Bridge JNI et tactile À partir de `0.1.0-0-pre.9`, `SaseGameActivity` vérifie au démarrage la version du bridge Java/JNI chargé depuis la bibliothèque Rust. Les touch events standards restent traités via SDL3 et ne transitent pas par JNI. ## Packaging des assets Chaque variante Android enregistre une tâche `stageSasedevAssets` via la Variant API AGP. La tâche générée compose les sources : ```text assets/common/ -> assets/common/ assets// -> assets/game/ ``` dans un répertoire généré sous `Android//build/generated/sasedevAssets//`. Aucune ressource source n'est copiée durablement dans un module Android ou une crate Rust.