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.gradleenregistre désormais ses sourcesjniLibspour toutes les variantes, pas seulement Debug ;- les variantes Release déclenchent
cargo ndk ... build --release, tandis que Debug conserve le profil Cargodev; bundleReleasede Snake et Reflex devient donc propriétaire de la reconstruction native quatre ABI ;minSdk 21etCARGO_NDK_PLATFORM=21deviennent des invariants audités pour les deux applications ;- le builder historique
scripts/build_android_rust.pyest supprimé via manifest ; - l'audit de distribution interdit désormais le retour de ce script et de
src/main/jniLibsgé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.