v1.2.5 : builds release optimisés (R8 + shrink, 20 Mo → 2,4 Mo), APK release + debug publiés

- build release signé avec la CLÉ DEBUG (même signature → mise à jour
  par-dessus l'app installée sans perte de données) mais avec R8 full mode
  + isShrinkResources : 20 Mo → 2,4 Mo, démarrage et fluidité améliorés
- proguard-rules.pro : -keep explicites pour la réflexion Gson (data.model,
  BackupData, TConfig) — sinon export/import JSON cassé en release uniquement
- release v1.2.5 : deux APK publiés (release recommandé 2,4 Mo + debug 20 Mo)
- docs : §16.bis (deux APK par release, garde-fous R8), CHANGELOG
This commit is contained in:
Siphonight 2026-09-05 20:27:05 +02:00
parent 1a06c3c844
commit a77fd283e3
4 changed files with 43 additions and 2 deletions

View File

@ -23,11 +23,19 @@ android {
buildTypes { buildTypes {
release { release {
// Optimisations R8 + shrink des ressources (le cœur du gain debug→release)
isMinifyEnabled = true isMinifyEnabled = true
isShrinkResources = true
proguardFiles( proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"), getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro" "proguard-rules.pro"
) )
// ⚠️ Signé avec la CLÉ DEBUG volontairement : l'APK release reste
// installable PAR-DESSUS l'APK debug déjà installé (même signature),
// sans désinstallation ni perte de données, tout en bénéficiant de
// R8. Si un jour on distribue largement : générer un vrai keystore
// (signature différente → migration backup→désinstall→réimport).
signingConfig = signingConfigs.getByName("debug")
} }
} }

View File

@ -1,2 +1,16 @@
# Keep Room entities' enum fields (auto-converters use enum names via reflection in Gson backup) # Règles R8/ProGuard — HormoneTrack
# Build release : isMinifyEnabled + isShrinkResources actifs (v1.2.5).
# ⚠️ R8 en full mode (AGP 9) est agressif : TOUT usage de réflexion doit être
# couvert explicitement, sinon crash à l'exécution uniquement en release.
# --- Gson (backup JSON + calibration) ---
# Gson lit/écrit les champs par réflexion (noms de champs) : sans ces règles,
# l'export/import JSON produirait des objets vides ou planterait EN RELEASE SEULE.
-keepattributes Signature, InnerClasses, EnclosingMethod, *Annotation*
-keep class com.hormonetrack.data.model.** { <fields>; }
-keep class com.hormonetrack.data.backup.BackupData { <fields>; }
-keep class com.hormonetrack.pk.TConfig { <fields>; }
# Énumérations : converties en String par Room et Gson (par nom)
-keepclassmembers enum com.hormonetrack.data.model.** { *; } -keepclassmembers enum com.hormonetrack.data.model.** { *; }

View File

@ -16,6 +16,12 @@ Versionnage : [SemVer](https://semver.org/). Releases taguées dans git (`v1.2.5
- la `NavigationBar` consomme la barre de navigation système. - la `NavigationBar` consomme la barre de navigation système.
Le contenu remonte, les listes défilent visuellement sous la barre de statut Le contenu remonte, les listes défilent visuellement sous la barre de statut
(comportement Material You standard). (comportement Material You standard).
- **Builds release optimisés** (R8 + shrink des ressources, signés avec la clé
debug → installables par-dessus sans perte de données) : l'APK passe de
**20 Mo à 2,4 Mo** et gagne en fluidité. Depuis cette release, chaque version
est publiée en deux fichiers :
- `HormoneTrack-vX.Y.Z-release.apk` ← **recommandé** (optimisé R8) ;
- `HormoneTrack-vX.Y.Z-debug.apk` (comme avant, plus lourd, pour diagnostic).
## [1.2.4] — 2026-09-05 (versionCode 7) ## [1.2.4] — 2026-09-05 (versionCode 7)

View File

@ -729,11 +729,24 @@ Le script :
(`[1.2.3]`) — première version du script cherchait `[vX.Y.Z]` et tombait sur (`[1.2.3]`) — première version du script cherchait `[vX.Y.Z]` et tombait sur
le fallback « Voir docs/CHANGELOG.md » ; le fallback « Voir docs/CHANGELOG.md » ;
- crée la release si absente, sinon **met à jour le corps** (PATCH) ; - crée la release si absente, sinon **met à jour le corps** (PATCH) ;
- attache l'APK (remplace l'asset du même nom si présent) ; - attache l'APK (remplace l'asset du même nom si présent) — appeler le script
DEUX FOIS pour publier les deux APK (noms distincts) :
`HormoneTrack-vX.Y.Z-release.apk` (**recommandé**, R8) et
`HormoneTrack-vX.Y.Z-debug.apk` ;
- lit le token Gitea dans le trousseau macOS (`security find-internet-password`) ; - lit le token Gitea dans le trousseau macOS (`security find-internet-password`) ;
scope requis : `write:repository` (suffit pour releases + assets, pas pour scope requis : `write:repository` (suffit pour releases + assets, pas pour
créer un repo — cf plus haut). créer un repo — cf plus haut).
**Build release (v1.2.5)** : `./gradlew assembleRelease` — R8 full mode +
`isShrinkResources` + signé avec la **clé debug** (même signature que les APK
debug distribués → mise à jour par-dessus sans perte de données ; 20 Mo →
2,4 Mo). Garde-fous dans `proguard-rules.pro` : Gson lit les champs des
modèles par réflexion → `-keep` explicites sur `data.model.**`,
`BackupData`, `TConfig` (+ attributs `Signature`) — sinon l'export/import
JSON casse UNIQUEMENT en release. ⚠️ À chaque activation d'optimisation :
tester sur téléphone l'export/import de backup + les graphiques (R8 ne se
vérifie pas en tests JVM).
Notes : Notes :
- L'APK est une **build debug** signée avec la clé debug locale — installable en - L'APK est une **build debug** signée avec la clé debug locale — installable en
sideload, mises à jour entre versions OK (même signature) ; sideload, mises à jour entre versions OK (même signature) ;