Console di gioco di Google sta segnalando le tue app Android Capacitor Optimizzazione dell'app è sotto il nostro limite di soglia, spesso con Otturamento è rimasto 3%. Google vuole almeno 25% obfuscazione, ottimizzazione e riduzione. La sua attuazione inizia in La conformità inizia nele, e fallendo può ridurre visibilità e opzioni di pubblicazione.
La raccomandazione appare così in Android Vitals:

Questo è un problema nativo di DEX Android. Non si tratta del tuo bundle Vue, React o Angular. Capgo aggiornamenti in tempo reale non modificano questo punteggio. Rendi corretto in Android Gradle il build di rilascio, quindi carica un nuovo Bundle dell'app.
Cosa Google sta misurando
Google Play controlla il DEX il DEX Nelle tue App Bundle Android: Java e Kotlin compilati, inclusi Capacitor, plugin e AndroidX. A partire da febbraio 2027, le app con più di 10 MB di DEX devono soddisfare 25% su tutti e tre:
| Metrica | Cosa significa | Tipico Capacitor causa di una bassa valutazione |
|---|---|---|
| L'obfuscazione | Nome di classe, campo e metodo rinominati in nomi brevi | minifyEnabled è ancora false |
| Optimizzazione | R8 inoltra, unisce e ridà il bytecode | Predefinito proguard-android.txt inclusi -dontoptimize |
| Shrinking | Eliminazione di classi e metodi non utilizzati | Riduzione dimensioni delle risorse/code non attivata mai |
Gioca r8.json quando costruisci con l'ultima patch del plugin Android Gradle 8.10 o superiore. Altrimenti utilizza 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% Politica ufficiale:
Politica ufficiale: Requisiti di qualità tecnica del Console di Gioco. Dettaglio di implementazione: Optimizzazione del DEX code e abilitare l'ottimizzazione dell'applicazione con R8.
Perché Capacitor le app falliscono questo controllo
L'interfaccia di template Android di Capacitor ancora invia release builds senza R8:
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
Questo è il default in android-template/app/build.gradle. Le build di debug dovrebbero rimanere così. Le build di rilascio non dovrebbero, se pubblichi su Play.
La vostra JavaScript è già minificata da Vite o webpack. Play non conta questo. Solo i nomi nativi DEX, le code native inutilizzate e le ottimizzazioni R8 contano.
Passo 1 — Attiva R8 per la versione di rilascio
Apre android/app/build.gradle (Groovy è il Capacitor predefinito) e modifica il release block:
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
Tre dettagli sono importanti:build.gradle.kts):
buildTypes {
getByName("release") {
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
Tre dettagli contano.
minifyEnabled trueelimina le risorse Android inutilizzate. Richiede minificazione.shrinkResources truerimuove risorse Android non utilizzate. Richiede minificazione.- Per questa configurazione R8, utilizza
proguard-android-optimize.txt.proguard-android.txtaggiunge-dontoptimizeIl che impedisce l'ottimizzazione R8 e fallisce AGP 9. Play consente a ogni riduttore; gli app Capacitor dovrebbero utilizzare R8 con i default di ottimizzazione. Vedere Capacitor Errore di costruzione Plugin AGP 9 Risoluzione se un plugin ancora si riferisce al file vecchio.
Non impostare minifyEnabled true su debugMantiene le esecuzioni locali veloci e le tracce di stack leggibili solo per la release.
Passo 2 — Non disabilitare il R8 full mode
Open android/gradle.properties e rimuovi questa riga se esiste:
android.enableR8.fullMode=false
AGP 8+ già abilita il modo completo. Lasciare quella flag in posto limita l'ottimizzazione.
Cerca anche android/app/proguard-rules.pro Anche cerca -include file) per:
-dontobfuscate
-dontoptimize
-dontshrink
-keep class ** { *; }
Queste regole mantengono i punteggi Play bassi anche dopo averli invertiti minifyEnabledEliminali a meno che non hai una ragione documentata e temporanea.
Passo 3 — Mantieni i plugin Capacitor, non l'app intera
R8 utilizza i metadati di riflessione. I plugin Capacitor vengono scoperti tramite annotazioni, quindi hanno bisogno di regole di mantenimento. Di solito non li aggiungi tu stesso. Dal Capacitor 3.2.3, @capacitor/android ships regole ProGuard per utenti finali quelle mantengono:
@CapacitorPluginche mantengono:@PluginMethod, callback delle permessi e delle attività- Classi che estendono
com.getcapacitor.Plugin - Legacy
@NativePlugine classi dei plugin di Cordova
Resta su una linea corrente Capacitor 6/7/8 per applicare le regole dei consumatori.
Aggiungi regole aggiuntive in android/app/proguard-rules.pro solamente Per un crash che puoi riprodurre in una versione di rilascio. L'approccio ristretto batte quello ampio:
# Good: one misbehaving plugin package
-keep class com.mycompany.myplugin.** { *; }
# Bad: this will tank obfuscation and shrinking
-keep class com.getcapacitor.** { *; }
-keep class ** { *; }
Se un plugin di terza parte continua a bloccare dopo una regola di mantenimento mirata, aggiorna il plugin, quindi considera un'alternativa mantenuta. Capgo directory dei plugino, chiedere Consulenza Capgo di patcharlo.
Note ufficiale Capacitor: Utilizzo di ProGuard.
Passo 4 — Costruisci un bundle di rilascio reale
Le APK di debug mostreranno ancora ~0% di obfuscazione. Play valuta solo ciò che si carica.
Dal root del progetto:
npm run build
npx cap sync android
cd android
./gradlew bundleRelease
Senza una release configurazione di firma, questi compiti hanno successo ma emettono un file non firmato .aabSegna con una firma in Android Studio prima dell'upload su Play.
Installare un su un dispositivo ( e poi il file APK sottostante./gradlew assembleReleaseInstallare un APK di rilascio app/build/outputs/apk/release/. An .aab È un formato di caricamento Play, non qualcosa che si caricca manualmente. Esercita plugin nativi (camera, push, file, fatturazione, autenticazione). I bug di R8 non si manifestano in npx cap run android sessioni di debug.
Dopo i comandi Gradle sopra (si trova in android/confermare che R8 è stato effettivamente eseguito:
app/build/outputs/mapping/release/mapping.txtapp/build/outputs/mapping/release/configuration.txt- Sul più recente patch di AGP 8.10 o superiore,
r8.jsonall'interno del Bundle dell'applicazione
quelle release sono le cartelle predefinite del Capacitor variant. Con gusti di prodotto, la mappatura è sotto il nome del varianto (mapping/freeRelease/L'APK è protetta apk/<flavor>/release/ (ad esempio apk/free/release/).
Se mapping.txt is mancante, si trova nella cartella di varianti sbagliata, CI assemblato debugo R8 è stato eseguito con -dontobfuscate. Recheck minifyEnabled true su release e che le regole di mantenimento non disabilitino l'obfuscazione.
Passo 5 — Mantieni i rapporti di crash leggibili
Tracce di stack obfuscate sono inutili senza il file di mapping. Conserva mapping.txt per ogni versione di Play:
- per ogni versione di Play: Test e rilascio → Esplora bundle dell'app → Download → Risorse, quindi caricalo
mapping.txtse non è già collegato. - Firebase Crashlytics / Sentry: caricare la stessa mappa come parte del CI.
Android Studio / AGP spesso incorpora la mappa nel .aab. Verifica ancora la scheda Asset dopo il primo upload ottimizzato.
Passo 6 — Carica e ricontrolla Play
Carica il nuovo .aab su un canale di testing interno (non è necessario rinfrescare la classifica per la produzione). Apri:
- Testa e rilascia → Esplora bundle dell'app per quella versione
- dimensione del file DEX più percentuali di oscuramento / ottimizzazione / riduzione
- Monitora e migliora → Vitals Android dopo che la nuova versione è quella che Play analizza
Se hai bisogno 25% su ogni di tre metriche, non solo l'obfuscazione. Abilitando R8 con proguard-android-optimize.txt di solito salta un'app Capacitor da un'obfuscazione a un dito a oltre il 25% su tutti e tre.
Solo su Play imposta il 25% di soglia quando il DEX supera i 10 MB per le app (50 MB per i giochi). Anche sotto quella soglia, risolvere il problema è ancora utile: DEX più piccolo, meno memoria, avvio più veloce.
Se sei ancora sotto il 25%
R8 è abilitato, ma Play (o l'analizzatore locale) mostra ancora un punteggio debole. Le regole di mantenimento ampie sono le solite residui.
- Apre Analizzatore di configurazione R8 se il tuo plugin Android Gradle è 9.3 o nuovo —
assembleReleaseallora scriveconfiganalyzer.htmlaccanto amapping.txt. In AGP 9.2 e precedenti, saltare quel file HTML e utilizzaremapping.txt, APK Analyzer e esploratore del bundle di App di Play al suo posto. - Ordina le regole per quanto bloccano l'app. Le regole per il consumo di librerie che non puoi modificare sono normali. Livello dell'app
-keep class com.foo.** { *; }non lo è. - Aprite il
.aabin Android Studio APK Analyzer, selezionare i grandi.dexfile e abilitare i nomi deobfuscati (richiedemapping.txtI pacchetti che rimangono grandi e leggibili sono i pacchetti da fermare di conservazione. - Aggiornare i plugin che ancora si riferiscono
proguard-android.txt. Quel file blocca l'ottimizzazione in AGP 9 e è un segnale di allarme nei plugin più vecchi.
Non 'risolvere' un punteggio basso riducendo DEX con minifyEnabled false e sperando che le heuristici cambino. Play vuole ridurre, ottimizzare, e l'oscuramento.
Cosa questo non sostituisce
- la minificazione del JavaScript in
vite.config.tsquesto non sposta questo metrico. - Capgo aggiornamenti in tempo reale invia HTML/JS/CSS. Non ricostruiscono DEX. Dopo che R8 è abilitato nel binario di store, puoi ancora inviare correzioni JS in tempo reale. Il controllo di oscuramento stesso richiede un upload nativo di Play.
- dimensione della pagina 16 KB è un requisito nativo di Play separato. Vedi dimensione della pagina 16 KB Android.
Se hai già costruito Android con Costruzione Capgocambia android/app/build.gradle nel repository. Il prossimo build cloud rileva R8. Non hai bisogno di una pipeline Play diversa, solo un file binario di rilascio prodotto con minificazione attiva. Lo stesso concetto se mantieni __CAPGO_KEEP_0__ Build Actions Android GitHub Actions Android buildsIl flusso di lavoro deve essere assemblato e non debug.Domande frequenti
FAQ
Abilitando R8, interromperò i miei plugin Capacitor?
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 mantieni la regola solo per il pacchetto che si blocca. Se il plugin non è mantenuto, Consulenza Capgo puoi creare una fork e mantenerlo in esecuzione.
Does npx cap run prova che ho superato il controllo?
No. Quel comando utilizza una versione di debug con R8 spento. Utilizza bundleRelease / una pubblicazione Play firmata.
Abbiamo già impostato minifyEnabled true e vediamo ancora il 3%. Perché?
Cerca -dontobfuscate, proguard-android.txt, android.enableR8.fullMode=false, e regole generali -keep Conferma che il CI ha caricato l'AAB minificato, non un artefatto vecchio.
Avremo bisogno di ProGuard al posto di R8?
No. R8 is the Android Gradle Plugin shrinker. It reads ProGuard-style rule files. Google’s Play docs allow any shrinker; R8 is the one Capacitor apps should use.
Checklist
-
release { minifyEnabled true; shrinkResources true } -
proguard-android-optimize.txtNonproguard-android.txt) - Senza
-dontobfuscate/-dontoptimize/ app-wide-keep class ** - Capacitor 3.2.3+ applicano le regole del consumatore del plugin
- Rilascio build produce
mapping.txt - Plugin nativi testati su un'installazione di rilascio
- New
.aabOttimizzazione, ottimizzazione e riduzione ciascuno al 25%+ - Obfuscazione, ottimizzazione e riduzione di dimensioni ciascuna al 25%+
Ecco l'intero avviso del Console di Gioco: Capacitor lasciato R8 fuori, Play ha iniziato a valutare DEX, e un cambiamento di rilascio Gradle di una riga più un upload di store è la soluzione.
Continua a procedere da Fix Google Play Obfuscation Below 25% in Capacitor Applicazioni
Se stai utilizzando Fix Google Play Obfuscation Below 25% in Capacitor Applicazioni per pianificare i rilasci di store Android, connettilo con Capgo Costruzioni native per i bundle di applicazioni di rilascio, Capgo CI/CD per il pipeline di upload, Integrazione CI/CD per dettagli di implementazione Automatic Capacitor Android build with GitHub actions per pipeline auto-hosted, e Consulenza Capgo se un plugin si rompe dopo l'abilitazione di R8.