Zum Hauptinhalt springen

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

Passen Sie die 25%-Verwischungsprüfung von Google Play in einem Capacitor-Android-App durch, indem Sie R8 aktivieren, nicht verwendete DEX zusammenfassen und ein Release-App-Bundle bereitstellen.

Artikelcredits

Martin Donadieu

Schriftsteller

Valeria

Rezensent

Jordan

Redakteur

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

Das Play-Console flaggt Capacitor-Android-Apps nun für Die App-Optimierung liegt unter unserem Schwellenwertoft mit Verwischung um die Ecke 3%. Google möchte mindestens 25% Verwischung, Optimierung und Komprimierung. Die Durchsetzung beginnt im Februar 2027und kann es bei einem Scheitern sogar die Sichtbarkeit und die Veröffentlichungsoptionen reduzieren.

Die Warnung sieht in Android-Vitals so aus:

Google Play Console Android-Vitals-Warnung, die eine Verschlüsselung von 3 Prozent anzeigt, unterhalb der 25-Prozent-Grenze für die App-Optimierung, mit einem Korrekturdatum 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 Dex 25% auf allen drei:

Metrik 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 inline, fusioniert und rekonfiguriert Bytecode Standard proguard-android.txt enthält -dontoptimize
Verkleinerung Ungenutzte Klassen und Methoden entfernt Ressourcen/code werden nie auf minimiert

Spiel liest r8.json wenn Sie mit dem neuesten Patches 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 keine Mapping-Datei, daher sieht Play lesbare Namen und meldet ein paar Prozent Verschlüsselung (oft verbleibende von bereits verschlüsselten Bibliothek AARs). Das entspricht einem 3% Lebenszeichen-Wert.

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

Why Capacitor Apps scheitern an dieser Überprüfung

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.

Your JavaScript is already minified by Vite or webpack. Play does not count that. Only native DEX names, unused native code, and R8 optimizations count.

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

Schritt 1 — Aktivieren Sie R8 für Release android/app/build.gradle (Groovy is the Capacitor default) and change the (Groovy ist die __CAPGO_KEEP_0__ Standard-Einstellung) und ändern Sie die Einstellung für 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 verwendete Android-Ressourcen. Es erfordert Minifizierung.
  3. Für diese R8-Einrichtung verwenden Sie proguard-android-optimize.txt. proguard-android.txt versendet -dontoptimize, die R8-Optimierungen blockiert und AGP 9 fehlschlägt. Play ermöglicht jede Verkleinerung; Capacitor-Apps sollten R8 mit den optimierten Standards verwenden. Siehe Capacitor-Plugin-AGP-9-Build-Fehler-Fix wenn ein Plugin noch auf das alte Datei verweist.

Setzen Sie nicht minifyEnabled true auf debug. Release-only hält lokale Ausführungen schnell und Stapelabwurfsmeldungen lesbar.

Schritt 2 — Deaktivieren Sie R8 Vollmodus nicht

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

android.enableR8.fullMode=false

AGP 8+ aktiviert Vollmodus bereits. Wenn Sie diese Flagge belassen, wird die Optimierung beeinträchtigt.

Suchen Sie auch android/app/proguard-rules.pro (und alle zusätzlichen -include Dateien) nach:

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

Diese Regeln halten die Play-Bewertungen niedrig, selbst nachdem Sie die Schaltfläche umgeschaltet haben. minifyEnabledSchritt 3 — Halten Sie __CAPGO_KEEP_0__-Plugins, nicht die gesamte App

R8 verwendet Reflexionsmetadata. Capacitor-Plugins werden durch Anmerkungen entdeckt, daher benötigen sie Keep-Regeln.

R8 uses reflection metadata. Capacitor plugins are discovered by annotations, so they need keep rules. Sie fügen sie normalerweise selbst nicht hinzu. Seit Capacitor 3.2.3, @capacitor/android liefern Verbraucher-ProGuard-Regeln die Folgendes aufrechterhalten:

  • @CapacitorPlugin Klassen @PluginMethod, Berechtigungen und Aktivitätsaufruf-Callbacks
  • Klassen, die sich auf com.getcapacitor.Plugin
  • Legacy @NativePlugin und Cordova-Plugin-Klassen

