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:

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:
minifyEnabled trueist das, was tatsächlich R8 (verkleinern + verschleiern + optimieren) ausführt.shrinkResources trueentfernt nicht benötigte Android-Ressourcen. Es erfordert Minifizierung.- Für diese R8-Konfiguration verwenden Sie
proguard-android-optimize.txt.proguard-android.txtversendet-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:
@CapacitorPluginKlassen@PluginMethod, Berechtigungs- und Aktivitätsrückruf- Klassen, die sich auf
com.getcapacitor.Plugin - Legacy
@NativePluginund 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.txtapp/build/outputs/mapping/release/configuration.txt- Auf der neuesten Patches von AGP 8.10 oder höher
r8.jsoninnerhalb 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.txtWenn 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:
- Test und veröffentlichen → App-Bundle-Explorer Für diese Version
- DEX-Größe plus Verschlüsselung / Optimierung / Komprimierung Prozent
- Ü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.
- Öffnen R8-Konfigurationsanalyzer Wenn Ihr Android-Gradle-Plugin 9.3 oder neuer ist —
assembleReleasedann schreibtconfiganalyzer.htmlnächstensmapping.txt. Bei AGP 9.2 und früherer Versionen ignorieren Sie dieses HTML-File und verwenden Siemapping.txt, APK-Analyser und Play’s App-Bundle-Explorer anstelle dessen. - 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. - Öffnen Sie das
.aabin Android Studio APK-Analyser, wählen Sie das große.dexDateien und die Deobfuscation von Namen (bedarfsvollständig)mapping.txtPakete, die riesig und lesbar bleiben, sind die Pakete, die Sie nicht mehr weiterentwickeln sollten - 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.tsJavaScript-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(nichtproguard-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
.aabUpload 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