Le Console Google Play signale maintenant les applications Android Capacitor App optimization is below our threshold, souvent avec Obfuscation est resté en place 3%. Google souhaite au moins 25% l'obfuscation, l'optimisation et la réduction. Février 2027et, en cas d'échec, cela peut réduire la visibilité et les options de publication.
La mise en garde ressemble à ceci dans Android vitals :

C'est un problème lié à la compilation native Android DEX. Il ne s'agit pas de votre bundle Vue, React ou Angular. Capgo Mises à jour en temps réel ne modifient pas ce score. Vous devez le corriger dans la configuration de build Gradle Android, puis publiez une nouvelle version de l'App Bundle.
Ce que Google mesure
Google Play inspecte le DEX dans votre bundle d'application 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 doit atteindre 25% de DEX doivent atteindre
| Metric | Qu'est-ce que cela signifie | Typical Capacitor cause of a low score |
|---|---|---|
| Obfuscation | Les noms de classe, de champ et de méthode renommés en noms courts | minifyEnabled est toujours false |
| Optimisation | R8 inline, 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 ressource/code n'a jamais été réduite en taille. |
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 lisibles et signale une obfuscation de quelques pourcents (souvent laissée par des bibliothèques AAR déjà obfusquées). Cela correspond à 3% un score de vital
Politique officielle : Exigences de qualité technique du Console Google Play. Détail d'implémentation: Optimisation de DEX code et activez l'optimisation d'application avec R8.
Why Capacitor apps fail this check
L'exemple de template Android Capacitor embarque toujours des builds de production sans R8:
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
C'est la valeur par défaut dans android-template/app/build.gradleDebuggage des builds doit rester ainsi. Les builds de production ne doivent pas l'être, si vous publiez sur Play.
Votre JavaScript est déjà minifié par Vite ou webpack. Play ne compte pas cela. Seuls les noms DEX natifs, les code natifs inutilisés et les optimisations R8 comptent.
Étape 1 — Activez R8 pour la version de production
Ouvrir android/app/build.gradle (Groovy est le Capacitor par défaut) et modifiez la release 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 exécute effectivement R8 (réduction + flou + optimisation).shrinkResources truesupprime les ressources Android inutilisées. Il nécessite une minification.- Pour cette configuration R8, utilisez
proguard-android-optimize.txt.proguard-android.txtexpédiez-dontoptimizeLes applications Capacitor devraient utiliser R8 avec les paramètres par défaut d'optimisation. Capacitor Plugin AGP 9 Erreur de Construction Fixe si un plugin se réfère toujours au fichier ancien.
Ne définissez pas minifyEnabled true sur debugMaintenez les exécutions locales en local pour une vitesse et des traces d'erreurs lisibles.
Étape 2 — Ne désactivez pas le mode de R8 complet
Open android/gradle.properties en supprimant cette ligne si elle existe :
android.enableR8.fullMode=false
AGP 8+ active déjà la mode complète. Laisser ce flag en place limite l'optimisation.
Recherche également android/app/proguard-rules.pro Recherchez également (et tout supplémentaire -include fichiers) pour :
-dontobfuscate
-dontoptimize
-dontshrink
-keep class ** { *; }
Ceux-ci garderont les scores de Play bas même après avoir inversé minifyEnabledSupprimez-les à moins que vous n'ayez une raison documentée et temporaire.
Étape 3 — Gardez les Capacitor plugins, pas l'application entière
R8 utilise des métadonnées de réflexion. Les plugins Capacitor sont découverts par des annotations, ils nécessitent donc des règles de conservation. Vous n'ajoutez généralement pas vous-même. Depuis Capacitor 3.2.3, @capacitor/android ships règles de ProGuard pour les consommateurs ce qui reste :
@CapacitorPluginqui gardent :@PluginMethodclasses, permis et appels de callback d'activité- Classes qui étendent
com.getcapacitor.Plugin - Legacy
@NativePluginet classes de plugins Cordova
Restez sur une ligne actuelle Capacitor 6/7/8 afin que les 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 ** { *; }
Si un plugin tiers continue à planter après une règle de maintien ciblée, mettez à jour le plugin, puis envisagez une alternative maintenue. Capgo répertoire des plugins, ou demandez à Consultation Capgo de le corriger.
Notes officielles Capacitor : Utilisation de ProGuard.
Étape 4 — Créez un bundle de mise en production réel
APKs de débogage afficheront toujours ~0% d'obfuscation. Play ne note que ce que vous téléchargez.
À partir de la racine du projet :
npm run build
npx cap sync android
cd android
./gradlew bundleRelease
Sans une release signingConfig, ces tâches réussissent toujours mais émettent un fichier non signé .aabSignez-le dans Android Studio avant l'upload sur Play.
Installer un sur un appareil ( sur un appareil ("./gradlew assembleRelease, puis l'APK sous app/build/outputs/apk/release/. An .aab C'est un format de téléchargement Play, pas quelque chose que vous chargez localement. Exercer les plugins natifs (caméra, push, fichier, facturation, authentification). Les bugs R8 ne s'affichent pas dans npx cap run android sessions de débogage.
), confirmez que R8 a bien fonctionné : android/), confirmez que R8 s'est effectivement exécuté :
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
Those release Les dossiers sont la variante par défaut Capacitor. Avec les saveurs de produit, la correspondance se trouve sous le nom de la variante.mapping/freeRelease/L'APK est sous apk/<flavor>/release/ par exemple apk/free/release/).
If mapping.txt is manquant, vous êtes dans le dossier de variante incorrect, CI assemblé debugou R8 a été exécuté avec -dontobfuscate. Recheck 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 de Play :
- pour chaque version Play : Test et lancement → Explorateur de bundle d'application → 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 en tant que partie de CI.
Android Studio / AGP inclut souvent la carte dans le .aab. Vérifiez toujours la case "Assets" après la première mise à jour optimisée.
Étape 6 — Téléchargez et réexaminez Play
Téléchargez le nouveau .aab à un track de test interne (la production n'est pas requise pour rafraîchir le score). Ouvrir :
- Test et publication → Explorateur de bundle d'application pour cette version
- Taille du fichier DEX plus pourcentage d'obfuscation / d'optimisation / de réduction.
- Surveillez et améliorez → Vitals Android après la nouvelle version c'est celle que Play analyse
Vous devez 25% sur chacune des trois indicateurs, ce n'est pas seulement l'obfuscation. L'activation de R8 avec proguard-android-optimize.txt généralement, un Capacitor app saute d'une obfuscation à un chiffre à plus de 25% dans tous les cas.
Play only oblige the 25% floor when DEX is over 10 MB for apps (50 MB for games). Even below that floor, fixing it is still worth doing: smaller DEX, less memory, faster startup.
Si vous êtes toujours sous 25%
R8 est activé, mais Play (ou l'analyseur local) affiche toujours un score faible. Les règles de maintien large sont les résidus habituels.
- Open Analyseur de configuration R8 si votre plugin Gradle Android est 9.3 ou ultérieur —
assembleReleaseécrit ensuiteconfiganalyzer.htmlà côté demapping.txt. Sur AGP 9.2 et versions antérieures, ignorez ce fichier HTML et utilisezmapping.txt, l'analyseur APK, et l'explorateur de bundles d'applications Play à la place. - Sort keep rules by how much of the app they freeze. Library consumer rules you cannot edit are normal. App-level
-keep class com.foo.** { *; }Ouvrez le - Ouvrez
.aabfichiers, et activez/désactivez les noms déobfusqués (nécessite.dexfichiers, et basculer les noms déobfusqués (besoin)mapping.txtLes packages qui restent volumineux et lisibles sont ceux à arrêter de conserver entièrement. - Mettez à jour les plugins qui référencent toujours
proguard-android.txtCet fichier bloque l'optimisation sur AGP 9 et constitue un signal d'alerte dans les anciens plugins.
Ne pas "corriger" un score bas en réduisant le DEX avec minifyEnabled false et espère que les heuristiques changent. Play veut réduire, optimiser, et l'obfuscation.
Ce que cela ne remplace pas
- La minification du JavaScript en
vite.config.tsce qui ne déplace pas ce métrique. - Capgo mises à jour en direct envoyer HTML/JS/CSS. Ils ne reconstruisent pas DEX. Après R8 est activé dans le binaire de magasin, vous pouvez toujours envoyer des correctifs JS en ligne. La vérification d'obfuscation elle-même nécessite une mise à niveau native Play.
- 16 KB de taille de page est un exigence native Play distincte. Voir La taille de page Android 16 KB.
Si vous avez déjà construit Android avec Capgo Buildchangements android/app/build.gradle dans le dépôt. La prochaine construction cloud récupère R8. Vous n'avez pas besoin d'une pipeline Play différente, seulement un binaire de sortie produit avec la minification activée. Même idée si vous maintenez GitHub Actions Android builds : le workflow doit assembler releasepas de débogage.
FAQ
Permettra-t-il d'activer R8 de casser mes Capacitor plugins ?
Cela peut arriver si un plugin utilise la réflexion et n'expédie pas de règles de conservation de consommateur. Le noyau Capacitor conserve déjà les classes de plugin. Testez une construction de sortie. Ajoutez un narrow garder la règle que seulement pour le paquet qui s'effondre. Si le plugin n'est pas maintenu, Capgo Conseil peut prendre en charge et le garder en construction.
Est-ce que npx cap run prouve que j'ai passé la vérification ?
No. That command uses a debug build with R8 off. Use bundleRelease / une mise en ligne signée de 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 masse. -keep Confirmez que CI a téléchargé le minifié AAB, et non un artefact ancien.
Faut-il ProGuard au lieu de R8 ?
Non. R8 est le compresseur du plugin Gradle Android. Il lit les fichiers de règles ProGuard. Les documents de Google Play autorisent n'importe quel compresseur ; R8 est celui que les applications Capacitor devraient utiliser.
Checklist
-
release { minifyEnabled true; shrinkResources true } -
proguard-android-optimize.txt(pasproguard-android.txt) - Non
-dontobfuscate/-dontoptimize/ app-wide-keep class ** - Capacitor 3.2.3+ les règles s'appliquent au consommateur du plugin
- La mise en production produit
mapping.txt - Plugins natifs testés sur une installation de production
- Nouveau
.aabuploaded; mapping attached in App bundle explorer - L'obfuscation, l'optimisation et la compression chacun à 25 %+
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.
Continuez à partir de Fixer l'obfuscation Google Play en dessous de 25% dans les applications Capacitor
Si vous utilisez Fixer l'obfuscation Google Play en dessous de 25% dans les applications Capacitor pour planifier les lancements de magasin Android, connectez-l’avec Capgo Builds natifs pour les lots de lancement d'applications Capgo CI/CD pour la pipeline d'upload, Intégration CI/CD pour les détails d'implémentation Automatic Capacitor Android build with GitHub actions pour les pipelines auto-hébergés, et Consultation Capgo si un plugin se brise après l'activation de R8.