Zum Hauptinhalt springen

Fixen Sie die Google Play-Verwischung unter 25% in Capacitor-Apps

Passen Sie die 25%-Verwischungsprüfung von Google Play in einer Capacitor-Android-App ab, indem Sie R8 aktivieren, ungenutzte DEX minimieren und ein Release-App-Bundle bereitstellen.

Artikelcredits

Martin Donadieu

Schreiber

Valeria

Rezensent

Jordan

Editor

Fixen Sie Google Play-Verwischung unter 25% in Capacitor-Apps

Der Play-Console meldet nun Capacitor-Android-Anwendungen für Die Anwendungsoptimierung liegt unter unserem Schwellenwert, oft mit Verwischung ist seit längerem 3%. Google möchte mindestens 25% Verwischung, Optimierung und Komprimierung. Die Durchsetzung beginnt im Februar 2027, und das Versagen kann die Sichtbarkeit und die Veröffentlichungsoptionen beeinträchtigen.

Die Warnung sieht in Android-Vitals so aus:

Google Play Console Android vitals Warnung zeigt eine Verschlüsselung bei 3 Prozent, unterhalb der 25-Prozent-Grenze für die App-Optimierung, mit einem Korrekturtermin im Februar 2027

Dies ist ein natives Android DEX-Problem. Es geht nicht um Ihre Vue-, React- oder Angular-Bundle. Capgo Lebendliche Updates ändern auch nichts an diesem Wert. Sie korrigieren es in der Android Gradle Release-Build, dann laden Sie ein neues App Bundle hoch.

Was Google misst

Google Play überprüft das DEX im Android App Bundle: kompilierte Java- und Kotlin-Code, einschließlich Capacitor, Plugins und AndroidX. Ab Februar 2027 müssen Apps mit mehr als 10 MB von DEX auf allen drei Punkten treffen 25% Wert

Messwert Was bedeutet es Typischer Capacitor Grund für eine niedrige Bewertung
Verschlüsselung Klassen-, Feld- und Methodennamen werden in kurze Namen umbenannt minifyEnabled ist immer noch false
Optimierung R8 faltet, kombiniert und überarbeitet Bytecode Standard proguard-android.txt enthält -dontoptimize
Verkleinerung Unbenutzte Klassen und Methoden werden entfernt Ressourcen-code-Verkleinerung wird nie aktiviert

Play liest r8.json wenn Sie mit dem neuesten Patch von Android Gradle Plugin 8.10 oder höher bauen. Ansonsten verwendet es mapping.txt, dann DEX-Heuristik. Ein Capacitor-App, der mit der Minifizierung ausgeschaltet ist, hat fast keinen Mapping-File, also sieht Play lesbare Namen und meldet ein paar Prozent Verschlüsselung (oft übrig geblieben von bereits verschlüsselten Bibliothek-AARs). Das entspricht einem 3% vitals-Score.

Offizielle Richtlinie: Google Play Console technische Qualitätsanforderungen. Implementierungsdetails: DEX- code-Optimierung und erlauben Sie die App-Optimierung mit R8.

Weshalb Capacitor-Apps diese Überprüfung nicht bestehen

Die Capacitor-Android-Vorlage liefert immer noch Release-Builds ohne R8:

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

Dies ist die Standard-Einstellung in android-template/app/build.gradle. Debug-Builds sollten so bleiben. Release-Builds sollten nicht, wenn Sie auf Play veröffentlichen.

Ihr JavaScript ist bereits durch Vite oder Webpack minimiert. Play zählt das nicht. Nur native DEX-Namen, nicht verwendete native code und R8-Optimierungen zählen.

Schritt 1 — R8 für Release aktivieren

Öffnen android/app/build.gradle (Groovy ist der Capacitor Standard) und ändern Sie die Release Block:

buildTypes {
    release {
        minifyEnabled true
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }
}

Wenn das Modul Kotlin DSL verwendet (build.gradle.kts):

buildTypes {
    getByName("release") {
        isMinifyEnabled = true
        isShrinkResources = true
        proguardFiles(
            getDefaultProguardFile("proguard-android-optimize.txt"),
            "proguard-rules.pro"
        )
    }
}

Drei Details sind wichtig:

  1. minifyEnabled true ist das, was tatsächlich R8 (verkleinern + verschleiern + optimieren) ausführt.
  2. shrinkResources true entfernt nicht benötigte Android-Ressourcen. Es erfordert Minifizierung.
  3. Für diese R8-Konfiguration verwenden Sie proguard-android-optimize.txt. proguard-android.txt versendet -dontoptimize, die R8-Optimierungen blockiert und AGP 9 fehlschlägt. Play erlaubt jeden Shrinker; Capacitor-Apps sollten R8 mit den optimierten Standards verwenden. Siehe Capacitor-Plugin-AGP-9-Build-Fehler-Fix Wenn ein Plugin noch auf die alte Datei verweist.

