# Delta 0.1.0-0-pre.7.fix.1 ## Base Base déclarée : `0.1.0-0-pre.7`, non validée intégralement. ## Validation du delta précédent L'utilisateur a exécuté les validations de `0.1.0-0-pre.7` le 2026-09-16. Résultats propres : - `cargo fmt --all` ; - `cargo fmt --all -- --check` ; - audit Rust/workspace ; - audit Markdown : `1 table(s), 51 file(s)` ; - `cargo check --workspace` ; - `cargo clippy --workspace --all-targets --all-features -- -D warnings` ; - `cargo test -p game-android-entrypoint --no-default-features` ; - `cargo-ndk 4.1.2` installé ; - target Rust `aarch64-linux-android` installé ; - builds Gradle Reflex et Snake propres. ## Échec du build natif Android Les deux commandes : ```bash python3 scripts/build_android_rust.py reflex python3 scripts/build_android_rust.py snake ``` ont échoué avant cross-compilation avec : ```text jni/arm64-v8a/libSDL3.so is missing from Android/libs/SDL3-3.4.16.aar ``` La cause est une hypothèse incorrecte du script. L'AAR SDL3 officiel expose ses bibliothèques natives via Prefab, sous une structure de type : ```text prefab/modules/SDL3/libs/android.arm64-v8a/libSDL3.so ``` et non obligatoirement sous `jni/arm64-v8a/`. ## Correctif Le script `build_android_rust.py` : - recherche d'abord la structure Prefab officielle ; - conserve un fallback `jni//libSDL3.so` ; - sait détecter une unique variante compatible sous `*/libs/android./libSDL3.so` ; - extrait `libSDL3.so` dans le répertoire de liaison temporaire ; - stage aussi `libSDL3.so` dans le `jniLibs//` de l'application ; - vérifie après `cargo ndk` que `libgame_android_entrypoint.so` existe réellement. Les `versionName` Android passent à `0.1.0-0-pre.7.fix.1`. ## ADB et NDK L'absence initiale de `adb` n'est pas considérée comme un défaut du projet. Préflight recommandé : ```bash "${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager" "ndk;28.2.13676358" "platform-tools" export PATH="${ANDROID_HOME}/platform-tools:${PATH}" adb version ``` Le NDK r28c correspond à `28.2.13676358`. ## Validation à exécuter par l'utilisateur Le fix modifie un script Python et des fichiers Gradle, mais aucun fichier Rust. ```bash 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 ``` Build natif : ```bash python3 scripts/build_android_rust.py reflex python3 scripts/build_android_rust.py snake ``` Vérifier : ```bash test -f Android/game-reflex-poc/src/main/jniLibs/arm64-v8a/libSDL3.so test -f Android/game-reflex-poc/src/main/jniLibs/arm64-v8a/libgame_android_entrypoint.so test -f Android/game-snake-poc/src/main/jniLibs/arm64-v8a/libSDL3.so test -f Android/game-snake-poc/src/main/jniLibs/arm64-v8a/libgame_android_entrypoint.so ``` Puis : ```bash cd Android gradle :game-reflex-poc:assembleDebug gradle :game-snake-poc:assembleDebug cd .. ``` Le smoke appareil est demandé seulement si `adb` et un appareil/émulateur sont disponibles : ```bash adb devices ``` puis installation/lancement des deux APK. ## Règle de transition Si les gates légères, les deux builds Rust Android et les deux APK sont propres, `0.1.0-0-pre.7.fix.1` peut être validé même sans appareil disponible. Si un appareil/émulateur est disponible, le premier smoke runtime Android doit également être exécuté avant de passer à `0.1.0-0-pre.8`. En cas d'échec imputable au projet, produire `0.1.0-0-pre.7.fix.2`.