Zum Hauptinhalt springen

Google Play-Versteckung unter 25% in Capacitor-Apps beheben

Passen Sie Google Play's 25%-Verschlüsselungsprüfung in einer Capacitor-Android-Anwendung, indem Sie R8 aktivieren, unnötige DEX minimieren und eine Release-App-Bundle bereitstellen.

Artikelcredits

Martin Donadieu

Schreiber

Valeria

Rezensent

Jordan

Redakteur

Fixen Sie Google Play-Verschlüsselung unter 25% in Capacitor-Apps

Play Console flaggt nun Android-Apps mit Capacitor Die App-Optimierung liegt unter unserem Schwellenwert, oft mit Verschlüsselung bleibt erhalten 3%. Google möchte mindestens 25% Verschlüsselung, Optimierung und Komprimierung. Die Umsetzung beginnt im Februar 2027, und das Fehlschlagen kann die Sichtbarkeit und die Veröffentlichungsoptionen reduzieren.

Die Warnung sieht in Android Vitals wie folgt aus:

Google Play Console Android Vitals Warnung, die Verschlüsselung bei 3 Prozent anzeigt, unter der 25-Prozent-Grenze für die App-Optimierung, mit einem Fixdatum 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 beheben es in der Android-Gradle-Release-Build, laden dann ein neues App-Bundle hoch.

What Google is measuring

Google Play überprüft die DEX in Ihrem 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 Daten auf allen drei Punkten treffen: 25% auf allen drei:

Metric Typischer __CAPGO_KEEP_0__ Grund für eine niedrige Bewertung Typischer Capacitor Grund für einen niedrigen Score
Obfuscation Klasse, Feld und Methodenamen werden in kurze Namen umbenannt minifyEnabled ist noch false
Optimierung R8 inlines, merges und rewrites Bytecode Standard proguard-android.txt enthält -dontoptimize
Verkleinerung Entfernt nicht verwendete Klassen und Methoden Ressourcen/code Verkleinerung ist nie aktiviert

Play 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 Heuristiken. Ein Capacitor App, die 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% Lebenszeichen-Wert.

Offizielle Richtlinie: Google Play-Obfuscation mit Capacitor für Android. Implementierungsdetail: DEX-Optimierung von code und App-Optimierung mit R8 aktivieren.

Why Capacitor apps fail this check

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

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

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

Ihre JavaScript-Dateien sind 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 die Veröffentlichung 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'
    }
}

Drei Details sind wichtig: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 entfernt nicht verwendete Android-Ressourcen. Es erfordert eine Minimierung.
  2. shrinkResources true entfernt nicht benötigte Android-Ressourcen. Es erfordert Minifizierung.
  3. Für diese R8-Einrichtung verwenden Sie proguard-android-optimize.txt. proguard-android.txt ships -dontoptimizedie R8-Optimierungen blockiert und AGP 9 scheitert. Play lässt jeden Shrinker zu; Capacitor-Apps sollten R8 mit den optimierten Standards verwenden. Siehe Capacitor Plugin AGP 9 Build Fehlerbehebung Wenn ein Plugin noch auf das alte Datei verweist.

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

Schritt 2 — R8-Vollmodus nicht deaktivieren

Open android/gradle.properties entfernen Sie diese Zeile, wenn sie existiert:

android.enableR8.fullMode=false

AGP 8+ aktiviert bereits den Vollmodus. Das Beibehalten dieses Flags begrenzt die Optimierung.

Auch suchen android/app/proguard-rules.pro Auch suchen Sie (und jedes zusätzliche -include Dateien) für:

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

Diese Regeln halten die Play-Bewertungen auch nach dem Umstellen niedrig. minifyEnabledLöschen Sie sie, es sei denn, Sie haben einen dokumentierten, vorübergehenden Grund.

Schritt 3 — Halten Sie Capacitor-Plugins, nicht die ganze App

