El Console de Play ahora está marcando las aplicaciones de Android Capacitor App optimization is below our threshold, a menudo con Ocultación se ha quedado 3%. Google quiere al menos 25% ocultación, optimización y reducción de tamaño. Febrero 2027y, y fallando puede reducir la visibilidad y las opciones de publicación.
La advertencia se ve así en Android vitales:

Este es un problema nativo de DEX de Android. No se trata de su paquete de Vue, React o Angular. Capgo actualizaciones en vivo también no cambian esta puntuación. Corrige esto en la compilación de liberación de Android Gradle, luego sube un nuevo Bundle de Aplicación.
¿Qué está midiendo Google
Google Play inspecciona el DEX en tu Android App Bundle: Java y Kotlin compilados, incluyendo Capacitor, plugins y AndroidX. A partir de febrero 2027, las aplicaciones con más de 10 MB deben cumplir con 25% en todos los tres:
| Métrica | ¿Qué significa? | Causa típica Capacitor de una puntuación baja |
|---|---|---|
| Obligación | Los nombres de clases, campos y métodos se renombran a nombres cortos | minifyEnabled aún así false |
| Optimización | R8 inlines, merges, y reescribe el bytecode | Predeterminado proguard-android.txt incluye -dontoptimize |
| Reducción | Se eliminan clases y métodos no utilizados | La reducción de recursos/code nunca está activada |
Play lee r8.json cuando construyas con la última actualización del plugin de Android Gradle 8.10 o superior. De lo contrario, utiliza mapping.txt, then DEX heuristics. A Capacitor app shipped with minification off has almost no mapping file, so Play sees readable names and reports a few percent obfuscation (often leftover from already-obfuscated library AARs). That matches a 3% Política oficial:
Optimización Requisitos técnicos de calidad de Play Console. Detalle de implementación: optimización del DEX code y habilitar la optimización de la aplicación con R8.
Why Capacitor apps fail this check
La plantilla de Android Capacitor sigue enviando compilaciones de lanzamiento sin R8:
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
Es el valor predeterminado en android-template/app/build.gradle. Las compilaciones de depuración deben mantenerse así. Las compilaciones de lanzamiento no deben, si se publica en Play.
Su JavaScript ya está minimizado por Vite o webpack. Play no cuenta eso. Solo los nombres nativos DEX, los code nativos no utilizados y las optimizaciones R8 cuentan.
Step 1 — Activa R8 para la versión de lanzamiento
Abre android/app/build.gradle (Groovy es el Capacitor predeterminado) y cambia la release block:
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
Tres detalles son importantes:build.gradle.kts):
buildTypes {
getByName("release") {
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
Tres detalles importan.
minifyEnabled trueelimina recursos Android no utilizados. Requiere minimización.shrinkResources trueelimina recursos Android no utilizados. Requiere minimización.- Para esta configuración de R8, utilice
proguard-android-optimize.txt.proguard-android.txtships-dontoptimizeElige R8 con los ajustes de optimización predeterminados, ya que Play permite cualquier compresor; los aplicaciones Capacitor deben usar R8. Error de construcción de Plugin AGP 9 de Capacitor si un plugin sigue haciendo referencia al archivo antiguo.
No configure minifyEnabled true en debugMantiene local las ejecuciones de lanzamiento rápido y los mensajes de error legibles.
Paso 2 — No deshabilite el modo completo de R8
Open android/gradle.properties y elimine esta línea si existe:
android.enableR8.fullMode=false
AGP 8+ ya habilita el modo completo. Dejar ese flag en su lugar limita la optimización.
Buscar también android/app/proguard-rules.pro También busque -include archivos) para:
-dontobfuscate
-dontoptimize
-dontshrink
-keep class ** { *; }
Esas reglas mantendrán bajos los puntajes de Play incluso después de que cambies. minifyEnabledBórralas a menos que tengas una razón documentada y temporal.
Paso 3 — Mantén los Capacitor plugins, no la aplicación completa
R8 utiliza metadatos de reflexión. Los plugins Capacitor se descubren mediante anotaciones, por lo que necesitan reglas de mantenimiento. Normalmente no los agregas tú mismo. Desde Capacitor 3.2.3, @capacitor/android envía reglas de ProGuard para consumidores que mantienen:
@CapacitorPluginclases,@PluginMethodllamadas a permisos y actividades- Clases que extienden
com.getcapacitor.Plugin - Legado
@NativePluginy clases de plugins de Cordova
Manténgase en una línea actual Capacitor 6/7/8 para que se apliquen las reglas de los consumidores.
Agregar reglas adicionales en android/app/proguard-rules.pro solamente para un error que puedas reproducir en una compilación de lanzamiento. La estrecha supera a la ancha:
# 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 de terceros sigue congelándose después de una regla de mantenimiento específica, actualice el plugin y considere una alternativa mantenida desde. Capgo directorio de plugins, o pide a Capgo Consultoría para parchearlo.
Anuncios oficiales Capacitor: Usando ProGuard.
Paso 4 — Construye un paquete de lanzamiento real
Los APKs de depuración seguirán mostrando ~0% de obfuscación. Solo Play evalúa lo que subes.
Desde la raíz del proyecto:
npm run build
npx cap sync android
cd android
./gradlew bundleRelease
Sin una release signingConfig, estos tareas aún tienen éxito pero emiten una versión no firmada .aabAsígnelo en Android Studio antes de subir a Play.
Instale un en un dispositivo ( entonces el APK bajo./gradlew assembleRelease, luego el APK subyacente app/build/outputs/apk/release/. An .aab Es un formato de carga de Play, no algo que se sideload. Ejercita plugins nativos (cámara, empuje, archivo, facturación, autenticación). npx cap run android sesiones de depuración.
Confirmar si R8 se ejecutó realmente: android/), confirme que R8 se ejecutó efectivamente:
app/build/outputs/mapping/release/mapping.txtapp/build/outputs/mapping/release/configuration.txt- En la última actualización de AGP 8.10 o superior,
r8.jsondentro del Bundle de la Aplicación
Those release carpetas son la variante predeterminada Capacitor. Con sabores de producto, la correspondencia está bajo el nombre de la variante ("mapping/freeRelease/La APK está bajo apk/<flavor>/release/ por ejemplo apk/free/release/).
If mapping.txt está faltando, se encuentra en el folder de variantes incorrecto, CI ensamblado debug, o R8 se ejecutó con -dontobfuscate. Revisar minifyEnabled true en release y que las reglas de mantenimiento no deshabiliten la obfuscación.
Step 5 — Mantenga los informes de errores legibles
Sin el mapa de mapeo, las trazas de pila obfuscadas son inútiles. Mantenga mapping.txt para cada versión de Play:
- para cada versión de Play: Prueba y publica → Explorador de paquetes de la aplicación → Descargas → Recursos, luego subir
mapping.txtsi no está ya adjuntado - Firebase Crashlytics / Sentry: subir la misma mapeación como parte de CI.
Android Studio / AGP a menudo incorpora la mapeación en el .aab. Verificar aún la pestaña Activos después de la primera subida optimizada.
Step 6 — Subir y re-verificar Play
Subir la nueva .aab a un canal de pruebas interno (no es necesario refrescar la puntuación en producción).
- Test y lanzar → Explorador de paquetes de la aplicación para esa versión
- tamaño del archivo DEX más porcentajes de obfuscación / optimización / reducción
- Monitorear e mejorar → Vitales de Android después de la nueva versión es la que Play analiza
necesita 25% en cada una de las tres métricas, no solo la obfuscación. Al habilitar R8 con proguard-android-optimize.txt normalmente salta una aplicación Capacitor de la obfuscación de un solo dígito a más de un 25% en todos los tres.
Juega solo exige el piso del 25% cuando el DEX supera los 10 MB para aplicaciones (50 MB para juegos). Incluso por debajo de ese piso, corregirlo sigue siendo útil: DEX más pequeño, menos memoria, inicio más rápido.
Si aún está por debajo del 25%
R8 está activo, pero Google Play (o el analizador local) muestra una puntuación débil. Las reglas de keep amplias son el resto habitual.
- Abre Analizador de configuración de R8 si su plugin de Gradle Android es 9.3 o posterior —
assembleReleaseentonces escribeconfiganalyzer.htmlal lado demapping.txt. En AGP 9.2 y versiones anteriores, omita ese archivo HTML y utilicemapping.txten lugar de APK Analyzer, y explorador de bundles de la App de Play. - 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.** { *; }no lo es. - Abra el
.aabin Android Studio APK Analyzer, select the large.dexy active los nombres desobfuscados (necesitamapping.txtLos paquetes que siguen grandes y legibles son los que hay que dejar de mantener de manera general. - Actualice los plugins que aún refieren a
proguard-android.txtEste archivo bloquea la optimización en AGP 9 y es un indicador rojo en plugins antiguos.
No 'solucione' una puntuación baja reduciendo DEX con minifyEnabled false y esperando que cambien las heurísticas. Play quiere reducir, optimizar, y obfuscación.
¿Qué esto no reemplaza
- minificación de JavaScript en
vite.config.tsno mueve esta métrica. - Capgo actualizaciones en vivo envían HTML/JS/CSS. No reconstruyen DEX. Después de que R8 esté habilitado en el binario de la tienda, todavía se pueden enviar correcciones de JS por aire. La comprobación de obfuscación misma necesita una carga nativa de Play.
- 16 KB de tamaño de página es un requisito nativo de Play separado. Consulte Android 16 KB de tamaño de página.
If ya construyes Android con Capgo Construye, change android/app/build.gradle in the repo. The next cloud build picks up R8. You do not need a different Play pipeline, only a release binary produced with minification on. Same idea if you keep Acciones GitHub Construcción de Android__CAPGO_KEEP_0__ Acciones compilaciones Android releaseliberación
FAQ
¿Habilitar R8 romperá mis Capacitor plugins?
It can, if a plugin uses reflection and ships no consumer keep rules. Core Capacitor already keeps plugin classes. Test a release build. Add a narrow mantén la regla solo para el paquete que se ha caído. Si el plugin no se mantiene, Capgo Consultoría puedes forkearlo y mantenerlo en funcionamiento.
¿ npx cap run ¿He pasado la verificación?
No. That command uses a debug build with R8 off. Use bundleRelease / una carga de Play firmada.
Hemos establecido minifyEnabled true y todavía vemos 3%. ¿Por qué?
Busca -dontobfuscate, proguard-android.txt, android.enableR8.fullMode=false, y reglas de -keep confirmar que la CI ha subido el AAB minimizado, no un antiguo artefacto.
¿Necesitamos ProGuard en lugar de R8?
No. R8 es el compresor de Gradle Android. Lee archivos de reglas de estilo ProGuard. Los documentos de Play de Google permiten cualquier compresor; R8 es el que los aplicaciones Capacitor deben usar.
Checklist
-
release { minifyEnabled true; shrinkResources true } -
proguard-android-optimize.txtNoproguard-android.txt) - (no
-dontobfuscate/-dontoptimizeNo-keep class ** - Capacitor 3.2.3+ se aplican las reglas para consumidores de plugins
- Release build produce
mapping.txt - La compilación de lanzamiento produce
- New
.aabsubido; mapa adjuntado en explorador de paquetes de la aplicación - Ocultación, optimización y reducción cada una al 25%+
Eso es todo el aviso del Console de Play: Capacitor dejó R8 apagado, Play comenzó a calificar DEX, y un cambio de Gradle de una sola línea más una carga en la tienda es la solución.
Sigue adelante desde Arreglar la Obfuscatión de Google Play Menos del 25% en Capacitor Aplicaciones
Si estás utilizando Arreglar la Obfuscatión de Google Play Menos del 25% en Capacitor Aplicaciones to plan Android store releases, connect it with Capgo Compilaciones Nativas para paquetes de aplicaciones de lanzamiento, Capgo CI/CD para el pipeline de carga, Integración CI/CD para detalles de implementación Automatic Capacitor Android build with GitHub actions para flujos de trabajo autogestionados, y Capgo Consultoría si un plugin se rompe después de habilitar R8.