diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 920ac50..bbb82d2 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -23,11 +23,19 @@ android { buildTypes { release { + // Optimisations R8 + shrink des ressources (le cœur du gain debug→release) isMinifyEnabled = true + isShrinkResources = true proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "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") } } diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 3f566de..09cfc1a 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -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.** { ; } +-keep class com.hormonetrack.data.backup.BackupData { ; } +-keep class com.hormonetrack.pk.TConfig { ; } + +# Énumérations : converties en String par Room et Gson (par nom) -keepclassmembers enum com.hormonetrack.data.model.** { *; } diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 55ed2a6..9340d7b 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -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. Le contenu remonte, les listes défilent visuellement sous la barre de statut (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) diff --git a/docs/DEVELOPPEMENT.md b/docs/DEVELOPPEMENT.md index 9c27083..3f0d364 100644 --- a/docs/DEVELOPPEMENT.md +++ b/docs/DEVELOPPEMENT.md @@ -729,11 +729,24 @@ Le script : (`[1.2.3]`) — première version du script cherchait `[vX.Y.Z]` et tombait sur le fallback « Voir docs/CHANGELOG.md » ; - 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`) ; scope requis : `write:repository` (suffit pour releases + assets, pas pour 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 : - L'APK est une **build debug** signée avec la clé debug locale — installable en sideload, mises à jour entre versions OK (même signature) ;