Files
games/Android
2026-09-17 18:52:21 +02:00
..
2026-09-17 17:58:07 +02:00
2026-09-17 18:52:21 +02:00
2026-09-17 18:52:21 +02:00
2026-09-16 10:04:59 +02:00
2026-09-16 08:49:45 +02:00
2026-09-16 09:29:19 +02:00
2026-09-16 08:49:45 +02:00
2026-09-16 11:32:07 +02:00
2026-09-16 11:32:07 +02:00
2026-09-16 08:49:45 +02:00

Android

Le frontend Android est un projet Gradle multi-module séparé du workspace Cargo.

Modules

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 :

SDL3-3.4.16.aar

dans :

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 :

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 stage<Variant>SasedevAssets via la Variant API AGP.

La tâche générée compose les sources :

assets/common/          -> assets/common/
assets/<game>/          -> assets/game/

dans un répertoire généré sous Android/<module>/build/generated/sasedevAssets/<variant>/.

Aucune ressource source n'est copiée durablement dans un module Android ou une crate Rust.

Version NDK du projet

Android/gradle.properties définit androidNdkVersion=28.2.13676358.

Gradle utilise cette valeur comme ndkVersion. Le script Rust Android résout la même version sous ${ANDROID_HOME}/ndk/ et définit ANDROID_NDK_HOME uniquement pour le sous-processus cargo ndk.

Aucun ANDROID_NDK_HOME global n'est requis ; plusieurs NDK peuvent rester installés côte à côte.