Saltar al contenido principal
Desarrollo Android Google Play

Corrija la obfuscación de Google Play en menos del 25% en aplicaciones Capacitor.

Pase la comprobación de obfuscación del 25% de Google Play en una aplicación de Android Capacitor habilitando R8, reduciendo el DEX innecesario y enviando un paquete de App Bundle de lanzamiento.

Créditos del artículo

Martin Donadieu

Escritor

Valeria

Revisor

Jordan

Editor

Corrija la obfuscación de Google Play en menos del 25% en aplicaciones Capacitor.

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:

Google Play Console Android vitales advertencia mostrando obfuscación al 3 por ciento, por debajo del umbral de optimización de la aplicación del 25 por ciento, con una fecha de corrección de febrero de 2027.

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.

  1. minifyEnabled true elimina recursos Android no utilizados. Requiere minimización.
  2. shrinkResources true elimina recursos Android no utilizados. Requiere minimización.
  3. Para esta configuración de R8, utilice proguard-android-optimize.txt. proguard-android.txt ships -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:

  • @CapacitorPlugin clases, @PluginMethodllamadas a permisos y actividades
  • Clases que extienden com.getcapacitor.Plugin
  • Legado @NativePlugin y 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.txt
  • app/build/outputs/mapping/release/configuration.txt
  • En la última actualización de AGP 8.10 o superior, r8.json dentro 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.txt si 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).

  1. Test y lanzar → Explorador de paquetes de la aplicación para esa versión
  2. tamaño del archivo DEX más porcentajes de obfuscación / optimización / reducción
  3. 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.

  1. Abre Analizador de configuración de R8 si su plugin de Gradle Android es 9.3 o posterior — assembleRelease entonces escribe configanalyzer.html al lado de mapping.txt. En AGP 9.2 y versiones anteriores, omita ese archivo HTML y utilice mapping.txten lugar de APK Analyzer, y explorador de bundles de la App de Play.
  2. 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.
  3. Abra el .aab in Android Studio APK Analyzer, select the large .dex y active los nombres desobfuscados (necesita mapping.txtLos paquetes que siguen grandes y legibles son los que hay que dejar de mantener de manera general.
  4. 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.ts no 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.txt No proguard-android.txt)
  • (no -dontobfuscate / -dontoptimize No -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 .aab subido; 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.

Actualizaciones instantáneas para aplicaciones Capacitor

Cuando haya un bug en la capa web, envíe la corrección a través de Capgo en lugar de esperar días a la aprobación de la tienda. Los usuarios obtienen la actualización en segundo plano mientras que los cambios nativos siguen en el camino de revisión normal.

Últimas noticias de nuestro Blog

Capgo te brinda las mejores perspectivas que necesitas para crear una aplicación móvil verdaderamente profesional.