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
reflexetsnakeactivées par build applicatif ; - export contrôlé du symbole
SDL_main; engine-v1-sdlutiliseuse-pkg-configuniquement hors Android ;SaseGameActivitychargeSDL3puisgame_android_entrypoint;- script
scripts/build_android_rust.pypour extraire la bibliothèque SDL3 de l'AAR uniquement pour le linker Rust puis générerjniLibsviacargo-ndk; jniLibsgénérés exclus de Git ;versionNameAndroid 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.