# Delta 0.3.3-0-pre.4 ## Objet Étendre le pipeline Android SDL3 natif validé en `0-pre.3` à toutes les ABI encore supportées par la toolchain moderne, sans mélanger cette preuve avec l'AAB/16 KB. Matrice cible obligatoire : ```text arm64-v8a armeabi-v7a x86_64 x86 ``` Les ABI historiques `armeabi`, `mips` et `mips64` restent hors contrat car elles ont été retirées des toolchains Android modernes. ## Base et historique Base : `0.3.3-0-pre.3`, validée par l'utilisateur le 2026-09-21 avec Temurin 25.0.4.1, Gradle 9.7.1, audits/Cargo/Clippy propres, APK universal ARM64+x86_64 pour Snake et Reflex, puis smoke Snake réussi sur AVD x86_64 et Samsung ARM64 réel. `history/0.3.3/0-pre.3.md` consigne cette preuve avant les changements du présent delta. ## Changements - version workspace portée à `0.3.3-0-pre.4` ; - Snake et Reflex déclarent maintenant les quatre ABI dans `sasedevRustAndroidAbis` et `ndk.abiFilters` ; - l'audit de distribution exige cette matrice complète pour les deux consommateurs ; - documentation Android/build mise à jour pour distinguer couverture de packaging et disponibilité de smokes matériels ; - plan `0.3.3` redécoupé : `0-pre.4` est consacré aux quatre ABI, `0-pre.5` prendra l'AAB, 16 KB, minSdk et la fermeture du script Python historique ; - l'étude de cadrage conserve sa décision initiale mais ajoute explicitement la révision de scope décidée après `0-pre.3`. Aucune modification n'est nécessaire dans `Android/gradle/sasedev-rust-android.gradle` : cette logique possédait déjà le mapping des quatre ABI et génère une tâche par ABI configurée. ## Validation attendue Depuis la racine, sans imposer `JAVA_HOME` : ```bash java -version (cd Android && gradle --version) rustup target list --installed 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 Web deltas history python3 scripts/audit_distribution_layout.py cargo check --workspace cargo clippy --workspace --all-targets --all-features -- -D warnings (cd Android && gradle :game-snake-poc:assembleDebug) (cd Android && gradle :game-reflex-poc:assembleDebug) ``` Les targets Rust nécessaires sont : ```text aarch64-linux-android armv7-linux-androideabi x86_64-linux-android i686-linux-android ``` Pour chaque APK : ```bash for game in game-snake-poc game-reflex-poc; do APK="$(find "Android/${game}/build/outputs/apk/debug" \ -maxdepth 1 -type f -name '*.apk' -print -quit)" test -n "$APK" printf 'APK=%s\n' "$APK" unzip -Z1 "$APK" | grep '^lib/' | sort for abi in arm64-v8a armeabi-v7a x86_64 x86; do unzip -Z1 "$APK" | grep -Fx "lib/${abi}/libSDL3.so" unzip -Z1 "$APK" | grep -Fx "lib/${abi}/libgame_android_entrypoint.so" done done ``` La gate échoue si une des huit entrées natives par application manque. Aucun smoke 32 bits n'est revendiqué sans appareil/AVD 32 bits disponible. Les smokes déjà validés ARM64/x86_64 ne sont pas invalidés par l'ajout de la matrice 32 bits. ## Suite Si les deux builds et l'inspection des quatre ABI sont propres, ouvrir `0.3.3-0-pre.5` pour le chemin release/AAB, le contrôle 16 KB, la consolidation minSdk et la suppression de `scripts/build_android_rust.py` lorsque toutes ses responsabilités sont effectivement remplacées. Toute défaillance spécifique à cette tranche produit `0.3.3-0-pre.4.fix.N` avant `0-pre.5`.