Files
games/deltas/0.1.0/0-pre.7.md
2026-09-16 09:29:19 +02:00

3.3 KiB

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 :

cargo ndk --version
rustup target list --installed | grep aarch64-linux-android

Si nécessaire :

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 :

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 :

cargo test -p game-android-entrypoint --no-default-features

Build natif Android

Depuis la racine :

python3 scripts/build_android_rust.py reflex
python3 scripts/build_android_rust.py snake

Puis :

cd Android
gradle :game-reflex-poc:assembleDebug
gradle :game-snake-poc:assembleDebug
cd ..

Smoke appareil/émulateur

Avec une cible ADB disponible :

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 :

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.