0.3.3-0-pre.5
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/development/006-ANDROID_RUST_NATIVE_BUILD.md -->
|
||||
<!-- version: 5 -->
|
||||
<!-- version: 6 -->
|
||||
|
||||
# Build Rust Android natif
|
||||
|
||||
@@ -54,35 +54,32 @@ Le projet Android natif n'impose pas `JAVA_HOME`. Le JDK courant du shell/IDE ex
|
||||
|
||||
`cargo-ndk` détecte le NDK désigné pour le sous-processus via `ANDROID_NDK_HOME`. La tâche Gradle résout cette valeur à partir de `ANDROID_HOME` ou `ANDROID_SDK_ROOT` et de `androidNdkVersion`; aucun `ANDROID_NDK_HOME` global n'est requis.
|
||||
|
||||
## État 0.3.3-0-pre.4
|
||||
## État 0.3.3-0-pre.5
|
||||
|
||||
La preuve mono-ABI de `0-pre.2` a validé que `assembleDebug` déclenche correctement le build Rust/SDL3 ARM64 sans orchestrateur Python préalable.
|
||||
`0-pre.4` a validé les quatre ABI sur Snake et Reflex : `arm64-v8a`, `armeabi-v7a`, `x86_64` et `x86`. Le même mécanisme Gradle est désormais enregistré pour toutes les variantes Android, et pas seulement Debug.
|
||||
|
||||
`0-pre.3` a validé le graphe sur les deux ABI 64 bits. `0-pre.4` élargit le même mécanisme à la matrice Android complète encore supportée :
|
||||
|
||||
```text
|
||||
arm64-v8a
|
||||
armeabi-v7a
|
||||
x86_64
|
||||
x86
|
||||
```
|
||||
|
||||
pour Snake et Reflex :
|
||||
Pour Debug :
|
||||
|
||||
```text
|
||||
:<game>:assembleDebug
|
||||
-> buildDebugSasedevRustArm64V8a
|
||||
-> buildDebugSasedevRustArmeabiV7a
|
||||
-> buildDebugSasedevRustX8664
|
||||
-> buildDebugSasedevRustX86
|
||||
-> quatre sources jniLibs générées
|
||||
-> buildDebugSasedevRust<Abi>
|
||||
-> cargo ndk build
|
||||
-> APK Debug universal
|
||||
```
|
||||
|
||||
Chaque arbre ABI contient :
|
||||
Pour Release/AAB :
|
||||
|
||||
```text
|
||||
build/generated/sasedevNative/debug/<abi>/jniLibs/<abi>/
|
||||
:<game>:bundleRelease
|
||||
-> buildReleaseSasedevRust<Abi>
|
||||
-> cargo ndk build --release
|
||||
-> AAB Release multi-ABI
|
||||
```
|
||||
|
||||
Chaque arbre généré contient :
|
||||
|
||||
```text
|
||||
build/generated/sasedevNative/<variant>/<abi>/jniLibs/<abi>/
|
||||
├── libSDL3.so
|
||||
└── libgame_android_entrypoint.so
|
||||
```
|
||||
@@ -94,17 +91,37 @@ java -version
|
||||
(cd Android && gradle --version)
|
||||
(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)
|
||||
```
|
||||
|
||||
Il ne faut pas appeler `scripts/build_android_rust.py` avant ces tâches. Le script Python historique reste temporairement versionné jusqu'à la fermeture complète du chemin natif en `0-pre.5`, après preuve du chemin release/AAB.
|
||||
Le builder historique `scripts/build_android_rust.py` est retiré : il n'existe plus de chemin natif Android qui stage des bibliothèques dans `src/main/jniLibs`. Les sorties natives sont exclusivement générées sous `build/`.
|
||||
|
||||
Les outputs natifs restent sous `Android/<module>/build/` et ne sont jamais versionnés.
|
||||
### Pages mémoire 16 KB
|
||||
|
||||
La validation porte sur les deux dimensions requises :
|
||||
|
||||
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é ;
|
||||
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.
|
||||
|
||||
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`.
|
||||
|
||||
### Plancher Android
|
||||
|
||||
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.
|
||||
|
||||
## Smoke appareil
|
||||
|
||||
L'APK universal doit être inspecté mécaniquement avant installation. Il doit contenir les deux bibliothèques natives pour chacune des quatre ABI : `arm64-v8a`, `armeabi-v7a`, `x86_64` et `x86`.
|
||||
|
||||
Le smoke réel reste effectué sur les architectures matériellement disponibles : AVD x86_64 et appareil ARM64. Les ABI 32 bits sont néanmoins exigées au build et dans l'APK ; leur exécution réelle dépend de la disponibilité d'un appareil/AVD 32 bits. Ces smokes ne changent pas le `minSdk`, qui reste un axe séparé et sera consolidé avec l'AAB/compatibilité dans `0-pre.5`.
|
||||
Le smoke réel reste effectué sur les architectures matériellement disponibles : AVD x86_64 et appareil ARM64. Les ABI 32 bits sont néanmoins exigées au build et dans l'APK ; leur exécution réelle dépend de la disponibilité d'un appareil/AVD 32 bits. Le `minSdk 21` est consolidé en `0-pre.5`; les smokes disponibles servent de preuve runtime complémentaire et ne redéfinissent pas ce plancher.
|
||||
|
||||
## Exception FFI Rust
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/plans/003-V0_3_3_ANDROID_NATIVE_MULTI_ABI_PLAN.md -->
|
||||
<!-- version: 3 -->
|
||||
<!-- version: 4 -->
|
||||
|
||||
# Plan 0.3.3 — Android SDL3 natif multi-ABI et packaging Gradle
|
||||
|
||||
@@ -74,7 +74,7 @@ La logique durable doit rester répartie ainsi :
|
||||
- `Android/gradle/` : logique de build Android commune, y compris orchestration Rust native et staging des sorties générées ;
|
||||
- `assets/` : sources d'assets canoniques ;
|
||||
- `Android/<app>/build/generated/` : outputs jetables de packaging ;
|
||||
- `scripts/build_android_rust.py` : mécanisme historique à retirer du chemin normal dès que la responsabilité Gradle est prouvée, puis fichier à supprimer seulement lorsque toutes ses responsabilités sont remplacées.
|
||||
- le builder historique `scripts/build_android_rust.py` est supprimé en `0-pre.5` après migration de toutes ses responsabilités vers Gradle ; aucun équivalent Python ne doit être recréé.
|
||||
|
||||
Aucune `.so` générée ne doit être écrite durablement dans `src/main/jniLibs/` par le nouveau chemin.
|
||||
|
||||
@@ -164,9 +164,9 @@ Les smokes matériels restent ciblés sur les environnements disponibles ; l'abs
|
||||
|
||||
### `0-pre.5` — AAB, minSdk et fermeture du chemin historique
|
||||
|
||||
Ajouter/valider le chemin `bundleRelease` sans secret, inspecter le bundle et la compatibilité 16 KB, exécuter la stratégie de smoke du plancher Android et supprimer `scripts/build_android_rust.py` si toutes ses responsabilités ont effectivement migré.
|
||||
Étendre l'ownership Gradle aux variantes Release : `bundleRelease` doit reconstruire les quatre ABI en profil Cargo release sans secret embarqué. Inspecter les AAB, les segments ELF et l'alignement APK 16 KB ; consolider `minSdk 21` ; supprimer `scripts/build_android_rust.py` et interdire le retour des `src/main/jniLibs` générés.
|
||||
|
||||
Mettre à jour les documents Android/JNI/build durables pour décrire le nouveau chemin réel et ajuster l'audit de distribution si le script historique n'est plus un path requis.
|
||||
Mettre à jour les documents Android/JNI/build durables pour décrire le chemin réel et remplacer les anciennes commandes de validation encore dépendantes du builder Python.
|
||||
|
||||
### `2-beta.1` — validation large et packaging final
|
||||
|
||||
@@ -220,6 +220,6 @@ La politique a été révisée après validation de `0-pre.2` : le projet Androi
|
||||
- le minSdk soutenu et la preuve de smoke disponible sont documentés sans surpromesse ;
|
||||
- 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 est supprimé s'il n'a plus aucune responsabilité durable ;
|
||||
- le script Python historique Android est supprimé et l'audit interdit son retour ;
|
||||
- les documents Android, build, JNI et validation décrivent le chemin réellement livré ;
|
||||
- les gates workspace/beta applicables sont propres.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/rules/RULES_COMMANDS.md -->
|
||||
<!-- version: 15 -->
|
||||
<!-- version: 16 -->
|
||||
|
||||
# Règles d'exécution des commandes
|
||||
|
||||
@@ -103,7 +103,7 @@
|
||||
## Outils de build et scripts d'audit
|
||||
|
||||
- **CMD-BUILD-001** — Les scripts Python du dépôt sont autorisés pour les audits, audits complémentaires, validations et validations complémentaires.
|
||||
- **CMD-BUILD-002** — À partir de `0.3.x`, aucun chemin de build nouveau ou modifié n’est piloté par Python. Les orchestrateurs historiques `scripts/build_reflex_tauri_wasm.py` et `scripts/build_android_rust.py` restent tolérés uniquement comme mécanismes gelés de la baseline `0.1.0` jusqu’à la tranche qui réactive leur chemin ; ils ne sont ni copiés, ni généralisés, ni utilisés pour un nouveau POC.
|
||||
- **CMD-BUILD-002** — À partir de `0.3.x`, aucun chemin de build nouveau ou modifié n’est piloté par Python. L'orchestrateur historique `scripts/build_reflex_tauri_wasm.py` reste toléré uniquement comme mécanisme gelé de la baseline `0.1.0` jusqu’à la tranche qui réactive son chemin ; il n'est ni copié, ni généralisé, ni utilisé pour un nouveau POC. Le builder Android historique `scripts/build_android_rust.py` a été retiré lorsque son chemin a été réactivé en `0.3.3`.
|
||||
- **CMD-BUILD-003** — Les builds utilisent l'outil natif approprié au périmètre : Cargo pour Rust, Gradle pour Android, Tauri CLI pour Tauri, ou l'outil officiellement retenu par la plateforme concernée.
|
||||
- **CMD-BUILD-004** — Les POC `0.3.x` doivent remplacer toute orchestration de build Python restante par des procédures explicites, reproductibles et testées avec les outils natifs.
|
||||
- **CMD-BUILD-005** — Les builds, tests unitaires, tests d'intégration et smoke tests de validation sont exécutés côté utilisateur ; les scripts d'audit peuvent vérifier statiquement leur préparation mais ne les simulent pas.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/studies/025-V0_3_3_ANDROID_NATIVE_MULTI_ABI_AUDIT.md -->
|
||||
<!-- version: 2 -->
|
||||
<!-- version: 3 -->
|
||||
|
||||
# Audit Android SDL3 natif multi-ABI pour 0.3.3
|
||||
|
||||
@@ -263,3 +263,11 @@ Avant d'ouvrir l'implémentation `0-pre.2`, la gate utilisateur doit donc releve
|
||||
## Conclusion de cadrage
|
||||
|
||||
Le scope tient dans `0.3.3` si chaque tranche reste centrée sur un résultat vertical : ownership Gradle mono-ABI, puis multi-ABI/universal, puis AAB/compatibilité et consolidation. Aucun besoin découvert n'impose aujourd'hui de créer une version supplémentaire avant de commencer l'implémentation.
|
||||
|
||||
## Révision après validation de la matrice quatre ABI
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/testing/003-RC_VALIDATION_MATRIX.md -->
|
||||
<!-- version: 1 -->
|
||||
<!-- version: 2 -->
|
||||
|
||||
# Matrice de validation RC 0.1.0
|
||||
|
||||
@@ -85,13 +85,8 @@ Critères :
|
||||
## Android x86_64 / API 36
|
||||
|
||||
```bash
|
||||
python3 scripts/build_android_rust.py reflex --abi x86_64
|
||||
python3 scripts/build_android_rust.py snake --abi x86_64
|
||||
|
||||
cd Android
|
||||
gradle :game-reflex-poc:assembleDebug
|
||||
gradle :game-snake-poc:assembleDebug
|
||||
cd ..
|
||||
(cd Android && gradle :game-reflex-poc:assembleDebug)
|
||||
(cd Android && gradle :game-snake-poc:assembleDebug)
|
||||
```
|
||||
|
||||
Déployer les deux APK sur l'AVD de référence et revalider :
|
||||
@@ -105,13 +100,8 @@ Déployer les deux APK sur l'AVD de référence et revalider :
|
||||
## Android ARM64 réel
|
||||
|
||||
```bash
|
||||
python3 scripts/build_android_rust.py reflex --abi arm64-v8a
|
||||
python3 scripts/build_android_rust.py snake --abi arm64-v8a
|
||||
|
||||
cd Android
|
||||
gradle :game-reflex-poc:assembleDebug
|
||||
gradle :game-snake-poc:assembleDebug
|
||||
cd ..
|
||||
(cd Android && gradle :game-reflex-poc:assembleDebug)
|
||||
(cd Android && gradle :game-snake-poc:assembleDebug)
|
||||
```
|
||||
|
||||
Déployer sur l'appareil ARM64 de référence et revalider Reflex et Snake.
|
||||
|
||||
Reference in New Issue
Block a user