0.1.0-0-pre.7
This commit is contained in:
112
deltas/0.1.0/0-pre.7.md
Normal file
112
deltas/0.1.0/0-pre.7.md
Normal file
@@ -0,0 +1,112 @@
|
||||
<!-- 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`.
|
||||
Reference in New Issue
Block a user