El Console de Play ahora está señalando aplicaciones Android de Capacitor La optimización de la aplicación está por debajo de nuestro umbrala menudo con Obfuscatión se ha mantenido 3%. Google quiere al menos 25% obfuscatión, optimización y achicamiento La aplicación de la norma comienza en febrero de 2027y fallar puede reducir la visibilidad y las opciones de publicación.
La advertencia se ve así en Android vitales:

Se trata de 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. Lo solucionas en la compilación de liberación de Android Gradle, luego subes una nueva App Bundle.
¿Qué está midiendo Google?
Google Play inspecciona el DEX en su App Bundle de Android: Java y Kotlin compilados, incluyendo Capacitor, plugins y AndroidX. A partir de febrero de 2027, las aplicaciones con más de 10 MB de DEX deben cumplir con 25% en todos los tres:
| Metrico | ¿Qué significa | La causa típica de un Capacitor puntaje bajo |
|---|---|---|
| Ocultación | Los nombres de clase, campo y método se renombran a nombres cortos | minifyEnabled todavía es false |
| Optimización | R8 inyecta, combina y reescribe el bytecode | Predeterminado proguard-android.txt incluye -dontoptimize |
| Encogimiento | Clases y métodos no utilizados eliminados | La compresión de recursos/code nunca está habilitada |
Lee r8.json Play cuando construye con la última actualización del plugin de Gradle de Android 8.10 o superior. De lo contrario, utiliza mapping.txtheurísticas de DEX. Una aplicación Capacitor enviada con la minificación desactivada tiene casi ningún archivo de mapeo, por lo que Play ve nombres legibles y informa un poco de obfuscación (a menudo de bibliotecas AAR ya obuscadas). Eso coincide con 3% un puntaje de vitales.
Política oficial: Requisitos de calidad técnicos del Console de PlayDetalles de implementación: optimización de DEX code y habilitar la optimización de la aplicación con R8.
Why Capacitor aplicaciones fallan esta verificación
El Capacitor plantilla de Android todavía envía 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 hacerlo, si se publican en Play.
Su código 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 de R8 cuentan.
Paso 1 — Enciende R8 para el lanzamiento
Abre android/app/build.gradle (Groovy es el Capacitor predeterminado) y cambia la compilación de lanzamiento block:
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
Si el módulo utiliza Kotlin DSL (build.gradle.kts):
buildTypes {
getByName("release") {
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
Tres detalles son importantes:
minifyEnabled truees lo que realmente ejecuta R8 (reducir + obfuscar + optimizar).shrinkResources trueelimina recursos Android innecesarios. Requiere minimización.- Para esta configuración de R8, utilice
proguard-android-optimize.txt.proguard-android.txtenvía-dontoptimize, que bloquea las optimizaciones de R8 y falla AGP 9. Play permite cualquier compresor; aplicaciones Capacitor deben utilizar R8 con los valores de optimización predeterminados. Consulte Plugin AGP 9 Build Error Fix Capacitor si un plugin sigue haciendo referencia al archivo antiguo.
No establezca minifyEnabled true en debug. Mantén local ejecuciones rápidas y trazas de pila legibles.
Paso 2 — No deshabilites el modo completo de R8
Abrir android/gradle.properties y elimina esta línea si existe:
android.enableR8.fullMode=false
AGP 8+ ya habilita el modo completo. Dejar esa bandera en su lugar limita la optimización.
También busca android/app/proguard-rules.pro (y cualquier archivo adicional) -include por:
-dontobfuscate
-dontoptimize
-dontshrink
-keep class ** { *; }
Esa regla mantendrá las puntuaciones de Play bajas incluso después de que cambies a minifyEnabledElimínalas a menos que tengas una razón documentada y temporal.
Paso 3 — Mantén los plugins Capacitor, 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 - Legacy
@NativePluginy clases de plugins de Cordova
Mantén una línea actual de Capacitor 6/7/8 para que se apliquen esas reglas de consumidores.
Agrega reglas adicionales en android/app/proguard-rules.pro solo solo para un error que puedes 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 causando errores después de una regla de mantener específica, actualiza el plugin, luego considera una alternativa mantenida desde el directorio de plugins __CAPGO_KEEP_0__ o pide ayuda a Capgo Consultingpara parchearlo. Notas oficiales de Capgo: Usando ProGuard
Official Capacitor notes: Los APKs de depuración seguirán mostrando ~0% de obfuscación. Solo Play califica lo que subes..
Desde la raíz del proyecto:
Debug APKs will still show ~0% obfuscation. Play only grades what you upload.
From the project root:
npm run build
npx cap sync android
cd android
./gradlew bundleRelease
Sin una release configuración de firma, estas tareas siguen siendo exitosas pero emiten un archivo sin firmar .aab. Fírmelo en Android Studio antes de la carga en Play.
Instale un APK de lanzamiento en un dispositivo (./gradlew assembleRelease, luego el APK bajo app/build/outputs/apk/release/). Un .aab es un formato de carga en Play, no algo que se sideload. Ejercite plugins nativos (cámara, empuje, archivo, facturación, autenticación). Los errores de R8 no se muestran en sesiones de depuración. npx cap run android Después de los comandos Gradle anteriores (está en
), confirme que R8 se ejecutó realmente: android/), confirm R8 actually ran:
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 de la Aplicación Bundle
Ese release folders are the default Capacitor variant. With product flavors, mapping is under the variant name (mapping/freeRelease/carpetas son la variante predeterminada __CAPGO_KEEP_0__. Con sabores de producto, la correspondencia está bajo el nombre de la variante ( apk/<flavor>/release/ El APK está bajo apk/free/release/).
por ejemplo mapping.txt Si debugfalta, estás en la carpeta de variante equivocada, CI ensamblado -dontobfuscateo R8 ejecutado con minifyEnabled true Revisa release en
Paso 5 — Mantenga los informes de errores legibles
Las trazas de pila obfuscadas son inútiles sin el archivo de mapa. Mantenga mapping.txt para cada versión de Play:
- Consola de Play: Prueba y publica → Explorador de paquetes de aplicación → Descargas → Recursos, luego suba
mapping.txtsi no está ya adjunto. - Firebase Crashlytics / Sentry: suba el mismo mapa como parte de CI.
Android Studio / AGP a menudo incorpora el mapa en el .aab. Verifique la pestaña Recursos después de la primera subida optimizada.
Paso 6 — Suba y vuelva a verificar Play
Suba el nuevo .aab a un seguimiento de pruebas internas (no se requiere producción para refrescar la puntuación). Abrir:
- Prueba y publica → 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 y mejorar → Vitales de Android después de la nueva versión es la que Play analiza
Necesitas 25% en cada una de los tres indicadores, no solo la obfuscación. Habilitar R8 con proguard-android-optimize.txt normalmente salta una aplicación Capacitor de la obfuscación de un dígito a bien por encima del 25% en todos los tres.
solo aplica el 25% de piso cuando DEX es superior a 10 MB para aplicaciones (50 MB para juegos). Incluso por debajo de ese piso, corregirlo todavía vale la pena: DEX más pequeño, menos memoria, inicio más rápido.
Si todavía está por debajo del 25%
R8 está activo, pero Play (o el analizador local) muestra una puntuación débil. Las reglas de mantenimiento amplias son las usuales sobrantes.
- Abrir 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.txtAPK Analyzer, y explorador de paquetes de Play en lugar de eso. - Ordenar reglas de mantenimiento por cuánto congelan la aplicación. Las reglas de consumidor de bibliotecas que no se pueden editar son normales. La de nivel de aplicación
-keep class com.foo.** { *; }no lo es. - Abra el
.aaben el analizador de APK de Android Studio, seleccione los archivos grandes.dexy active los nombres desobfuscados (necesitamapping.txtPaquetes que siguen siendo enormes y legibles son los paquetes que deben eliminarse por completo. - Actualice los plugins que aún refieren
proguard-android.txtEste archivo bloquea la optimización en AGP 9 y es un indicador rojo en plugins más antiguos.
No ‘mejore’ una puntuación baja reduciendo DEX con minifyEnabled false y esperando que cambien las heurísticas. Play quiere reducir, optimizar y y contexto: Página/área: sitio web de marketing de Capgo. Rol: Etiqueta de interfaz de usuario corta o elemento de navegación. Visto en: página trust.astro. Clave de mensaje `and` (Y).
obfuscación.
- No reemplaza esto con la minificación de JavaScript. en
vite.config.tsno se mueve este métrica. - Capgo actualizaciones en vivo envían HTML/JS/CSS. No vuelven a construir 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 en sí misma necesita una carga nativa de Play.
- tamaño de página de 16 KB es un requisito nativo de Play separado. Consulte tamaño de página de Android 16 KB.
Si ya construyes Android con Capgo Construir, cambia android/app/build.gradle en el repositorio. La próxima nube construye R8. No necesita una canalización de Play diferente, solo un binario de liberación producido con minificación habilitada. La misma idea si mantiene GitHub Acciones construye Androiddebe ensamblar lanzamientono depuración.
FAQ
¿Habilitar R8 romperá mis Capacitor plugins?
Puede hacerlo, si un complemento utiliza reflexión y no envía reglas de conservación para el consumidor. El núcleo Capacitor ya conserva las clases de complemento. Pruebe un lanzamiento. Agregue una regla de conservación solo para el paquete que se cae. Si el complemento no se mantiene, Capacitor Consulting puede forkearlo y mantenerlo en funcionamiento. ¿Probar si pasé la comprobación? necesario Capgo Consulting Consultoría __CAPGO_KEEP_0__
necesario npx cap run necesario
No. Ese comando utiliza una compilación de depuración con R8 desactivado. Utilice bundleRelease / una carga de Play firmada.
Ya hemos configurado minifyEnabled true y todavía vemos 3%. ¿Por qué?
Busque por -dontobfuscate, proguard-android.txt, android.enableR8.fullMode=false, y reglas de manto. -keep Confirmar que CI subió el AAB minimizado, no un antiguo artefacto.
¿Necesitamos ProGuard en lugar de R8?
No. R8 es el compresor de Gradle de Android. Lee archivos de reglas de estilo ProGuard. Los documentos de Play de Google permiten cualquier compresor; R8 es el que las aplicaciones Capacitor deben utilizar.
Lista de verificación
-
release { minifyEnabled true; shrinkResources true } -
proguard-android-optimize.txt(noproguard-android.txt) - No
-dontobfuscate/-dontoptimize/ aplicación global-keep class ** - Capacitor 3.2.3+ por lo tanto las reglas del consumidor de plugin se aplican
- La compilación de lanzamiento produce
mapping.txt - Los plugins nativos se han probado en una instalación de lanzamiento
- Nueva
.aabcontexto: Página/área: Página de producto de actualizaciones en vivo. Rol: Etiqueta de IU corta o elemento de navegación. Clave de mensaje `live_update_lts_electron_new` (Nueva actualización en vivo Lts Electron). - Subido; la asignación se adjunta en el explorador de paquetes de la aplicación
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.
Es todo el aviso del Console de Play: Capacitor dejó R8 fuera, Play comenzó a calificar DEX, y un cambio de Gradle de una línea de lanzamiento más una carga en la tienda es la solución.
Sigue adelante desde Arreglar la obstrucción de Google Play por debajo del 25% en aplicaciones __CAPGO_KEEP_0__ Fix Google Play Obfuscation Below 25% in Capacitor Apps Arreglar la obstrucción de Google Play por debajo del 25% en aplicaciones __CAPGO_KEEP_0__ para planificar lanzamientos de aplicaciones en la tienda Android, conecta con Capgo Compilaciones nativas para paquetes de aplicaciones de lanzamiento, Capgo Integración CI/CD para el pipeline de carga, Integración CI/CD contexto: Página/área: Capgo Builder / producto de compilación nativa en la nube. Rol: Etiqueta de UI corta o elemento de navegación. Clave de mensaje `native_build_feature_ci_cd` (Característica de compilación nativa Ci Cd). Automatic Capacitor Android build with GitHub actions Compilación automática de Android con __CAPGO_KEEP_1__ acciones Capgo Consulting __CAPGO_KEEP_0__ Consultoría