R8 verwendet Reflexionsmetadata. Capacitor-Plugins werden durch Anmerkungen entdeckt, daher benötigen sie die Keep-Regeln. Sie fügen sie normalerweise nicht selbst hinzu. Seit Capacitor 3.2.3 @capacitor/android liefern Verbraucher-ProGuard-Regeln die halten:

  • @CapacitorPlugin Klassen @PluginMethod, Berechtigungen und Aktivitätsrückrufe
  • Klassen, die sich erweitern com.getcapacitor.Plugin
  • Legacy @NativePlugin und Cordova-Plugin-Klassen

Bleiben Sie auf einer aktuellen Capacitor 6/7/8-Zeile, damit die 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 beats 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-Partei-Plugin nach einem gezielten Keep-Regel-Update weiterhin abstürzt, aktualisieren Sie das Plugin und überlegen Sie, ob Sie ein alternativer, von der Capgo-Plugin-Verzeichnisoder fragen Sie Capgo Beratung an, um es zu patchen.

Offizielle Capacitor Hinweise: ProGuard verwenden.

Schritt 4 — Erstellen Sie ein echtes Release-Paket

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, diese Aufgaben gelingen immer noch, aber sie geben ein unsigniertes .aabSigniere es in Android Studio vor dem Play-Upload.

