0.3.3-0-pre.5
This commit is contained in:
126
deltas/0.3.3/0-pre.5.md
Normal file
126
deltas/0.3.3/0-pre.5.md
Normal file
@@ -0,0 +1,126 @@
|
||||
<!-- file: deltas/0.3.3/0-pre.5.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# 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 :
|
||||
|
||||
```bash
|
||||
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 :
|
||||
|
||||
```bash
|
||||
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 :
|
||||
|
||||
```bash
|
||||
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é :
|
||||
|
||||
```bash
|
||||
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 :
|
||||
|
||||
```bash
|
||||
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 :
|
||||
|
||||
```bash
|
||||
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`.
|
||||
Reference in New Issue
Block a user