Bleiben Sie auf einer aktuellen Capacitor 6/7/8-Linie, damit diese Verbraucherregeln angewendet werden.

Fügen Sie zusätzliche Regeln in android/app/proguard-rules.pro nur für einen Crash, den Sie in einer Release-Build reproduzieren können. Narrow schlägt Broad:

# 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 Plugin nach einer gezielten Keep-Regel immer noch abstürzt, aktualisieren Sie das Plugin, dann betrachten Sie ein beibehaltenes Alternativ 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-Paketbündel. Debug-APKs werden immer noch ~0% Verschlüsselung anzeigen. Play bewertet nur, was Sie hochladen. Von der Projektwurzel:

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

Ohne eine release signingConfig, gelangen diese Aufgaben noch, aber sie erzeugen einen unsignierten .aab. Signieren Sie es in Android Studio vor dem Play-Upload.

Installieren Sie 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 Sie sideloaden. Üben Sie native Plugins (Kamera, Push, Datei, Abrechnung, Auth). R8-Bugs erscheinen nicht in npx cap run android debug-Sitzungen.

Nach den Gradle-Befehlen oben (Sie befinden sich in android/)

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

Diese release Ordner sind die Standard-Capacitor-Variante. Bei Produktflavours ist die Zuordnung unter dem Variantenname (mapping/freeRelease/Der APK ist unter apk/<flavor>/release/ z.B. apk/free/release/).

Wenn mapping.txt fehlt, befinden Sie sich im falschen Variantenordner, CI wurde kompiliert debugoder R8 wurde mit -dontobfuscateÜberprüfen Sie minifyEnabled true auf release und stellen Sie sicher, dass die Keep-Regeln die Verschlüsselung nicht deaktivieren.

Schritt 5 — Halten Sie Crashberichte lesbar

Verschlüsselte Stapelabdrücke sind ohne die Abbildungsdatei nutzlos. Halten Sie mapping.txt für jede Play-Version:

  • Play-Console: Testen und Freigeben → App-Bundle-Explorer → Downloads → Assets, dann hochladen mapping.txt wenn es nicht bereits befestigt ist.
  • Firebase Crashlytics / Sentry: Hochladen Sie das gleiche Mapping als Teil der CI.

Android Studio / AGP legt oft das Mapping in der .aab. Überprüfen Sie nochmals die Assets-Taste nach dem ersten optimierten Upload.

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

Hochladen Sie das neue .aab zu einem internen Testtrack (eine Produktion ist nicht erforderlich, um die Punktzahl zu aktualisieren). Öffnen:

  1. Testen und veröffentlichen → App-Bundle-Explorer für diese Version
  2. Größe des DEX-Dateisystems plus Verwischung / Optimierung / Komprimierung Prozent
  3. Überwachen und verbessern → Android-Vitals nachdem die neue Version die von Play analysierte ist

Sie benötigen 25% auf jedem der drei Metriken, nicht nur die Verwischung. Die Aktivierung von R8 springt normalerweise ein __CAPGO_KEEP_0__-App von einer einstelligen Verwischung auf mehr als 25% auf allen drei. proguard-android-optimize.txt usually jumps a Capacitor app from single-digit obfuscation to well above 25% on all three.

die Verwischung für die App die 25-Prozent-Marke, wenn DEX über 10 MB für Apps (50 MB für Spiele) liegt.

