138 lines
3.7 KiB
Markdown
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é.
|