Files
games/Android
2026-09-21 08:39:57 +02:00
..
2026-09-17 17:58:07 +02:00
2026-09-19 06:07:25 +02:00
2026-09-19 06:07:25 +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-21 08:39:57 +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

La baseline stable 0.3.1 conserve :

  • Android Gradle Plugin 9.4.0 ;
  • Gradle 9.6.0 attendu par AGP 9.4 ;
  • JDK 17 ;
  • compileSdk 36 ;
  • targetSdk 36 ;
  • minSdk 21 ;
  • NDK 28.2.13676358 (r28c) ;
  • SDL3 Android AAR 3.4.16.

Le chemin historique compile déjà game-android-entrypoint via cargo-ndk et scripts/build_android_rust.py. 0.3.3 réactive ce produit Android natif afin de transférer cette orchestration dans Gradle, sans changer les responsabilités Rust/SDL3/Java/JNI.

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.