Installiere ein Release APK Release-APK ./gradlew assembleReleaseauf einem Gerät (, dann das APK unter app/build/outputs/apk/release/. Ein .aab Es ist ein Play-Upload-Format, kein etwas, das Sie per Sideload einladen. Üben Sie native Plugins (Kamera, Push, Datei, Abrechnung, Authentifizierung). R8-Bugs erscheinen nicht in npx cap run android Debug-Sitzungen.

Nach den Gradle-Befehlen oben (Sie befinden sich in android/), bestätigen Sie, dass R8 tatsächlich ausgeführt wurde:

  • app/build/outputs/mapping/release/mapping.txt
  • app/build/outputs/mapping/release/configuration.txt
  • Bestätigen Sie, dass R8 tatsächlich ausgeführt wurde: r8.json innerhalb der App-Bundle

Those release Ordner sind die Standard Capacitor Variante. Mit Produktflavours wird die Zuordnung unter dem Variantenamen ("mapping/freeRelease/Die APK ist unter apk/<flavor>/release/ Die APK ist unter apk/free/release/).

Beispiel mapping.txt fehlt, befinden Sie sich in dem falschen Variante-Ordner, CI hat zusammengestellt debug, oder R8 wurde mit -dontobfuscate. Recheck minifyEnabled true auf release und die Regeln, die die Verwischung deaktivieren, funktionieren nicht.

Schritt 5 — Lesbarkeit von Crashberichten behalten

Versteckte Stapelspuren sind ohne die Abbildungsdatei wertlos. Bewahren Sie sie auf. mapping.txt für jede Play-Version:

  • für jede Play-Version: Test und Freigabe → App-Bundle-Explorer → Downloads → Assets, dann hochladen mapping.txt wenn es noch nicht befestigt ist.
  • Firebase Crashlytics / Sentry: laden Sie die gleiche Abbildung als Teil der CI hoch.

Android Studio / AGP integriert oft die Abbildung in das .aab. Überprüfen Sie den Assets-Tab nach der ersten optimierten Hochladung.

Schritt 6 — Hochladen und erneut überprüfen

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

  1. Test und Freigabe → App-Bundle-Explorer Testen und veröffentlichen → App-Bundle-Explorer
  2. DEX-Größe plus Verschlüsselung / Optimierung / Komprimierung Prozentsätze
  3. Überwachen und verbessern → Android-Grundlagen nach der neuen Version ist die, die Play analysiert

Sie benötigen 25% auf jedem von den drei Metriken, nicht nur Verschlüsselung. Die Aktivierung von R8 mit proguard-android-optimize.txt normalerweise springt eine Capacitor-Anwendung von einer einzelnen Ziffern-Verschlüsselung auf gut über 25% auf allen drei.

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

Wenn Sie noch unter 25%

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

  1. Öffnen R8-Konfigurationsanalyzer wenn Ihr Android-Gradle-Plugin 9.3 oder neuer ist — assembleRelease schreibt dann configanalyzer.html nächst zu mapping.txt. Auf AGP 9.2 und früher, überspringen Sie dieses HTML-File und verwenden Sie mapping.txt, APK-Analyse und Play’s App-Bundle-Explorer anstatt.
  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-Analyse, wählen Sie die großen .dex Dateien, und schalten Sie die deobfuskierten Namen um (benötigt) mapping.txtPakete, die immer noch groß und lesbar sind, sind die Pakete, die Sie ganz aufgeben sollten.
  4. Aktualisieren Sie Plugins, die immer noch auf proguard-android.txtverweisen. Das Datei blockiert die Optimierung auf AGP 9 und ist ein roter Faden in älteren Plugins.

Beheben Sie nicht einen niedrigen Score, indem Sie DEX mit minifyEnabled false und hofft, dass sich die Heuristik ändert. Play möchte schrumpfen, Optimierung, und Verschlüsselung.

Was dies nicht ersetzt

  • JavaScript-Minifizierung in vite.config.ts ersetzt dies nicht die Metrik.
  • Capgo Live-Updates versenden Sie HTML/JS/CSS. Sie bauen DEX nicht neu. Nachdem R8 im Store-Binary aktiv ist, können Sie noch JS-Fixes über die Luft schicken. Die Verschlüsselungskontrolle 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 android/app/build.gradle im Repository. Der 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 __CAPGO_KEEP_0__ Actions Android Builds GitHub Aktionen Android-BuildsDie Workflow muss zusammenbauen. , nicht debug.nicht debuggen.

FAQ

Will enabling R8 break my 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 Halte die Regel nur für das Paket, das abstürzt. Wenn der Plugin unmantainiert ist, Capgo Beratung kann man es forken und weiterhin bauen.

Beweist npx cap run dass ich die Überprüfung bestanden habe?

Nein. Diese Anweisung verwendet ein Debug-Build mit R8 ausgeschaltet. Verwende bundleRelease / eine signierte 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 anstatt R8?

Nein. R8 ist der Android-Gradle-Plugin-Verkleinerer. Es liest ProGuard-Regeldateien. Googles Play-Dokumente erlauben jeden Verkleinerer; R8 ist der, den Capacitor-Apps verwenden sollten.

Checkliste

  • release { minifyEnabled true; shrinkResources true }
  • proguard-android-optimize.txt (nicht proguard-android.txt)
  • Nein -dontobfuscate / -dontoptimize / App-bereichsweit -keep class **
  • Capacitor 3.2.3+ so dass Plugin-Konsumentenregeln gelten
  • Release-Build erzeugt mapping.txt
  • Nativ-Plugins getestet auf einer Release-Installation
  • Neu .aab Hochgeladen; Mapping in App-Bundle-Explorer angehängt
  • Verkleistern, Optimieren und Verkleinern jeweils bei 25%+

Das ist die gesamte Play Console Warnung: Capacitor R8 links ließ, Play begann DEX zu bewerten und eine einezeilige Release-Gradle-Änderung plus ein Laden-Upload ist die Lösung.

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

Wenn Sie Android-Apps entwickeln Fixieren Sie Google Play-Verwischung unter 25% in Capacitor-Apps um Android-Ladenveröffentlichungen zu planen, verbinden Sie es mit Capgo nativee Native Builds für Release-App-Bundles Capgo CI/CD für den Upload-Pipeline CI/CD-Integration für Implementierungsdetails Automatische Capacitor Android-Builds mit GitHub Aktionen Für selbstgeführte Pipelines und Capgo Beratung Wenn ein Plugin nach der Aktivierung von R8 fehlschlägt.

Live-Updates für Capacitor-Apps

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

Neuestes aus unserem Blog

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