0.3.3-2-beta.1
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
<!-- file: Android/README.md -->
|
||||
<!-- version: 13 -->
|
||||
<!-- version: 14 -->
|
||||
|
||||
# Android
|
||||
|
||||
@@ -105,9 +105,11 @@ Le builder historique `scripts/build_android_rust.py` est supprimé en `0-pre.5`
|
||||
|
||||
Le plancher Android reste `minSdk 21` / Android 5.0, qui correspond au minimum Android documenté par SDL3. Le niveau Rust transmis à `cargo ndk` reste également `21`.
|
||||
|
||||
La baseline utilise AGP `9.4.0` et NDK `r28c`. Les bibliothèques Rust produites par ce NDK doivent être alignées pour des pages de 16 KB ; SDL3 étant fourni sous forme précompilée, `libSDL3.so` doit être vérifiée dans l'artefact final au même titre que `libgame_android_entrypoint.so`. La gate `0-pre.5` contrôle les segments ELF avec `llvm-objdump`, puis l'alignement ZIP de l'APK avec `zipalign -P 16`.
|
||||
La baseline utilise AGP `9.4.0` et NDK `r28c`. Pour la contrainte Google Play 16 KB sur appareils 64 bits, les bibliothèques `arm64-v8a` et `x86_64` doivent être compatibles 16 KB ; SDL3 étant fourni sous forme précompilée, `libSDL3.so` est vérifiée au même titre que `libgame_android_entrypoint.so`. La gate `0-pre.5` a confirmé des segments ELF `LOAD` alignés au moins à `2**14` pour ces deux ABI, puis un `zipalign -P 16` réussi sur les APK.
|
||||
|
||||
L'AAB doit contenir les deux bibliothèques pour les quatre ABI sous `base/lib/<abi>/`. Si `bundletool` est disponible dans l'environnement de validation, `bundletool dump config --bundle=<aab>` doit également annoncer `PAGE_ALIGNMENT_16K`.
|
||||
Les ABI 32 bits `armeabi-v7a` et `x86` restent supportées pour compatibilité matérielle ancienne ; leurs segments observés à `2**12` ne contredisent pas l'exigence Play 16 KB, qui s'applique aux appareils 64 bits. L'AAB doit néanmoins contenir les deux bibliothèques pour les quatre ABI sous `base/lib/<abi>/`. Si `bundletool` est disponible dans l'environnement de validation, `bundletool dump config --bundle=<aab>` peut compléter le contrôle du bundle.
|
||||
|
||||
La preuve runtime `0-pre.5` couvre également Android 5.0/API 21 sur x86 et Android 15/API 35 x86_64 avec `getconf PAGE_SIZE=16384` sur une image `ps16k`.
|
||||
|
||||
## Bridge JNI et tactile
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ members = [
|
||||
]
|
||||
|
||||
[workspace.package]
|
||||
version = "0.3.3-0-pre.5"
|
||||
version = "0.3.3-2-beta.1"
|
||||
edition = "2024"
|
||||
license = "MIT"
|
||||
repository = "https://git.sasedev.com/Sasedev/games"
|
||||
|
||||
139
deltas/0.3.3/2-beta.1.md
Normal file
139
deltas/0.3.3/2-beta.1.md
Normal file
@@ -0,0 +1,139 @@
|
||||
<!-- file: deltas/0.3.3/2-beta.1.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Delta 0.3.3-2-beta.1
|
||||
|
||||
## Objectif
|
||||
|
||||
Entrer en beta avec le pipeline Android SDL3 natif feature-complete : quatre ABI, APK universal, AAB Release, API 21 prouvée, compatibilité 16 KB 64 bits prouvée et aucun orchestrateur Python de build.
|
||||
|
||||
Cette tranche n'ajoute aucune fonctionnalité. Elle synchronise la version technique, consolide les preuves `0-pre.5` et exécute la validation large prévue avant RC.
|
||||
|
||||
## Baseline acceptée
|
||||
|
||||
`0.3.3-0-pre.5` est validée par l'utilisateur le 2026-09-21.
|
||||
|
||||
La baseline acceptée comprend :
|
||||
|
||||
- audits Rust/Markdown propres ;
|
||||
- audit de distribution propre après suppression de deux anciens `src/main/jniLibs` locaux ;
|
||||
- `cargo check --workspace` et Clippy workspace strict propres ;
|
||||
- `bundleRelease` réussi pour Snake et Reflex ;
|
||||
- AAB quatre ABI pour les deux jeux ;
|
||||
- `zipalign -P 16` réussi sur les APK Debug ;
|
||||
- ELF `arm64-v8a` et `x86_64` alignés `2**14` pour SDL3 et la bibliothèque Rust ;
|
||||
- smoke Snake réussi sur Android 5.0/API 21 x86 ;
|
||||
- smoke Snake réussi sur Android 15/API 35 x86_64 `ps16k` avec `getconf PAGE_SIZE=16384` ;
|
||||
- suppression du builder `scripts/build_android_rust.py`.
|
||||
|
||||
`history/0.3.3/0-pre.5.md` consigne le détail.
|
||||
|
||||
## Changements
|
||||
|
||||
- passage de `workspace.package.version` à `0.3.3-2-beta.1` ;
|
||||
- ajout de l'historique validé `0-pre.5` ;
|
||||
- correction documentaire du périmètre 16 KB : exigence Play portée sur les appareils 64 bits, sans imposer artificiellement `2**14` aux ABI 32 bits ;
|
||||
- consolidation du plan actif avec les preuves API 21 et `ps16k` réellement obtenues ;
|
||||
- aucune modification de gameplay, moteur, JNI, Java, logique Gradle, ABI, API Android, dépendance ou asset.
|
||||
|
||||
`CHANGELOG.md` et `ROADMAP.md` restent inchangés : la synthèse publiée est réservée à la RC/stable et le scope macro `0.3.3` n'est pas encore clos.
|
||||
|
||||
## Validation beta — statique et workspace
|
||||
|
||||
Depuis la racine :
|
||||
|
||||
```bash
|
||||
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
|
||||
cargo test --workspace --all-targets --all-features
|
||||
```
|
||||
|
||||
La suite workspace complète est volontairement exécutée ici : `2-beta.1` constitue la gate large planifiée de la version.
|
||||
|
||||
## Rebuild Android beta
|
||||
|
||||
Nettoyer les outputs Gradle des applications, puis reconstruire les deux formes d'artefact :
|
||||
|
||||
```bash
|
||||
(cd Android && gradle :game-snake-poc:clean :game-reflex-poc:clean)
|
||||
|
||||
(cd Android && gradle :game-snake-poc:assembleDebug)
|
||||
(cd Android && gradle :game-reflex-poc:assembleDebug)
|
||||
|
||||
(cd Android && gradle :game-snake-poc:bundleRelease)
|
||||
(cd Android && gradle :game-reflex-poc:bundleRelease)
|
||||
```
|
||||
|
||||
Pour chaque APK Debug et AAB Release, vérifier les quatre ABI :
|
||||
|
||||
```bash
|
||||
for game in game-snake-poc game-reflex-poc; do
|
||||
APK="Android/${game}/build/outputs/apk/debug/${game}-debug.apk"
|
||||
AAB="Android/${game}/build/outputs/bundle/release/${game}-release.aab"
|
||||
|
||||
test -f "$APK"
|
||||
test -f "$AAB"
|
||||
|
||||
for abi in arm64-v8a armeabi-v7a x86_64 x86; do
|
||||
unzip -Z1 "$APK" | grep -Fx "lib/${abi}/libSDL3.so"
|
||||
unzip -Z1 "$APK" | grep -Fx "lib/${abi}/libgame_android_entrypoint.so"
|
||||
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 le packaging 16 KB :
|
||||
|
||||
```bash
|
||||
ZIPALIGN="$(find "$ANDROID_HOME/build-tools" -mindepth 2 -maxdepth 2 -type f -name zipalign -print | sort -V | tail -n 1)"
|
||||
test -x "$ZIPALIGN"
|
||||
|
||||
"$ZIPALIGN" -c -P 16 -v 4 Android/game-snake-poc/build/outputs/apk/debug/game-snake-poc-debug.apk
|
||||
"$ZIPALIGN" -c -P 16 -v 4 Android/game-reflex-poc/build/outputs/apk/debug/game-reflex-poc-debug.apk
|
||||
```
|
||||
|
||||
Les preuves ELF 64 bits et les smokes de frontière API 21/16 KB viennent d'être établis en `0-pre.5`; ils ne sont pas rejoués mécaniquement dans cette beta tant qu'aucune logique native/Gradle n'a changé.
|
||||
|
||||
## Smokes beta de référence
|
||||
|
||||
Revalider **Snake et Reflex** sur :
|
||||
|
||||
1. l'AVD x86_64/API 36 de référence ;
|
||||
2. l'appareil ARM64 réel de référence.
|
||||
|
||||
Pour chaque jeu et chaque device :
|
||||
|
||||
```bash
|
||||
adb -s <serial> install -r <apk>
|
||||
adb -s <serial> shell am start -n <package>/<activity>
|
||||
```
|
||||
|
||||
Vérifier au minimum :
|
||||
|
||||
- démarrage ;
|
||||
- rendu SDL3 ;
|
||||
- contrôles/tactile ;
|
||||
- assets ;
|
||||
- absence de crash/panic immédiat ;
|
||||
- Back système et sortie propre.
|
||||
|
||||
Les packages/activities actuels sont :
|
||||
|
||||
```text
|
||||
Snake : com.sasedev.games.snake/.SnakeActivity
|
||||
Reflex : com.sasedev.games.reflex/.ReflexActivity
|
||||
```
|
||||
|
||||
## Transition
|
||||
|
||||
Si la gate workspace, les rebuilds quatre ABI, le packaging et les quatre smokes de référence sont propres, ne pas créer de beta supplémentaire : ouvrir directement `0.3.3-3-rc.1`.
|
||||
|
||||
Toute régression imputable au projet produit d'abord `0.3.3-2-beta.1.fix.N`.
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/development/006-ANDROID_RUST_NATIVE_BUILD.md -->
|
||||
<!-- version: 6 -->
|
||||
<!-- version: 7 -->
|
||||
|
||||
# Build Rust Android natif
|
||||
|
||||
@@ -99,14 +99,18 @@ Le builder historique `scripts/build_android_rust.py` est retiré : il n'existe
|
||||
|
||||
### Pages mémoire 16 KB
|
||||
|
||||
La validation porte sur les deux dimensions requises :
|
||||
La validation porte sur les deux dimensions requises pour les appareils 64 bits concernés par la contrainte Google Play 16 KB :
|
||||
|
||||
1. segments ELF de chaque `.so` avec un alignement `LOAD` au moins `2**14`, contrôlés par `llvm-objdump -p` depuis le NDK configuré ;
|
||||
1. segments ELF des `.so` `arm64-v8a` et `x86_64` avec un alignement `LOAD` au moins `2**14`, contrôlés par `llvm-objdump -p` depuis le NDK configuré ;
|
||||
2. alignement ZIP de l'APK avec `zipalign -c -P 16 -v 4`.
|
||||
|
||||
AGP `9.4.0` est supérieur au plancher `8.5.1` documenté pour le packaging 16 KB et NDK `r28c` produit les nouvelles bibliothèques avec alignement 16 KB par défaut. Cette propriété ne dispense pas de contrôler `libSDL3.so`, qui est précompilée dans l'AAR.
|
||||
AGP `9.4.0` est supérieur au plancher `8.5.1` documenté pour le packaging 16 KB et NDK `r28c` produit les nouvelles bibliothèques 64 bits avec alignement 16 KB par défaut. Cette propriété ne dispense pas de contrôler `libSDL3.so`, qui est précompilée dans l'AAR.
|
||||
|
||||
Pour l'AAB, les huit bibliothèques doivent être présentes sous `base/lib/<abi>/`. Lorsque `bundletool` est disponible, `bundletool dump config --bundle=<aab>` doit indiquer `PAGE_ALIGNMENT_16K`.
|
||||
Les ABI 32 bits `armeabi-v7a` et `x86` restent dans le package pour compatibilité ancienne et peuvent conserver des segments ELF `2**12` ; cela ne constitue pas un échec de l'exigence Play 16 KB, explicitement portée sur les appareils 64 bits.
|
||||
|
||||
Pour l'AAB, les huit bibliothèques doivent être présentes sous `base/lib/<abi>/`. Lorsque `bundletool` est disponible, `bundletool dump config --bundle=<aab>` peut compléter la vérification du mode d'alignement du bundle.
|
||||
|
||||
La preuve runtime utilise une image Android 15/API 35 x86_64 `ps16k` et retient `adb shell getconf PAGE_SIZE` comme contrôle de la taille de page du device. `16384` est le résultat attendu ; une valeur `KernelPageSize` lue dans un VMA particulier de `/proc/<pid>/smaps` n'est pas utilisée comme substitut à ce contrôle.
|
||||
|
||||
### Plancher Android
|
||||
|
||||
@@ -115,7 +119,7 @@ Le contrat est consolidé à Android 5.0 / API 21 :
|
||||
- `minSdk 21` dans chaque application ;
|
||||
- `sasedevRustAndroidApi = 21` pour `cargo ndk` ;
|
||||
- SDL3 documente API 21 comme minimum Android ;
|
||||
- un smoke API 21 est souhaité lorsqu'une image 32/64 bits exploitable est disponible, mais l'absence locale d'une telle image est consignée comme lacune de runtime et ne modifie pas artificiellement le contrat.
|
||||
- la gate `0-pre.5` a validé un smoke réel sur Android 5.0/API 21 x86 : installation de l'APK universal et démarrage de `SnakeActivity` réussis.
|
||||
|
||||
## Smoke appareil
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/plans/003-V0_3_3_ANDROID_NATIVE_MULTI_ABI_PLAN.md -->
|
||||
<!-- version: 4 -->
|
||||
<!-- version: 5 -->
|
||||
|
||||
# Plan 0.3.3 — Android SDL3 natif multi-ABI et packaging Gradle
|
||||
|
||||
@@ -170,7 +170,9 @@ Mettre à jour les documents Android/JNI/build durables pour décrire le chemin
|
||||
|
||||
### `2-beta.1` — validation large et packaging final
|
||||
|
||||
Exécuter la gate Rust/workspace large planifiée et les tâches Android finales pour Snake et Reflex réellement inclus. Reconstruire l'APK universal et l'AAB depuis un état nettoyé raisonnablement, puis revalider AVD x86_64, appareil ARM64, ABI packagées, 16 KB et compatibilité basse disponible.
|
||||
`0-pre.5` a fermé le scope d'implémentation : AAB quatre ABI, Release Cargo pilotée par Gradle, suppression du builder Python, audit propre après suppression des anciens `src/main/jniLibs`, alignement 16 KB validé sur les ABI 64 bits, smoke API 21/x86 et smoke API 35/x86_64 `ps16k`.
|
||||
|
||||
La beta n'ajoute donc aucune capacité. Elle synchronise la version technique, consigne la preuve `0-pre.5`, exécute la gate Rust/workspace large planifiée, reconstruit les APK universal et AAB Snake/Reflex, puis revalide les smokes de référence x86_64 et ARM64. Les preuves de frontière API 21 et 16 KB restent dans l'historique `0-pre.5` et ne sont rejouées que si une modification ultérieure affecte le runtime/package natif.
|
||||
|
||||
Corriger uniquement par `2-beta.1.fix.N` si nécessaire ; ne pas ouvrir une beta cérémonielle supplémentaire si la matrice est propre.
|
||||
|
||||
@@ -216,8 +218,8 @@ La politique a été révisée après validation de `0-pre.2` : le projet Androi
|
||||
- un build Gradle Android natif n'exige plus `scripts/build_android_rust.py` ;
|
||||
- Snake et Reflex produisent un APK universal contenant `arm64-v8a`, `armeabi-v7a`, `x86_64` et `x86` par un seul chemin Gradle ;
|
||||
- l'AAB de distribution est constructible sans secret embarqué ;
|
||||
- les bibliothèques natives finales sont vérifiées pour la contrainte 16 KB ;
|
||||
- le minSdk soutenu et la preuve de smoke disponible sont documentés sans surpromesse ;
|
||||
- les bibliothèques natives 64 bits finales sont vérifiées pour la contrainte 16 KB et un smoke `ps16k` retourne `PAGE_SIZE=16384` ;
|
||||
- `minSdk 21` est validé par un smoke réel Android 5.0/API 21 x86 ;
|
||||
- l'appareil ARM64 réel et l'AVD x86_64 passent le smoke prévu ;
|
||||
- Reflex est soit branché naturellement au pipeline commun, soit explicitement borné selon les résultats de factorisation ;
|
||||
- le script Python historique Android est supprimé et l'audit interdit son retour ;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/studies/025-V0_3_3_ANDROID_NATIVE_MULTI_ABI_AUDIT.md -->
|
||||
<!-- version: 3 -->
|
||||
<!-- version: 4 -->
|
||||
|
||||
# Audit Android SDL3 natif multi-ABI pour 0.3.3
|
||||
|
||||
@@ -268,6 +268,10 @@ Le scope tient dans `0.3.3` si chaque tranche reste centrée sur un résultat ve
|
||||
|
||||
La gate `0-pre.4` du 2026-09-21 a confirmé que les quatre targets Rust Android sont installées et que Snake comme Reflex compilent avec succès `arm64-v8a`, `armeabi-v7a`, `x86_64` et `x86`. Les deux APK Debug universal contiennent les huit bibliothèques attendues.
|
||||
|
||||
La fermeture `0-pre.5` peut donc retirer le builder Python historique sans perdre de responsabilité fonctionnelle. La validation 16 KB suit la méthode Android actuelle : AGP 8.5.1+ pour le packaging, NDK r28+ pour l'alignement ELF par défaut, contrôle direct de tous les `.so` avec `llvm-objdump`, contrôle APK avec `zipalign -P 16`, et contrôle `PAGE_ALIGNMENT_16K` du bundle lorsque `bundletool` est disponible. SDL3 restant un prébuild, son alignement doit être contrôlé explicitement.
|
||||
La fermeture `0-pre.5` a retiré le builder Python historique sans perdre de responsabilité fonctionnelle. Les deux `bundleRelease` ont réussi et les AAB Snake/Reflex contiennent les deux bibliothèques natives pour `arm64-v8a`, `armeabi-v7a`, `x86_64` et `x86`.
|
||||
|
||||
Le plancher `minSdk 21` est consolidé parce qu'il correspond au minimum Android documenté par SDL3 ; un smoke sur API 21 reste une preuve runtime additionnelle lorsque l'image est raisonnablement disponible, pas une condition permettant de prétendre à un niveau inférieur.
|
||||
La validation 16 KB a affiné le critère initial : l'exigence Google Play vise les appareils 64 bits. Les couples SDL3/Rust `arm64-v8a` et `x86_64`, en Debug comme en Release, ont des segments ELF `LOAD` alignés à `2**14`, et `zipalign -P 16` réussit sur les APK. Les variantes 32 bits `armeabi-v7a` et `x86` restent à `2**12`, ce qui est compatible avec leur rôle d'ABI historiques 32 bits et ne constitue pas un échec de la gate 16 KB 64 bits.
|
||||
|
||||
Un AVD Android 15/API 35 x86_64 basé sur l'image `google_apis_playstore_ps16k` a retourné `16384` via `getconf PAGE_SIZE`; l'APK Snake s'y installe, `SnakeActivity` démarre et le processus reste vivant. Une lecture ponctuelle `KernelPageSize: 4 kB` dans `/proc/self/smaps` n'est pas retenue comme mesure du mode de page global : la gate Android utilise `getconf PAGE_SIZE`.
|
||||
|
||||
Le plancher `minSdk 21` est désormais prouvé en runtime : un AVD Android 5.0/API 21 x86 a accepté l'APK universal et lancé `SnakeActivity`. La matrice dispose donc à la fois d'une preuve ancienne x86 32 bits et d'une preuve récente x86_64 16 KB.
|
||||
|
||||
137
history/0.3.3/0-pre.5.md
Normal file
137
history/0.3.3/0-pre.5.md
Normal file
@@ -0,0 +1,137 @@
|
||||
<!-- 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é.
|
||||
Reference in New Issue
Block a user