199 lines
8.6 KiB
Markdown
199 lines
8.6 KiB
Markdown
<!-- file: deltas/0.1.3/alpha.2.md -->
|
|
<!-- version: 1 -->
|
|
|
|
# Delta 0.1.3-alpha.2 — contrats Android de base
|
|
|
|
## Baseline
|
|
|
|
Ce delta s'applique après :
|
|
|
|
```text
|
|
0.1.3-alpha.1
|
|
+ history/0.1.3/alpha.1.md PASS
|
|
+ commit/push complet de la tranche alpha.1
|
|
```
|
|
|
|
Il ne doit pas être appliqué avant l'intégration du history `alpha.1`.
|
|
|
|
## Objet
|
|
|
|
Réviser le profil Android uniquement sur les contrats de base démontrés par le corpus Games et confirmés par la documentation Android officielle courante : structure Android-only versus multi-plateforme, composition langage/build, matrice AGP/Gradle/JDK, niveaux SDK, identité applicative, versioning, configuration locale et signing.
|
|
|
|
Cette tranche ne couvre pas encore NDK/ABI/native packaging, APK/AAB, Android Lint, tests instrumentés, installation/smokes device/AVD ni exigences 16 KB ; ces responsabilités restent réservées à `alpha.3`.
|
|
|
|
## Modifications
|
|
|
|
### Version
|
|
|
|
`VERSION` devient :
|
|
|
|
```text
|
|
0.1.3-alpha.2
|
|
```
|
|
|
|
### Plan Android
|
|
|
|
`docs/plans/009-V0_1_3_ANDROID_REEVALUATION_PLAN.md` passe en révision interne `2` et enregistre :
|
|
|
|
- le `PASS` opérateur réel de `alpha.1` ;
|
|
- l'absence de fix avant `alpha.2` ;
|
|
- les sources Android officielles vérifiées le `2026-09-28` ;
|
|
- la confirmation que les valeurs Games AGP `9.4.0`, Gradle `>= 9.6.0` et JDK observé restent des preuves locales et non des minima PGR ;
|
|
- le scope exact de `alpha.2` ;
|
|
- le maintien du détail 16 KB dans `alpha.3`.
|
|
|
|
### Profil Android
|
|
|
|
`docs/rules/610-ANDROID.md` passe en révision interne `4`.
|
|
|
|
La révision :
|
|
|
|
- conserve `Android/` comme convention conditionnelle d'un dépôt multi-plateforme, mais retire `gradlew*` du layout d'exemple afin de ne plus présenter le Wrapper comme structure obligatoire ;
|
|
- rend le profil Android neutre quant au langage applicatif et applique `520-JAVA.md` uniquement lorsque du Java est réellement présent ;
|
|
- distingue le JDK qui exécute Gradle/AGP du niveau Java du code applicatif ;
|
|
- conserve la matrice AGP/Gradle/JDK sans recopier les règles générales possédées par `522-GRADLE.md` ;
|
|
- clarifie `compileSdk`, `targetSdk` et `minSdk` comme trois contrats distincts ;
|
|
- remplace l'objectif implicite « `minSdk` aussi bas que possible » par une décision de compatibilité produit explicitement justifiée ;
|
|
- introduit la séparation explicite entre `namespace` et `applicationId` ;
|
|
- conserve `VERSION`, `versionName` et `versionCode` comme contrats distincts selon le release train réellement possédé ;
|
|
- précise que `local.properties` est réservé à l'environnement local Android/AGP et ne doit pas devenir une source de configuration partagée ou un fourre-tout de propriétés produit ;
|
|
- consolide le traitement des keystores, clés et mots de passe de signing sans recopier l'interdiction générale des secrets ;
|
|
- clarifie que le manifest possède composants/permissions/capabilities tandis que les identités `namespace` / `applicationId` restent dans la configuration Android du module.
|
|
|
|
Aucun template, skeleton, audit Python ou contrat de validation Android n'est créé.
|
|
|
|
## Vérification officielle utilisée
|
|
|
|
La vérification courante effectuée avant préparation du delta couvre :
|
|
|
|
```text
|
|
Android Gradle plugin 9.4.0 release notes
|
|
Configure your build
|
|
Java versions in Android builds
|
|
Configure the app module
|
|
Sign your app
|
|
```
|
|
|
|
Elle confirme notamment la matrice AGP/Gradle/JDK, la distinction du JDK de build et du niveau Java, les responsabilités `compileSdk` / `targetSdk` / `minSdk`, la séparation `namespace` / `applicationId`, le rôle local de `local.properties` et le caractère secret des clés de signing.
|
|
|
|
Elle n'est pas utilisée pour normaliser encore la contrainte 16 KB.
|
|
|
|
## Validation opérateur
|
|
|
|
Après application du history `PASS`, commit/push de `alpha.1`, puis application du présent delta :
|
|
|
|
```bash
|
|
test "$(cat VERSION)" = '0.1.3-alpha.2'
|
|
git cat-file -e HEAD:history/0.1.3/alpha.1.md
|
|
test -f history/0.1.3/alpha.1.md
|
|
test -f deltas/0.1.3/alpha.2.md
|
|
test ! -e history/0.1.3/alpha.2.md
|
|
|
|
grep -A2 '^## Statut$' history/0.1.3/alpha.1.md | grep -Fx 'PASS'
|
|
grep -Fx '<!-- version: 2 -->' docs/plans/009-V0_1_3_ANDROID_REEVALUATION_PLAN.md
|
|
grep -Fx '<!-- version: 4 -->' 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.1.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: 4 -->')
|
|
|
|
for phrase in (
|
|
'Android ne sélectionne pas à lui seul le langage applicatif du projet.',
|
|
'JDK qui exécute Gradle / AGP',
|
|
'Le choix de `minSdk` MUST être justifié par le contrat produit',
|
|
'## Identité applicative et namespace',
|
|
'`applicationId` identifie l\'application installée et distribuée.',
|
|
'`local.properties` appartient à l\'environnement local du build Android/AGP',
|
|
'release / upload keystore',
|
|
'`AndroidManifest.xml` MUST déclarer uniquement les composants',
|
|
):
|
|
assert phrase in android, phrase
|
|
|
|
structure = android.split('## Structure du projet', 1)[1].split('## Langage applicatif et logique de build', 1)[0]
|
|
assert 'gradlew' not in structure
|
|
assert 'settings.gradle(.kts)' in structure
|
|
assert '<module>/' in structure
|
|
|
|
assert 'Java est le langage applicatif Android par défaut du profil PGR' not in android
|
|
assert '`minSdk` SHOULD rester aussi bas que raisonnablement supportable' not 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.1`',
|
|
'La gate opérateur de `alpha.1` est `PASS`',
|
|
'### Vérification Android officielle courante pour `alpha.2`',
|
|
'AGP `9.4.0` requiert actuellement au minimum Gradle `9.6.0` et JDK `17`',
|
|
'La vérification 16 KB n\'est pas absorbée ici',
|
|
'### Scope arrêté pour `alpha.2`',
|
|
):
|
|
assert phrase in plan, phrase
|
|
|
|
assert not Path('docs/validation/006-ANDROID_VALIDATION.md').exists()
|
|
assert not Path('history/0.1.3/alpha.2.md').exists()
|
|
|
|
for path in (
|
|
'docs/rules/520-JAVA.md',
|
|
'docs/rules/522-GRADLE.md',
|
|
'docs/rules/600-PLATFORMS.md',
|
|
):
|
|
assert Path(path).is_file(), path
|
|
|
|
print('0.1.3 alpha.2 Android base-contract audit: clean (language/build ownership, SDK contracts, app identity, local config and signing clarified)')
|
|
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.2.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.2.md
|
|
M docs/plans/009-V0_1_3_ANDROID_REEVALUATION_PLAN.md
|
|
M docs/rules/610-ANDROID.md
|
|
```
|
|
|
|
La revue qualitative doit confirmer que :
|
|
|
|
- aucun choix Games n'est devenu une règle Android générale par copie de valeur ;
|
|
- Android n'impose plus Java par défaut et ne confond pas JDK de build avec niveau Java applicatif ;
|
|
- l'exemple structurel ne rend ni Wrapper ni Gradle système obligatoire ;
|
|
- `minSdk` est une décision de compatibilité produit et non un concours vers la valeur la plus basse ;
|
|
- `namespace` et `applicationId` sont distingués sans imposer un schéma de nommage propriétaire ;
|
|
- `local.properties` ne devient pas une configuration partagée et les secrets de signing restent hors Git ;
|
|
- aucun contenu NDK/ABI/16 KB, Tauri ou adoption Games n'a été absorbé prématurément ;
|
|
- aucun artefact supplémentaire n'a été créé uniquement pour remplir la release.
|
|
|
|
## Transition
|
|
|
|
### PASS
|
|
|
|
Produire `history/0.1.3/alpha.2.md`, puis préparer `0.1.3-alpha.3` pour les responsabilités conditionnelles NDK/ABI/native packaging, APK/AAB, Android Lint, niveaux de tests, install/smokes device/AVD et contraintes de distribution modernes réellement applicables.
|
|
|
|
Avant toute règle 16 KB, vérifier explicitement les exigences Android officielles courantes et borner le contrat au canal de distribution et aux artefacts natifs réellement concernés.
|
|
|
|
### FAIL
|
|
|
|
Consigner le diagnostic réel dans `history/0.1.3/alpha.2.md` et rester dans `alpha.2.fix.N` sauf REPLAN justifié. Le fix MUST rester borné aux contrats Android de base et ne doit pas absorber le scope natif/distribution de `alpha.3`, Tauri `0.1.4` ou l'adoption Games `0.1.5`.
|