212 lines
9.9 KiB
Markdown
212 lines
9.9 KiB
Markdown
<!-- file: deltas/0.1.3/alpha.3.md -->
|
|
<!-- version: 1 -->
|
|
|
|
# Delta 0.1.3-alpha.3 — natif, packaging, distribution et validation Android
|
|
|
|
## Baseline
|
|
|
|
Ce delta s'applique après :
|
|
|
|
```text
|
|
0.1.3-alpha.2
|
|
+ history/0.1.3/alpha.2.md PASS
|
|
+ commit/push complet de la tranche alpha.2
|
|
```
|
|
|
|
Il ne doit pas être appliqué avant l'intégration du history `alpha.2`.
|
|
|
|
## Objet
|
|
|
|
Réviser le profil Android uniquement sur les responsabilités conditionnelles démontrées par Games et confirmées par la documentation Android officielle courante : NDK/ABI/code natif, Android Lint, niveaux de tests, APK/AAB, installation/smokes device/AVD et compatibilité 16 KB lorsque le package ou le canal de distribution l'exigent réellement.
|
|
|
|
Cette tranche ne crée aucun owner JNI/Rust/SDL, skeleton Android, audit Python ou contrat `docs/validation/` séparé. Elle ne modifie ni Tauri `0.1.4`, ni Games `0.1.5`.
|
|
|
|
## Modifications
|
|
|
|
### Version
|
|
|
|
`VERSION` devient :
|
|
|
|
```text
|
|
0.1.3-alpha.3
|
|
```
|
|
|
|
### Plan Android
|
|
|
|
`docs/plans/009-V0_1_3_ANDROID_REEVALUATION_PLAN.md` passe en révision interne `3` et enregistre :
|
|
|
|
- le `PASS` opérateur réel de `alpha.2` ;
|
|
- l'absence de fix avant `alpha.3` ;
|
|
- les sources Android officielles vérifiées le `2026-09-28` pour native/ABI, Lint, tests, packaging, Google Play et 16 KB ;
|
|
- le caractère évolutif des exigences de canal telles que `targetSdk` et les échéances de publication ;
|
|
- la cohérence de la preuve Games 16 KB sans la transformer en gate PGR locale ;
|
|
- le scope exact de `alpha.3` ;
|
|
- le maintien de la décision finale d'artefacts supplémentaires dans `beta.1`.
|
|
|
|
### Profil Android
|
|
|
|
`docs/rules/610-ANDROID.md` passe en révision interne `5`.
|
|
|
|
La révision :
|
|
|
|
- rend NDK et ABI conditionnels à la présence de bibliothèques natives directes ou transitives ;
|
|
- refuse toute version NDK ou liste d'ABI universelle et distingue compilation native, présence dans le package et preuve runtime ;
|
|
- inclut les SDK/bibliothèques natives précompilés dans le contrat de compatibilité du package final ;
|
|
- garde JNI, Rust, SDL, `cargo ndk` et les choix Games hors du profil Android général ;
|
|
- introduit une section Android Lint qui impose une exécution explicite et ciblée lorsqu'elle est applicable, sans supposer qu'un build ordinaire l'exécute ;
|
|
- précise les frontières JVM unit / instrumented / smoke device-AVD et la sélection proportionnée des matrices ;
|
|
- distingue l'APK installable de l'AAB de distribution et interdit d'utiliser un AAB seul comme preuve runtime ;
|
|
- impose de revalider les politiques évolutives du canal de distribution au moment de la release concernée ;
|
|
- normalise la compatibilité 16 KB uniquement lorsqu'il existe du code natif et qu'elle est requise par la plateforme ou le canal ;
|
|
- demande alors une preuve adaptée sur les bibliothèques 64 bits, le package APK/AAB et, lorsque nécessaire, un environnement runtime 16 KB ;
|
|
- conserve les versions AGP/NDK et les commandes précises comme moyens de preuve/toolchain, non comme minima PGR génériques.
|
|
|
|
## Vérification officielle utilisée
|
|
|
|
La vérification courante effectuée avant préparation du delta couvre :
|
|
|
|
```text
|
|
Support 16 KB page sizes
|
|
Android ABIs
|
|
Improve your code with lint checks
|
|
Test from the command line
|
|
Build your app from the command line
|
|
Meet Google Play's target API level requirement
|
|
```
|
|
|
|
Elle confirme notamment, au `2026-09-28` :
|
|
|
|
- Google Play demande depuis le `2026-08-31` API `36+` pour les nouvelles applications et mises à jour Android ordinaires, avec des règles distinctes pour certains form factors ; cette valeur reste une politique Play datée, pas un default Android PGR ;
|
|
- les applications Google Play ciblant API `35+` doivent supporter les pages `16 KB` sur appareils 64 bits et la documentation courante annonce le `2027-02-01` comme échéance à partir de laquelle les mises à jour non compatibles ne pourront plus être publiées ;
|
|
- une application sans code natif direct ou transitif n'a pas de réalignement ELF à effectuer ; une application native doit vérifier aussi ses bibliothèques tierces précompilées ;
|
|
- les moyens officiels de preuve couvrent les segments ELF, `zipalign -P 16` pour l'APK, l'alignement déclaré dans l'AAB via `bundletool` et, lorsque pertinent, un test sur environnement 16 KB ;
|
|
- AGP `8.5.1+` et NDK `r28+` facilitent le chemin standard actuel mais ne deviennent pas des minima PGR universels ;
|
|
- Lint doit être lancé explicitement ; les tests locaux JVM et instrumentés ont des environnements et des responsabilités distincts ;
|
|
- un APK est directement installable, tandis qu'un AAB sert à la distribution et n'est pas une preuve runtime par lui-même.
|
|
|
|
## Validation opérateur
|
|
|
|
Après application du history `PASS`, commit/push de `alpha.2`, puis application du présent delta :
|
|
|
|
```bash
|
|
test "$(cat VERSION)" = '0.1.3-alpha.3'
|
|
git cat-file -e HEAD:history/0.1.3/alpha.2.md
|
|
test -f history/0.1.3/alpha.2.md
|
|
test -f deltas/0.1.3/alpha.3.md
|
|
test ! -e history/0.1.3/alpha.3.md
|
|
|
|
grep -A2 '^## Statut$' history/0.1.3/alpha.2.md | grep -Fx 'PASS'
|
|
grep -Fx '<!-- version: 3 -->' docs/plans/009-V0_1_3_ANDROID_REEVALUATION_PLAN.md
|
|
grep -Fx '<!-- version: 5 -->' docs/rules/610-ANDROID.md
|
|
|
|
python3 -B -m unittest discover -s tests -v
|
|
|
|
python3 -B scripts/audit_markdown_headers.py \
|
|
README.md RULES.md ROADMAP.md CHANGELOG.md docs deltas history prompts
|
|
python3 -B scripts/audit_markdown_tables.py \
|
|
README.md RULES.md ROADMAP.md CHANGELOG.md docs deltas history prompts
|
|
python3 -B scripts/audit_markdown_links.py \
|
|
README.md RULES.md ROADMAP.md CHANGELOG.md docs deltas history prompts
|
|
|
|
python3 -B - <<'PYGATE'
|
|
from pathlib import Path
|
|
import re
|
|
|
|
history = Path('history/0.1.3/alpha.2.md').read_text(encoding='utf-8')
|
|
assert re.search(r'## Statut\s+PASS\s', history)
|
|
|
|
android = Path('docs/rules/610-ANDROID.md').read_text(encoding='utf-8')
|
|
assert android.startswith('<!-- file: docs/rules/610-ANDROID.md -->\n<!-- version: 5 -->')
|
|
|
|
for phrase in (
|
|
'## NDK, ABI et code natif',
|
|
'bibliothèques natives précompilées ou apportées par un SDK',
|
|
'compilation native',
|
|
'packaging',
|
|
'runtime',
|
|
'## Android Lint',
|
|
'PGR MUST NOT supposer qu\'un build Gradle ordinaire exécute Lint automatiquement.',
|
|
'JVM unit',
|
|
'instrumented / integration',
|
|
'smoke device / AVD',
|
|
'Un AAB n\'est pas directement une preuve d\'installation ou d\'exécution sur device.',
|
|
'## Pages mémoire 16 KB et packaging natif',
|
|
'Google Play',
|
|
'API `35` ou supérieur',
|
|
'`zipalign -P 16`',
|
|
'`bundletool`',
|
|
):
|
|
assert phrase in android, phrase
|
|
|
|
assert 'PGR ne fixe ni version NDK ni liste universelle d\'ABI.' in android
|
|
assert 'PGR MUST NOT imposer une version AGP/NDK globale uniquement pour cette raison.' in android
|
|
assert 'targetSdk` minimal' in android
|
|
|
|
plan = Path('docs/plans/009-V0_1_3_ANDROID_REEVALUATION_PLAN.md').read_text(encoding='utf-8')
|
|
for phrase in (
|
|
'## Décision après `alpha.2`',
|
|
'La gate opérateur de `alpha.2` est `PASS`',
|
|
'### Vérification Android officielle courante pour `alpha.3`',
|
|
'depuis le `2026-08-31`',
|
|
'à partir du `2027-02-01`',
|
|
'### Scope arrêté pour `alpha.3`',
|
|
'Aucun owner JNI/Rust/SDL, skeleton Android, audit Python ou contrat `docs/validation/` n\'est créé.',
|
|
):
|
|
assert phrase in plan, phrase
|
|
|
|
assert not Path('docs/validation/006-ANDROID_VALIDATION.md').exists()
|
|
assert not Path('history/0.1.3/alpha.3.md').exists()
|
|
|
|
for forbidden in (
|
|
'NDK MUST être r28',
|
|
'MUST supporter arm64-v8a, armeabi-v7a, x86_64 et x86',
|
|
'targetSdk MUST être 36',
|
|
):
|
|
assert forbidden not in android, forbidden
|
|
|
|
print('0.1.3 alpha.3 Android native/distribution audit: clean (conditional native ownership, lint/tests/package boundaries and 16 KB policy verified)')
|
|
PYGATE
|
|
|
|
git diff --check
|
|
git add VERSION \
|
|
docs/plans/009-V0_1_3_ANDROID_REEVALUATION_PLAN.md \
|
|
docs/rules/610-ANDROID.md \
|
|
deltas/0.1.3/alpha.3.md
|
|
git diff --cached --check
|
|
git status --short
|
|
```
|
|
|
|
Le scope indexé attendu avant ajout du history est :
|
|
|
|
```text
|
|
M VERSION
|
|
A deltas/0.1.3/alpha.3.md
|
|
M docs/plans/009-V0_1_3_ANDROID_REEVALUATION_PLAN.md
|
|
M docs/rules/610-ANDROID.md
|
|
```
|
|
|
|
La revue qualitative doit confirmer que :
|
|
|
|
- aucune valeur Games (NDK `r28c`, quatre ABI, SDL3, Rust/JNI) n'est devenue une règle Android générale ;
|
|
- une application sans code natif n'hérite d'aucune gate NDK/ABI/ELF artificielle ;
|
|
- une dépendance native précompilée est couverte par la même preuve package que le code natif du projet ;
|
|
- Android Lint, tests JVM, tests instrumentés, package, install et smoke restent des preuves distinctes et proportionnées ;
|
|
- un AAB n'est pas traité comme un artefact directement installable ;
|
|
- la règle 16 KB est conditionnelle, fondée sur la politique officielle courante et ne fige ni date ni version d'outil comme default PGR durable ;
|
|
- le profil exige de revalider les politiques de distribution évolutives plutôt que de conserver aveuglément une valeur `targetSdk` datée ;
|
|
- PGR ne prétend pas avoir reconstruit les APK/AAB Games pendant cette tranche documentaire ;
|
|
- aucun contrat Android séparé, skeleton, audit ou owner spécialisé n'a été créé uniquement pour remplir la release ;
|
|
- Tauri `0.1.4` et l'adoption Games `0.1.5` restent hors scope.
|
|
|
|
## Transition
|
|
|
|
### PASS
|
|
|
|
Produire `history/0.1.3/alpha.3.md`, puis préparer `0.1.3-beta.1` pour la réconciliation du profil Android révisé contre Games, `520-JAVA.md`, `522-GRADLE.md`, `600-PLATFORMS.md` et `400-VALIDATION.md`.
|
|
|
|
La beta doit décider explicitement si `610-ANDROID.md` et les owners existants suffisent. Si un artefact fonctionnel supplémentaire devient réellement nécessaire, déclencher un REPLAN vers une tranche alpha dédiée au lieu de l'ajouter en beta.
|
|
|
|
### FAIL
|
|
|
|
Consigner le diagnostic réel dans `history/0.1.3/alpha.3.md` et rester dans `alpha.3.fix.N` sauf REPLAN justifié. Le fix MUST rester borné au natif, packaging, distribution et validation Android et ne doit pas absorber Tauri `0.1.4` ou l'adoption Games `0.1.5`.
|