Files
games/Android
2026-09-21 10:32:31 +02:00
..
2026-09-17 17:58:07 +02:00
2026-09-21 10:32:31 +02:00
2026-09-21 10:32:31 +02:00
2026-09-21 10:32:31 +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 10:32:31 +02:00
2026-09-21 10:32:31 +02:00

Android

Le frontend Android natif 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

Le pipeline Android natif 0.3.3 utilise :

  • Android Gradle Plugin 9.4.0 ;
  • Gradle >= 9.6.0, résolu depuis l'environnement de développement ;
  • JDK >= 17 pour exécuter Gradle/AGP, sans JAVA_HOME imposé par le projet ;
  • niveau Java source/target 17 pour la glue Android ;
  • compileSdk 36 ;
  • targetSdk 36 ;
  • minSdk 21 ;
  • NDK 28.2.13676358 (r28c) ;
  • SDL3 Android AAR 3.4.16.

Android/settings.gradle déclare minimumGradleVersion = 9.6.0 et refuse explicitement une version plus ancienne. Une version système plus récente reste autorisée et devient la version réellement utilisée pour le build.

Le JDK n'est pas épinglé par le projet Android natif. Le shell/IDE fournit le JDK courant ; la gate doit afficher java -version et gradle --version afin de consigner la combinaison réellement validée. Le POC Tauri Android historique conserve ses propres contraintes de JDK et de wrapper sous sa crate ; elles ne pilotent pas le chemin SDL3 natif.

Commandes Gradle

Depuis la racine du dépôt :

java -version
(cd Android && gradle --version)

Le build natif normal utilise directement le Gradle de l'environnement :

(cd Android && gradle :game-snake-poc:assembleDebug)
(cd Android && gradle :game-reflex-poc:assembleDebug)

Le dépôt ne versionne pas de Gradle Wrapper pour le projet Android natif. Le minimum est un contrat de compatibilité, pas une version exacte imposée à toutes les machines.

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 compile contre cet artefact et SaseGameActivity étend org.libsdl.app.SDLActivity.

Rust Android natif

Le crate game-android-entrypoint produit libgame_android_entrypoint.so. Android/gradle/sasedev-rust-android.gradle transfère au graphe Gradle les responsabilités historiques d'extraction SDL3, de résolution NDK, de cargo ndk, de sélection de feature et de staging jniLibs.

À 0.3.3-0-pre.3, Snake et Reflex utilisent tous deux le même pipeline commun avec deux ABI :

arm64-v8a
x86_64

Chaque assembleDebug doit déclencher, pour chaque ABI, un build cargo ndk avec exactement la feature du module concerné. Les outputs sont placés sous :

Android/<game>/build/generated/sasedevNative/debug/<abi>/jniLibs/<abi>/
├── libSDL3.so
└── libgame_android_entrypoint.so

AGP fusionne ces sources jniLibs générées dans un APK Debug universal contenant les deux architectures. Aucune copie durable n'est faite dans src/main/jniLibs.

scripts/build_android_rust.py reste temporairement comme chemin historique jusqu'au jalon de fermeture 0-pre.4; il ne fait plus partie du chemin normal assembleDebug de Snake ou Reflex.

Bridge JNI et tactile

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. La tâche Rust Android résout la même version sous ${ANDROID_HOME}/ndk/ ou ${ANDROID_SDK_ROOT}/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.