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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user