Files
games/history/0.3.3/0-pre.5.md
2026-09-21 14:10:30 +02:00

138 lines
3.7 KiB
Markdown

<!-- file: history/0.3.3/0-pre.5.md -->
<!-- version: 1 -->
# Historique 0.3.3-0-pre.5
## Statut
`0.3.3-0-pre.5` a été validé par l'utilisateur le 2026-09-21. La tranche ferme le chemin Android natif historique : Gradle possède les variantes Debug/Release, les AAB quatre ABI sont produits, `minSdk 21` dispose d'une preuve runtime, la compatibilité 16 KB 64 bits est vérifiée et `scripts/build_android_rust.py` est supprimé.
Aucun `0-pre.5.fix.N` n'est requis. La suite ouvre `0.3.3-2-beta.1`.
## Toolchain réellement validée
```text
OpenJDK / Temurin 25.0.4.1 LTS
Gradle 9.7.1
AGP 9.4.0
NDK 28.2.13676358 / r28c
```
Le pipeline utilise le JDK et le Gradle de l'environnement ; aucun `JAVA_HOME` JDK 17 ni wrapper Gradle natif n'est requis.
## Gates statiques et Rust
La première exécution de l'audit de distribution a détecté deux anciens répertoires générés laissés localement par le chemin historique :
```text
Android/game-reflex-poc/src/main/jniLibs
Android/game-snake-poc/src/main/jniLibs
```
Ils ont été supprimés puis l'audit a été rejoué avec succès :
```text
Distribution layout audit: clean (49 required path(s), 8 forbidden path(s) absent)
```
Les autres gates fournies sont propres :
```text
General Rust rule audit: clean
Rust export completeness audit: 0 candidate(s)
games.sasedev workspace audit: clean
Markdown table audit: clean (5 table(s), 241 file(s))
cargo fmt --all: clean
cargo fmt --all -- --check: clean
cargo check --workspace: clean
cargo clippy --workspace --all-targets --all-features -- -D warnings: clean
```
L'échec initial de layout provenait donc de résidus locaux non versionnés, pas d'un retour du builder Python dans le delta.
## Release et AAB quatre ABI
Les commandes suivantes terminent avec `BUILD SUCCESSFUL` :
```text
:game-snake-poc:bundleRelease
:game-reflex-poc:bundleRelease
```
Pour les deux jeux, Gradle exécute les builds Rust Release pour :
```text
arm64-v8a
armeabi-v7a
x86_64
x86
```
Les deux AAB contiennent exactement les couples attendus sous `base/lib/<abi>/` :
```text
libSDL3.so
libgame_android_entrypoint.so
```
pour chacune des quatre ABI.
## Packaging et pages 16 KB
`zipalign -c -P 16 -v 4` réussit sur les APK Debug Snake et Reflex.
Les contrôles ELF Debug et Release montrent :
```text
arm64-v8a -> LOAD align 2**14
x86_64 -> LOAD align 2**14
armeabi-v7a -> LOAD align 2**12
x86 -> LOAD align 2**12
```
pour SDL3 et `libgame_android_entrypoint.so`.
Le critère 16 KB est appliqué aux ABI/appareils 64 bits, conformément à l'exigence Google Play. Les alignements `2**12` des ABI 32 bits ne constituent donc pas un échec.
## Preuve Android 5.0 / API 21
Un AVD basé sur :
```text
system-images/android-21/google_apis/x86/
```
retourne :
```text
API 21
ABI x86
KernelPageSize 4 kB
```
L'APK Snake universal est installé avec succès et `SnakeActivity` démarre. `minSdk 21` dispose donc d'une preuve runtime réelle sur x86 32 bits.
## Preuve Android 15 / 16 KB
Un AVD basé sur :
```text
system-images/android-35/google_apis_playstore_ps16k/x86_64/
```
retourne :
```text
API 35
ABI x86_64
getconf PAGE_SIZE = 16384
```
L'APK Snake s'installe, `SnakeActivity` démarre et `pidof com.sasedev.games.snake` retourne un PID actif.
Une lecture séparée de `/proc/self/smaps` retourne `KernelPageSize: 4 kB` pour le mapping inspecté. Cette valeur n'est pas utilisée comme mesure du mode global du device ; la preuve de taille de page de l'environnement repose sur `getconf PAGE_SIZE=16384`.
## Conséquence
Le scope d'implémentation `0-pre.*` est fermé. La beta peut se concentrer sur la validation large, la reproductibilité du packaging quatre ABI et les smokes de référence sans introduire de nouvelle fonctionnalité.