Setzen Sie nicht minifyEnabled true auf debug. Nur für die Veröffentlichung hält lokale Ausführungen schnell und Stapelspuren lesbar.

Schritt 2 — R8 Vollmodus nicht deaktivieren

Öffnen android/gradle.properties und entfernen Sie diese Zeile, wenn sie existiert:

android.enableR8.fullMode=false

AGP 8+ aktiviert bereits die volle Modus. Das Hinterlassen dieser Flagge begrenzt die Optimierung.

Auch suchen android/app/proguard-rules.pro (und alle zusätzlichen -include Dateien) nach:

-dontobfuscate
-dontoptimize
-dontshrink
-keep class ** { *; }

Diese Regeln halten die Play-Scores niedrig, selbst nachdem Sie die Schaltfläche umgekehrt haben. Löschen Sie sie, es sei denn, Sie haben einen dokumentierten, vorübergehenden Grund. minifyEnabledSchritt 3 — Halten Sie sich an __CAPGO_KEEP_0__-Plugins, nicht an der gesamten App

R8 verwendet Reflexionsmetadaten. Capacitor-Plugins werden durch Anmerkungen entdeckt, daher benötigen sie Regeln zum Halten.

R8 uses reflection metadata. Capacitor plugins are discovered by annotations, so they need keep rules. Seit __CAPGO_KEEP_0__ 3.2.3, Since Capacitor 3.2.3, @capacitor/android schicken Kunden-ProGuard-Regeln die Folgendes bewahren:

  • @CapacitorPlugin Klassen @PluginMethod, Berechtigungs- und Aktivitätsrückruf
  • Klassen, die sich auf com.getcapacitor.Plugin
  • Legacy @NativePlugin und Cordova-Plugin-Klassen

Verbleiben Sie auf der aktuellen Capacitor 6/7/8 Zeile, damit diese Kundenregeln angewendet werden.

Hinzufügen Sie zusätzliche Regeln in android/app/proguard-rules.pro nur um einen Crash zu reproduzieren, den Sie in einer Release-Build reproduzieren können. Breit ist nicht besser als schmal:

# Good: one misbehaving plugin package
-keep class com.mycompany.myplugin.** { *; }

# Bad: this will tank obfuscation and shrinking
-keep class com.getcapacitor.** { *; }
-keep class ** { *; }

Wenn ein dritter Partei-Plugin nach einer gezielten Keep-Regel immer noch abstürzt, aktualisieren Sie das Plugin, dann betrachten Sie ein von der Gemeinschaft unterstütztes Alternativ-Plugin aus dem Capgo Plugin-Verzeichnis, oder fragen Sie Capgo Consulting an, um es zu reparieren.

Official Capacitor notes: __CAPGO_KEEP_0__.

-Anmerkungen:

Mit ProGuard

Schritt 4 — Erstellen Sie ein echtes Release-Bundle

npm run build
npx cap sync android
cd android
./gradlew bundleRelease

Debug-APKs werden immer noch ~0% Verschlüsselung anzeigen. Play bewertet nur, was Sie hochladen. release Aus dem Projekt-Root-Verzeichnis: Ohne eine .aab. Sign it in Android Studio vor der Play-Upload.

Install ein release-APK auf einem Gerät (./gradlew assembleRelease, dann das APK unter app/build/outputs/apk/release/). Ein .aab ist ein Play-Upload-Format, kein etwas, das du sidestalst. Übe native Plugins (Kamera, Push, Datei, Abrechnung, Auth). R8-Bugs erscheinen nicht in npx cap run android Sitzungen.

