Le console de Play signale maintenant les applications Android Capacitor pour L'optimisation de l'application est en dessous de notre seuilce qui se produit souvent avec L'obfuscation est resté en place 3%. Google souhaite au moins 25% l'obfuscation, l'optimisation et la mise en forme. La mise en œuvre commence en février 2027 Partenaires de Capgoet, en cas d'échec, cela peut réduire la visibilité et les options de publication.
La mise en garde ressemble à ceci dans Android vitals :

Ceci est une question native Android DEX. Il ne s'agit pas de votre bundle Vue, React ou Angular. Capgo Les mises à jour en temps réel n'affectent pas ce score. Vous le corrigez dans la mise en production Android Gradle, puis vous téléchargez une nouvelle App Bundle.
Ce que mesure Google
Google Play inspecte le DÉX dans votre App Bundle Android : Java et Kotlin compilés, y compris Capacitor, plugins et AndroidX. À partir de février 2027, les applications avec plus de 10 Mo de DEX doivent atteindre 25% sur les trois :
| Métrique | Ce qu'il signifie | Cause typique d'un score bas Capacitor |
|---|---|---|
| Obfuscation | Les noms de classe, de champ et de méthode renommés en noms courts | minifyEnabled est toujours false |
| Optimisation | R8 enlève, fusionne et réécrit le bytecode | Par défaut proguard-android.txt inclut -dontoptimize |
| Réduction | Classes et méthodes inutilisées supprimées | La réduction de Resource/code n'est jamais activée |
Play lit r8.json Lorsque vous construisez avec la dernière mise à jour du plugin Android Gradle 8.10 ou supérieur. Sinon, il utilise mapping.txt, puis les heuristiques DEX. Une application Capacitor déployée avec la minification désactivée a presque aucun fichier de cartographie, donc Play voit des noms lus et signale quelques pourcents d'obfuscation (souvent laissés par des bibliothèques AAR déjà obfusquées). Cela correspond à 3% un score vital.
Politique officielle : Exigences de qualité technique du Console Play. Détail d'implémentation : L'optimisation DEX code et contexte : Page/zone : Site web de marketing Capgo. Rôle : Étiquette de navigation ou élément UI court. Vu dans : page trust.astro. Clé de message `and` (Et)..
Why les Capacitor applications échouent à ce contrôle
Le modèl’Android Capacitor est toujours livré avec des builds de production sans R8 :
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
C'est le mode par défaut dans android-template/app/build.gradle. Les builds de débogage devraient rester ainsi. Les builds de production ne devraient pas, si vous publiez sur Play.
Votre JavaScript est déjà minifié par Vite ou webpack. Play ne compte pas cela. Seuls les noms natifs DEX, les code natifs inutilisés et les optimisations R8 comptent.
Étape 1 — Activez R8 pour la production
Ouvrez android/app/build.gradle (Le Groovy est le Capacitor par défaut) et modifiez la production block:
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
Si le module utilise Kotlin DSL (build.gradle.kts):
buildTypes {
getByName("release") {
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
Trois détails sont importants :
minifyEnabled truece qui s'exécute réellement R8 (réduction + flou + optimisation).shrinkResources truesupprime les ressources Android non utilisées. Il nécessite une minimisation.- Pour cette configuration R8, utilisez
proguard-android-optimize.txt.proguard-android.txtexpédie-dontoptimize, qui bloque les optimisations R8 et échoue AGP 9. Play permet à tout réducteur de se passer ; les applications Capacitor devraient utiliser R8 avec les paramètres d'optimisation par défaut. Voir Capacitor Plugin AGP 9 Build Error Fix si un plugin se réfère toujours au fichier ancien.
N'installez pas minifyEnabled true sur debugMaintient les exécutions locales en mode de sortie rapide et les traces de pile lisibles.
Étape 2 — N'activez pas la mode complet de R8
Ouvrir android/gradle.properties et supprimez cette ligne si elle existe :
android.enableR8.fullMode=false
AGP 8+ active déjà le mode complet. Laisser ce drapeau en place limite l'optimisation.
Recherchez également android/app/proguard-rules.pro (et tout fichier supplémentaire) -include pour :
-dontobfuscate
-dontoptimize
-dontshrink
-keep class ** { *; }
Ces règles maintiendront les scores de Play bas même après avoir inversé minifyEnabled. Supprimez-les à moins d'avoir une raison documentée, temporaire.
Étape 3 — Gardez les plugins Capacitor, pas toute l'application
R8 utilise les métadonnées de réflexion. Les plugins Capacitor sont découverts par des annotations, ils ont donc besoin de règles de maintien. Vous n'ajoutez généralement pas vous-même. Depuis Capacitor 3.2.3, @capacitor/android expédie règles de ProGuard pour les consommateurs qui gardent :
@CapacitorPluginclasses,@PluginMethodappels de permissions et d'activités- Les classes qui étendent
com.getcapacitor.Plugin - Legacy
@NativePluginet les classes de plugins Cordova
Restez sur une ligne actuelle Capacitor 6/7/8 afin que ces règles de consommateur soient appliquées.
Ajoutez des règles supplémentaires dans android/app/proguard-rules.pro seulement pour un crash que vous pouvez reproduire dans une version de production.
# Good: one misbehaving plugin package
-keep class com.mycompany.myplugin.** { *; }
# Bad: this will tank obfuscation and shrinking
-keep class com.getcapacitor.** { *; }
-keep class ** { *; }
Narrow bat large : Capgo plugin directoryrépertoire de plugins __CAPGO_KEEP_0__ Capgo Consulting __CAPGO_KEEP_0__ Consulting
Official Capacitor notes: Notes officielles de __CAPGO_KEEP_0__ :.
Utilisation de ProGuard
Étape 4 — Construire un bundle de production réel
Les APKs de débogage afficheront toujours ~0 % d'obfuscation. Seul ce que vous téléchargez est évalué par Play.
npm run build
npx cap sync android
cd android
./gradlew bundleRelease
Sans une release configuration de signature, ces tâches réussissent toujours mais émettent un fichier non signé .aabSignez-le dans Android Studio avant la mise en ligne sur Play.
Installez un APK de version de production sur un appareil (./gradlew assembleReleaseet le fichier APK sous app/build/outputs/apk/release/). Un .aab est un format de mise en ligne sur Play, et non quelque chose que vous installez par sideloading. Exercicez les plugins natifs (caméra, push, fichier, facturation, authentification). Les bogues R8 ne se manifestent pas pendant les sessions de débogage. npx cap run android Après les commandes Gradle ci-dessus (vous êtes dans
confirmez que R8 a bien fonctionné : android/), confirm R8 actually ran:
app/build/outputs/mapping/release/mapping.txtapp/build/outputs/mapping/release/configuration.txt- Sur la dernière mise à jour de AGP 8.10 ou supérieure,
r8.jsondans l'App Bundle
Ces release dossiers sont la variante par défaut Capacitor. Avec des saveurs de produit, la correspondance se trouve sous le nom de la variante (mapping/freeRelease/L’APK se trouve sous apk/<flavor>/release/ par exemple apk/free/release/).
Si mapping.txt est manquant, vous êtes dans le dossier de variante incorrect, CI a assemblé debugou R8 a exécuté avec -dontobfuscateVérifiez minifyEnabled true sur release et que les règles de maintien ne désactivent pas l'obfuscation.
Étape 5 — Gardez les rapports de crash lisibles
Les traces de pile obfusquées sont inutiles sans le fichier de cartographie. Gardez mapping.txt pour chaque version Play :
- Console Play : Test et lancement → Explorateur de bundle d'applications → Téléchargements → Actifs, puis téléchargez
mapping.txtsi elle n'est pas déjà attachée. - Firebase Crashlytics / Sentry : téléchargez la même carte de cartographie en tant que partie de CI.
Android Studio / AGP intègre souvent la carte de cartographie dans le .aab. Vérifiez toujours l'onglet Actifs après le premier téléchargement optimisé.
Étape 6 — Téléchargez et réexaminez Play
Téléchargez le nouveau .aab à une piste de test interne (la production n'est pas requise pour actualiser le score). Ouvrir :
- Testez et publiez → Explorateur de l'archive de l'application pour cette version
- taille du fichier DEX plus les pourcentages d'obfuscation / optimisation / réduction
- Surveillez et améliorez → Vitals Android après la nouvelle version est celle que Play analyse
Vous avez besoin de 25 % sur chacun des trois indicateurs, et non seulement l'obfuscation. L'activation de R8 avec proguard-android-optimize.txt s'accompagne généralement d'un saut d'un Capacitor application de l'obfuscation à un chiffre à bien au-dessus de 25 % sur tous les trois.
seul exige lorsque la taille du DEX dépasse 10 MB pour les applications (50 MB pour les jeux). Même en dessous de ce seuil, il est toujours utile de le corriger : DEX plus petit, moins de mémoire, démarrage plus rapide.
Si vous êtes toujours sous 25%
R8 est activé, mais Play (ou l'analyseur local) montre toujours un score faible. Les règles de conservation large sont les résidus habituels.
- Ouvrir Analyseur de configuration R8 si votre plugin Gradle Android est de 9.3 ou plus récent —
assembleReleasealors écritconfiganalyzer.htmlà côté demapping.txt. Sur AGP 9.2 et versions antérieures, ignorez ce fichier HTML et utilisezmapping.txtAPK Analyzer, et l'explorateur de bundle d'application de Play à la place. - Triez les règles de conservation par la quantité d'applications qu'elles bloquent. Les règles de consommateur de bibliothèque que vous ne pouvez pas éditer sont normales. Le niveau d'application
-keep class com.foo.** { *; }n'est pas. - Ouvrez le
.aabdans l'analyseur APK d'Android Studio, sélectionnez les fichiers volumineux, et activez les noms déobfuscués (besoin de).dexLes packages qui restent volumineux et lisibles sont les packages à arrêter de conserver intégralement.mapping.txtMettez à jour les plugins qui référencent toujours - Ce fichier bloque l'optimisation sur AGP 9 et constitue un signal rouge dans les anciens plugins.
proguard-android.txtNe « fixez » pas un score bas en réduisant le DEX avec
et en espérant que les heuristiques changent. Play veut la réduction, l'optimisation, minifyEnabled false et context : Page/zone : Site web de marketing Capgo. Rôle : Étiquette de navigation ou élément UI court. Vu dans : page trust.astro. Clé de message `et` (Et). l'obfuscation.
Ceci ne remplace pas
- la minification du JavaScript en
vite.config.tsne bouge pas ce métrique. - Capgo mises à jour en direct expédient HTML/JS/CSS. Ils ne reconstruisent pas DEX. Après R8 est activé dans le store binaire, vous pouvez toujours expédier des correctifs JS en l'air. La vérification d'obfuscation elle-même nécessite une mise en ligne native Play.
- 16 Ko page size est un exigence native Play distincte. Voir Taille de page Android 16 Ko.
Si vous avez déjà construit Android avec Capgo Construire, modifiez android/app/build.gradle dans le dépôt. La prochaine build cloud récupère R8. Vous n'avez pas besoin d'une pipeline Play différente, seulement un binaire de publication produit avec la minification activée. Même idée si vous maintenez GitHub Actions builds Android : l'assemblage du flux doit s'assembler release, pas de débogage.
FAQ
Will enabling R8 break my Capacitor plugins?
Si vous activez R8, cela peut briser vos Capacitor plugins, si un plugin utilise la réflexion et n'a pas de règles de conservation pour les consommateurs. It can, if a plugin uses reflection and ships no consumer keep rules. Core __CAPGO_KEEP_0__ already keeps plugin classes. Test a release build. Add a narrow Capgo Consulting __CAPGO_KEEP_0__ Consulting
can fork and keep it building. npx cap run Does
Non. Cette commande utilise une version de débogage avec R8 désactivé. Utilisez bundleRelease / une mise en ligne signée Play.
Nous avons déjà configuré minifyEnabled true et on voit toujours 3 %. Pourquoi ?
Recherchez pour -dontobfuscate, proguard-android.txt, android.enableR8.fullMode=false, et les règles de -keep confirmez que CI a téléchargé le minifié AAB, et non un artefact ancien.
A-t-on besoin de ProGuard au lieu de R8 ?
Non. R8 est le compresseur de Gradle Android. Il lit les fichiers de règles ProGuard. Les documents de Play de Google autorisent n'importe quel compresseur; R8 est celui que les applications Capacitor devraient utiliser.
Liste de vérification
-
release { minifyEnabled true; shrinkResources true } -
proguard-android-optimize.txt(pasproguard-android.txt) - Non
-dontobfuscate/-dontoptimize/ application globale-keep class ** - Capacitor 3.2.3+ donc les règles de consommateur de plugin s'appliquent
- La mise en production produit
mapping.txt - Les plugins natifs ont été testés sur une installation de mise en production
- Neuf
.aabcontext : Page/zone : Page de produit de mise à jour en direct. Rôle : Étiquette de navigation ou élément UI court. Clé de message `live_update_lts_electron_new` (Nouvelle mise à jour en direct Lts Electron). - Enregistré ; la correspondance est attachée à l'explorateur de bundle d'application
That is the whole Play Console warning: Capacitor left R8 off, Play started scoring DEX, and a one-line release Gradle change plus a store upload is the fix.
C'est toute la mise en garde du Console de Play : Capacitor laissé R8 hors, Play a commencé à évaluer DEX, et une modification de ligne de Gradle de mise en production plus une mise en ligne dans le magasin est la solution.
Continuez de Fixer l'obfuscation de Google Play en dessous de 25 % dans les __CAPGO_KEEP_0__ applications Fix Google Play Obfuscation Below 25% in Capacitor Apps Fixer l'obfuscation de Google Play en dessous de 25 % dans les __CAPGO_KEEP_0__ applications pour planifier les lancements de magasin Android, connectez-l’avec Capgo Bâtiments natifs pour les App Bundles de mise en production, Capgo CI/CD pour la pipeline d'upload, Intégration CI/CD contexte : Page/zone : Capgo Builder / produit de construction native dans le cloud. Rôle : Étiquette de navigation ou élément de menu court. Clé de message `native_build_feature_ci_cd` (Native Build Feature Ci Cd). Automatic Capacitor Android build with GitHub actions Construction automatique de l'__CAPGO_KEEP_0__ Android avec des __CAPGO_KEEP_1__ actions Capgo Consulting __CAPGO_KEEP_0__ Conseil