Wenn Sie noch unter 25 Prozent liegen.

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

  1. Öffnen R8-Konfigurations-Analyzer Wenn Ihr Android-Gradle-Plugin 9.3 oder neuer ist — assembleRelease dann schreibt es configanalyzer.html nächstens mapping.txt . Auf AGP 9.2 und früherer Versionen ignorieren Sie dieses HTML-File und verwenden Sie mapping.txtSortieren Sie Keep-Regeln nach dem, wie viel des Apps sie einfrieren. Bibliothekskonsumenten-Regeln, die Sie nicht bearbeiten können, sind normal. App-Level-Regeln sind das nicht.
  2. Wenn DEX über 10 MB für Apps (50 MB für Spiele) liegt. -keep class com.foo.** { *; } Wenn Ihr Android-Gradle-Plugin 9.3 oder neuer ist —
  3. Öffnen Sie das .aab in Android Studio APK Analyzer, wählen Sie die großen .dex Dateien und aktivieren Sie die deobfuskierten Namen (benötigt mapping.txt. Pakete, die immer noch riesig und lesbar sind, sind die Pakete, die Sie ganz aufgeben sollten.
  4. Aktualisieren Sie Plugins, die sich noch auf proguard-android.txtreferenzieren. Das Datei blockiert die Optimierung bei AGP 9 und ist ein roter Faden in älteren Plugins.

Vermeiden Sie es, einen niedrigen Score durch DEX-Verkleinerung mit minifyEnabled false und die Hoffnung, dass die Heuristik sich ändert. Play möchte DEX-Verkleinerung, Optimierung und und context

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

  • Verschlüsselung. in vite.config.ts bewegt diese Metrik nicht.
  • Capgo Live-Updates schicken Sie HTML/JS/CSS. Sie müssen DEX nicht neu erstellen. Nachdem R8 im Store-Binary aktiv ist, können Sie noch JS-Fixes über die Luft schicken. Die Verifizierung der Verschlüsselung selbst benötigt 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 in der 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 BuildsDie Workflow-Assemblage muss funktionieren Veröffentlichungnicht Debug-Modus.

FAQ

Kann die Aktivierung von R8 meine Capacitor-Plugins beschädigen?

Ja, wenn ein Plugin Reflexion verwendet und keine Consumer-Keep-Regeln bereitstellt. Kern-Capacitor-Komponenten behalten bereits die Plugin-Klassen. Teste einen Veröffentlichungsbuild. Füge nur eine enge Keep-Regel für das Paket hinzu, das abstürzt. Wenn das Plugin nicht mehr gepflegt wird, __CAPGO_KEEP_0__ Consulting Kann ich damit beweisen, dass ich die Überprüfung bestanden habe? Capgo Consulting nicht Debug-Modus.

FAQ npx cap run Kann die Aktivierung von R8 meine __CAPGO_KEEP_0__-Plugins beschädigen?

Nein. Diese Anweisung verwendet ein Debug-Build mit R8 ausgeschaltet. Verwende bundleRelease / ein signiertes Play-Upload.

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

Suche nach -dontobfuscate, proguard-android.txt, android.enableR8.fullMode=false, und blanket -keep Regeln. Bestätige, 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-Dokumentation erlaubt jeden Verkleinerer; R8 ist der, den Capacitor Apps verwenden sollten.

Überprüfungsliste

  • release { minifyEnabled true; shrinkResources true }
  • proguard-android-optimize.txt (nicht proguard-android.txt)
  • Nein -dontobfuscate / -dontoptimize / App-wide -keep class **
  • Capacitor 3.2.3+ so Plugin-Konsumentenregeln gelten
  • Release Build erstellt mapping.txt
  • Nativ-Plugins wurden auf einem Release-Install getestet
  • Neu .aab hochgeladen; die Zuordnung ist im App-Bundle-Explorer angehängt
  • Verschlüsselung, Optimierung und Komprimierung jeweils bei 25%+

Das ist die gesamte Play-Console-Warnung: Capacitor wurde R8 ausgelassen, Play begann DEX zu bewerten, und eine einezeilige Release-Gradle-Änderung plus ein Laden im Store ist der Fix.

Weitermachen von Fix Google Play Obfuscation Below 25% in Capacitor Apps

Wenn Sie Android-Speicherfreigaben planen, verbinden Sie es mit Fix Google Play Obfuscation Below 25% in Capacitor Apps zur Planung von Android-Speicherfreigaben Capgo Native Builds zur Veröffentlichung von App-Bundles Capgo CI/CD zur Upload-Pipeline CI/CD-Integration context: Capgo Builder / native cloud build product page. Role: Short UI label or navigation item. Message key `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 Web-layer-Bug aktiv ist, schicken Sie die Reparatur über Capgo anstatt Tage für die Genehmigung des App-Stores zu warten. Die Benutzer erhalten die Aktualisierung im Hintergrund, während native Änderungen im normalen Review-Prozess bleiben.

Menschliche Unterstützung von Martin

Jetzt loslegen

Neueste aus unserem Blog

Capgo gibt Ihnen die besten Einblicke, die Sie benötigen, um ein wirklich professionelles Mobiltelefon-App zu erstellen.