113 lines
3.3 KiB
Markdown
113 lines
3.3 KiB
Markdown
<!-- file: deltas/0.1.0/0-pre.7.md -->
|
|
<!-- version: 1 -->
|
|
|
|
# Delta 0.1.0-0-pre.7
|
|
|
|
## Base
|
|
|
|
Base validée : `0.1.0-0-pre.6.fix.1`.
|
|
|
|
## Validation du delta précédent
|
|
|
|
Le 2026-09-16, l'utilisateur a validé les gates Rust légères ainsi que les trois builds Android `:common`, Reflex et Snake. Les trois commandes Gradle ont terminé par `BUILD SUCCESSFUL`.
|
|
|
|
## Objectif
|
|
|
|
Introduire le `cdylib` Rust Android, le symbole `SDL_main`, le staging `jniLibs` et préparer le premier lancement réel sur appareil ou émulateur.
|
|
|
|
## Changements
|
|
|
|
- nouveau crate `crates/apps/game-android-entrypoint` ;
|
|
- `crate-type = ["cdylib"]` ;
|
|
- features `reflex` et `snake` activées par build applicatif ;
|
|
- export contrôlé du symbole `SDL_main` ;
|
|
- `engine-v1-sdl` utilise `use-pkg-config` uniquement hors Android ;
|
|
- `SaseGameActivity` charge `SDL3` puis `game_android_entrypoint` ;
|
|
- script `scripts/build_android_rust.py` pour extraire la bibliothèque SDL3 de l'AAR uniquement pour le linker Rust puis générer `jniLibs` via `cargo-ndk` ;
|
|
- `jniLibs` générés exclus de Git ;
|
|
- `versionName` Android porté à `0.1.0-0-pre.7`.
|
|
|
|
## Exception FFI
|
|
|
|
Le symbole `SDL_main` nécessite un nom ABI stable. Rust 2024 classe `export_name` comme attribut unsafe. Une exception normative unique est donc introduite dans `game-android-entrypoint` : un seul `#[unsafe(export_name = "SDL_main")]`, sans bloc ou fonction unsafe.
|
|
|
|
## Préflight Android Rust
|
|
|
|
Vérifier le NDK et les outils :
|
|
|
|
```bash
|
|
cargo ndk --version
|
|
rustup target list --installed | grep aarch64-linux-android
|
|
```
|
|
|
|
Si nécessaire :
|
|
|
|
```bash
|
|
rustup target add aarch64-linux-android
|
|
cargo install cargo-ndk
|
|
```
|
|
|
|
SDL demande NDK r28c ou ultérieur. `cargo-ndk` détecte normalement le NDK Android Studio ; `ANDROID_NDK_HOME` peut être utilisé pour forcer un chemin.
|
|
|
|
## Validation Rust hôte
|
|
|
|
Le delta modifie du Rust :
|
|
|
|
```bash
|
|
cargo fmt --all
|
|
cargo fmt --all -- --check
|
|
python3 scripts/audit_rust_workspace_rules.py
|
|
python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates Android deltas history
|
|
cargo check --workspace
|
|
cargo clippy --workspace --all-targets --all-features -- -D warnings
|
|
```
|
|
|
|
Test ciblé de la crate d'entrée sans feature :
|
|
|
|
```bash
|
|
cargo test -p game-android-entrypoint --no-default-features
|
|
```
|
|
|
|
## Build natif Android
|
|
|
|
Depuis la racine :
|
|
|
|
```bash
|
|
python3 scripts/build_android_rust.py reflex
|
|
python3 scripts/build_android_rust.py snake
|
|
```
|
|
|
|
Puis :
|
|
|
|
```bash
|
|
cd Android
|
|
gradle :game-reflex-poc:assembleDebug
|
|
gradle :game-snake-poc:assembleDebug
|
|
cd ..
|
|
```
|
|
|
|
## Smoke appareil/émulateur
|
|
|
|
Avec une cible ADB disponible :
|
|
|
|
```bash
|
|
adb devices
|
|
adb install -r Android/game-reflex-poc/build/outputs/apk/debug/game-reflex-poc-debug.apk
|
|
adb shell am start -n com.sasedev.games.reflex/.ReflexActivity
|
|
```
|
|
|
|
Puis répéter pour Snake :
|
|
|
|
```bash
|
|
adb install -r Android/game-snake-poc/build/outputs/apk/debug/game-snake-poc-debug.apk
|
|
adb shell am start -n com.sasedev.games.snake/.SnakeActivity
|
|
```
|
|
|
|
Le critère de réussite est l'ouverture de la surface SDL sans dialogue `SDL Error`, crash natif ou `UnsatisfiedLinkError`.
|
|
|
|
## Règle de transition
|
|
|
|
Si les gates Rust, les deux builds natifs, les APK et les deux smokes appareil/émulateur sont propres, passer automatiquement à `0.1.0-0-pre.8`.
|
|
|
|
Si une gate échoue à cause du projet, produire `0.1.0-0-pre.7.fix.1`.
|