Nach den Gradle-Befehlen oben (du bist in android/, bestätige, dass R8 tatsächlich ausgeführt wurde:

  • app/build/outputs/mapping/release/mapping.txt
  • app/build/outputs/mapping/release/configuration.txt
  • Auf der neuesten Patches von AGP 8.10 oder höher r8.json innerhalb des App-Bundles

Diese release folders are the default Capacitor variant. With product flavors, mapping is under the variant name (mapping/freeRelease/Variante. Mit Produktflavours ist die Zuordnung unter dem Variablennamen ( apk/<flavor>/release/ liegt unter (z.B. apk/free/release/).

Wenn mapping.txt fehlt, befinden Sie sich im falschen Variablendirectory, CI hat debuggebildet oder R8 wurde mit -dontobfuscateausgeführt. Überprüfen Sie minifyEnabled true und stellen Sie sicher, dass die Keep-Regeln die Verschlüsselung nicht deaktivieren. release Schritt 5 — Halten Sie Crashberichte lesbar

Verschlüsselte Stacktraces sind ohne die Zuordnungsdatei wertlos. Halten Sie

obfuscatio mapping.txt Für jede Play-Version:

  • Play-Console: Test und veröffentlichen → App-Bundle-Explorer → Downloads → Assets, dann hochladen mapping.txt Wenn es nicht bereits befestigt ist.
  • Firebase Crashlytics / Sentry: Hochladen Sie die gleiche Zuordnung als Teil der CI.

Android Studio / AGP befestigt oft die Zuordnung in der .aabÜberprüfen Sie den Assets-Tab nach dem ersten optimierten Upload nochmals.

Schritt 6 — Hochladen und erneut überprüfen Sie Play

Hochladen Sie das neue .aab zu einem internen Test-Track (eine Produktion ist nicht erforderlich, um den Score zu aktualisieren). Öffnen Sie:

  1. Test und veröffentlichen → App-Bundle-Explorer Für diese Version
  2. DEX-Größe plus Verschlüsselung / Optimierung / Komprimierung Prozent
  3. Überwachen und verbessern → Android-Vitals Nach der neuen Version analysiert Play

Sie benötigen 25% auf jedem von den drei Metriken, nicht nur Verschlüsselung. Die Aktivierung von R8 führt in der Regel ein __CAPGO_KEEP_0__-App von einer einstelligen Verschlüsselung auf über 25% auf allen drei. proguard-android-optimize.txt usually jumps a Capacitor app from single-digit obfuscation to well above 25% on all three.

den 25%-Boden, wenn DEX über 10 MB für Apps (50 MB für Spiele) ist. Selbst unter diesem Boden lohnt sich die Verbesserung: kleinerer DEX, weniger Speicher, schnellerer Start Wenn Sie noch unter 25% sind Sie benötigen 25% auf jedem von den drei Metriken, nicht nur Verschlüsselung. Die Aktivierung von R8 führt in der Regel ein __CAPGO_KEEP_0__-App von einer einstelligen Verschlüsselung auf über 25% auf allen drei.

Play setzt nur den 25%-Boden, wenn DEX über 10 MB für Apps (50 MB für Spiele) ist. Selbst unter diesem Boden lohnt sich die Verbesserung: kleinerer DEX, weniger Speicher, schnellerer Start.

R8 ist aktiv, aber Play (oder der lokale Analyzer) zeigt immer noch eine schwache Bewertung. Breite Keep-Regeln sind die üblichen Überbleibsel.

  1. Öffnen R8-Konfigurationsanalyzer Wenn Ihr Android-Gradle-Plugin 9.3 oder neuer ist — assembleRelease dann schreibt configanalyzer.html nächstens mapping.txt. Bei AGP 9.2 und früherer Versionen ignorieren Sie dieses HTML-File und verwenden Sie mapping.txt, APK-Analyser und Play’s App-Bundle-Explorer anstelle dessen.
  2. Sortieren Sie die Keep-Regeln nach der Menge des Apps, die sie einfrieren. Bibliothekskonsumenten-Regeln, die Sie nicht bearbeiten können, sind normal. App-level -keep class com.foo.** { *; } ist nicht.
  3. Öffnen Sie das .aab in Android Studio APK-Analyser, wählen Sie das große .dex Dateien und die Deobfuscation von Namen (bedarfsvollständig) mapping.txtPakete, die riesig und lesbar bleiben, sind die Pakete, die Sie nicht mehr weiterentwickeln sollten
  4. Aktualisieren Sie Plugins, die sich noch auf proguard-android.txtDieses Datei blockiert die Optimierung bei AGP 9 und ist ein roter Faden in älteren Plugins

Vermeiden Sie es, eine schlechte Bewertung durch DEX-Verkleinerung mit minifyEnabled false und die Hoffnung, dass die Heuristik sich ändert. Play möchte, dass Sie verkleinern, optimieren und und context

Seite/ Bereich: Capgo-Marketing-Website. Rolle: Kurzer UI-Label oder Navigationselement. Gesehen in: Seite trust.astro. Nachrichten Schlüssel `and` (Und).

  • Verschlüsselung Was dies nicht ersetzt vite.config.ts JavaScript-Minifizierung in
  • Capgo Live-Updates HTML/JS/CSS schicken. Sie müssen keine DEX neu erstellen. Nachdem R8 im Store-Binary aktiv ist, können Sie noch JS-Fixes über die Luft schicken. Die Verschlüsselungskontrolle benötigt jedoch eine native Play-Upload.
  • 16 KB-Seitengröße ist eine separate Play-native-Anforderung. Siehe Android 16 KB-Seitengröße.

Wenn Sie bereits Android mit Capgo Build, ändern Sie android/app/build.gradle im Repository. Die nächste Cloud-Build greift R8 auf. Sie benötigen keine andere Play-Pipeline, nur ein Release-Binary, das mit Minifizierung erstellt wurde. Das gleiche Konzept, wenn Sie GitHub Actions Android Builds: Die Workflow muss __CAPGO_KEEP_0__ release, nicht im Debug-Modus.

Häufig gestellte Fragen

Wird die Aktivierung von R8 meine Capacitor-Erweiterungen beschädigen?

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 Nur für das Paket, das abstürzt. Wenn die Erweiterung nicht mehr gepflegt wird, kann __CAPGO_KEEP_0__ Consulting sie forken und weiterhin aufbauen. Capgo Consulting Nein. Diese Anweisung verwendet einen Debug-Build mit R8 ausgeschaltet. Verwenden Sie stattdessen / eine signierte Play-Upload.

Nur für das Paket, das abstürzt. npx cap run Wenn die Erweiterung nicht mehr gepflegt wird, kann __CAPGO_KEEP_0__ Consulting sie forken und weiterhin aufbauen.

Beweist das, dass ich die Überprüfung bestanden habe? bundleRelease Nein. Diese Anweisung verwendet einen Debug-Build mit R8 ausgeschaltet. Verwenden Sie stattdessen / eine signierte Play-Upload.

We haben bereits gesetzt minifyEnabled true und sehen trotzdem 3%. Warum?

Suchen Sie nach -dontobfuscate, proguard-android.txt, android.enableR8.fullMode=false, und eine breite Palette von -keep Regeln. Bestätigen Sie, dass CI das minimierte AAB hochgeladen hat, nicht ein altes Artefakt.

Brauchen wir ProGuard anstelle von R8?

Nein. R8 ist der Android-Gradle-Plugin-Verkleinerer. Es liest ProGuard-Regeldateien. Die Google-Play-Dokumente erlauben jede Verkleinerung; R8 ist die, die Capacitor Apps verwenden sollten.

Checkliste

  • release { minifyEnabled true; shrinkResources true }
  • proguard-android-optimize.txt (nicht proguard-android.txt)
  • Nein -dontobfuscate / -dontoptimize / app-weit -keep class **
  • Capacitor 3.2.3+ so dass Plugin-Konsumenten-Regeln gelten
  • Release build erstellt mapping.txt
  • Native Plugins getestet auf einem Release-Install
  • Neu .aab Upload erfolgt; Mapping in App Bundle Explorer angehängt
  • Verschlüsselung, Optimierung und Komprimierung jeweils bei 25%+

Das ist die gesamte Play Console Warnung: Capacitor R8 ausgelassen, Play begann DEX zu bewerten, und eine einezeilige Release-Gradle-Änderung plus eine Store-Upload-Lösung ist die Reparatur.

Fortsetzen Sie von Fix Google Play Verschlüsselung unter 25% in Capacitor Apps

Wenn Sie Android-Store-Einschaltungen verwenden Fix Google Play Verschlüsselung unter 25% in Capacitor Apps um Android-Store-Einschaltungen zu planen, verbinden Sie es mit Capgo Native Builds zur Erstellung von Release-App-Bundles Capgo CI/CD zur Upload-Pipeline CI/CD-Integration context: Seite/ Bereich: Capgo Builder / native Cloud-Build-Produktseite. Rolle: Kurzer Benutzeroberflächentext oder Navigationspunkt. Nachrichten Schlüssel `native_build_feature_ci_cd` (Native Build Feature Ci Cd). Automatic Capacitor Android build with GitHub actions Automatische __CAPGO_KEEP_0__ Android-Build mit __CAPGO_KEEP_1__ Aktionen Capgo Consulting __CAPGO_KEEP_0__ Consulting

Live-Updates für Capacitor-Apps

Wenn ein Bug im Weblayer live ist, versenden Sie die Reparatur über Capgo anstatt Tage für die Genehmigung im App-Store abzuwarten. Die Benutzer erhalten die Aktualisierung im Hintergrund, während native Änderungen im normalen Review-Prozess bleiben.

Menschliche Unterstützung von Martin

Los geht's!

Neueste Beiträge aus unserem Blog

Capgo bietet Ihnen die besten Einblicke, die Sie benötigen, um eine wirklich professionelle mobile App zu erstellen.