102 lines
3.2 KiB
Markdown
102 lines
3.2 KiB
Markdown
<!-- file: Android/README.md -->
|
|
<!-- version: 8 -->
|
|
|
|
# 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 `stage<Variant>SasedevAssets` via la Variant API AGP.
|
|
|
|
La tâche générée compose les sources :
|
|
|
|
```text
|
|
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.
|