Files
games/deltas/0.3.3/0-pre.5.md
2026-09-21 11:17:38 +02:00

5.5 KiB

Delta 0.3.3-0-pre.5

Objet

Fermer le chemin Android natif historique après validation des quatre ABI : étendre l'ownership Gradle aux variantes Release/AAB, consolider minSdk 21, préparer la vérification 16 KB et supprimer scripts/build_android_rust.py.

Base

Base : 0.3.3-0-pre.4, validée par l'utilisateur le 2026-09-21 avec Temurin 25.0.4.1, Gradle 9.7.1, audits/Cargo/Clippy propres et builds Debug Snake/Reflex réussis sur arm64-v8a, armeabi-v7a, x86_64 et x86.

history/0.3.3/0-pre.4.md consigne cette preuve.

Changements

  • version workspace portée à 0.3.3-0-pre.5 ;
  • Android/gradle/sasedev-rust-android.gradle enregistre désormais ses sources jniLibs pour toutes les variantes, pas seulement Debug ;
  • les variantes Release déclenchent cargo ndk ... build --release, tandis que Debug conserve le profil Cargo dev ;
  • bundleRelease de Snake et Reflex devient donc propriétaire de la reconstruction native quatre ABI ;
  • minSdk 21 et CARGO_NDK_PLATFORM=21 deviennent des invariants audités pour les deux applications ;
  • le builder historique scripts/build_android_rust.py est supprimé via manifest ;
  • l'audit de distribution interdit désormais le retour de ce script et de src/main/jniLibs générés ;
  • les anciennes commandes RC dépendant du builder Python sont remplacées par les tâches Gradle natives ;
  • documentation Android/build/plan/étude actualisée pour AAB, API 21 et contrôle 16 KB.

Aucun secret de signature ni keystore n'est ajouté.

Référence 16 KB

Le contrôle suit le chemin recommandé par Android : AGP >= 8.5.1, NDK r28+, vérification ELF par llvm-objdump, puis zipalign -P 16 sur l'APK. La SDL3 de l'AAR est précompilée et doit donc être contrôlée explicitement avec la bibliothèque Rust.

Validation attendue

Depuis la racine :

java -version
(cd Android && gradle --version)

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:bundleRelease)
(cd Android && gradle :game-reflex-poc:bundleRelease)

Les AAB attendus sont sous Android/<game>/build/outputs/bundle/release/. Pour chaque bundle :

for game in game-snake-poc game-reflex-poc; do
    AAB="$(find "Android/${game}/build/outputs/bundle/release" \
        -maxdepth 1 -type f -name '*.aab' -print -quit)"
    test -n "$AAB"
    printf 'AAB=%s\n' "$AAB"
    unzip -Z1 "$AAB" | grep '^base/lib/' | sort
    for abi in arm64-v8a armeabi-v7a x86_64 x86; do
        unzip -Z1 "$AAB" | grep -Fx "base/lib/${abi}/libSDL3.so"
        unzip -Z1 "$AAB" | grep -Fx "base/lib/${abi}/libgame_android_entrypoint.so"
    done
done

Revalider ensuite l'APK Debug et son alignement ZIP 16 KB avec le zipalign des Build Tools installés :

ZIPALIGN="$(find "$ANDROID_HOME/build-tools" -mindepth 2 -maxdepth 2 -type f -name zipalign -print | sort -V | tail -n 1)"
test -x "$ZIPALIGN"

for game in game-snake-poc game-reflex-poc; do
    (cd Android && gradle ":${game}:assembleDebug")
    APK="$(find "Android/${game}/build/outputs/apk/debug" -maxdepth 1 -type f -name '*.apk' -print -quit)"
    "$ZIPALIGN" -c -P 16 -v 4 "$APK"
done

Contrôler les segments ELF des bibliothèques générées et de SDL3. Sur Linux avec le NDK configuré :

OBJDUMP="$ANDROID_HOME/ndk/28.2.13676358/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-objdump"
test -x "$OBJDUMP"

for game in game-snake-poc game-reflex-poc; do
    for variant in debug release; do
        for abi in arm64-v8a armeabi-v7a x86_64 x86; do
            for so in \
                "Android/${game}/build/generated/sasedevNative/${variant}/${abi}/jniLibs/${abi}/libSDL3.so" \
                "Android/${game}/build/generated/sasedevNative/${variant}/${abi}/jniLibs/${abi}/libgame_android_entrypoint.so"; do
                test -f "$so"
                printf '%s\n' "$so"
                "$OBJDUMP" -p "$so" | grep 'LOAD'
            done
        done
    done
done

Aucun LOAD ne doit annoncer un alignement inférieur à 2**14.

Si bundletool est installé dans l'environnement :

bundletool dump config --bundle="Android/game-snake-poc/build/outputs/bundle/release/game-snake-poc-release.aab" | grep alignment
bundletool dump config --bundle="Android/game-reflex-poc/build/outputs/bundle/release/game-reflex-poc-release.aab" | grep alignment

La valeur attendue est PAGE_ALIGNMENT_16K. Son absence locale parce que bundletool n'est pas installé doit être consignée ; elle ne doit pas être remplacée par une affirmation fictive.

Pour le plancher Android, relever les images disponibles :

emulator -list-avds
sdkmanager --list_installed | grep 'system-images;android-' || true

Si une image API 21 exploitable est déjà disponible ou raisonnablement installable, effectuer un smoke Snake. Sinon, consigner explicitement cette lacune ; le contrat reste API 21 car SDL3 lui-même documente ce niveau comme minimum et le build Rust/manifest l'imposent déjà.

Suite

Si les AAB quatre ABI et les contrôles 16 KB sont propres, la prochaine tranche est 0.3.3-2-beta.1 conformément au plan révisé. Une défaillance du chemin Release/AAB, de l'alignement ou de la fermeture Python produit d'abord 0.3.3-0-pre.5.fix.N.