Play ConsoleはCapacitor Androidアプリを アプリの最適化は、、しばしば オブフューション 長く続いた 3%. Google は少なくとも 25% オブフューション、最適化、縮小を求めています。 審査は 2027 年 2 月に始まります。 2027 年 2 月に開始されます。 これを実行しないと、表示と公開オプションの可視性が低下する可能性があります。Android ビタルの警告は次のようになります。
Android バイタルの警告はこのように表示されます。

__CAPGO_KEEP_0__ Capgo Google が測定しているのは
Google が測定しているもの
Google PlayはAndroidアプリのバンドルを検査します。 DEX Androidアプリのバンドル内のコンパイル済みのJavaとKotlin、Capacitor、プラグイン、AndroidXを含みます。 10 MB 10MB 25% すべての3つの条件を満たす必要があります。
| メトリック | 意味 | Capacitorの典型的な原因 |
|---|---|---|
| オブフュージョン | クラス、フィールド、メソッド名が短い名前に変更されます。 | minifyEnabled オブフュージョンはまだ false |
| 最適化 | R8はバイトコードをインライン化、統合、書き換えます | デフォルト proguard-android.txt 含む -dontoptimize |
| 縮小 | 使用されていないクラスとメソッドを削除 | リソース/codeの縮小はいつもオンになっていません |
Playは r8.json Capacitorは、Android Gradle Plugin 8.10 以降の最新パッチでビルドする場合にのみ使用します。そうでない場合は 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% 公式ポリシー:
vitalsスコア Google Playの技術品質要件.実装詳細: DEXのcode最適化 と R8を使用したアプリ最適化を有効にする.
なぜCapacitorアプリがこのチェックに失敗するのか
CapacitorAndroidテンプレートは、リリースビルドを含めても リリースビルド R8:
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
デフォルトは android-template/app/build.gradleにあります。
Vite または webpack によってすでに JavaScript が最適化されています。Play ではそのような最適化はカウントされません。DEX 名、未使用の code、R8 最適化のみがカウントされます。
Step 1 — リリース用に R8 を有効にします
開く android/app/build.gradle (Groovy は Capacitor のデフォルトです) そして変更する リリース ブロック:
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
モジュールが Kotlin DSL を使用する場合 (build.gradle.kts):
buildTypes {
getByName("release") {
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
3 つの重要な点があります:
minifyEnabled trueR8 を実行するのは実際に (縮小 + 不明瞭化 + 最適化) です。shrinkResources true未使用の Android リソースを削除します。最適化には最適化が必要です。- この R8 設定を使用してください
proguard-android-optimize.txt.proguard-android.txt運航-dontoptimize、R8の最適化をブロックし、AGP 9で失敗します。Playはどの縮小器も許可します。Capacitorアプリは、最適化のデフォルト値でR8を使用するようにしてください。 Capacitor プラグイン AGP 9 ビルド エラー修正 プラグインが古いファイルを参照している場合でも、
設定しないでください。 minifyEnabled true オフ debug.
リリース専用はローカル実行を速くし、スタックトレースを読みやすくします。
Open android/gradle.properties そして、この行が存在する場合は削除してください。
android.enableR8.fullMode=false
開く
削除してください。 android/app/proguard-rules.pro AGP 8+ はすでにフル モードを有効にしているため、残したままでは最適化が抑制されます。 -include ファイル) の場合:
-dontobfuscate
-dontoptimize
-dontshrink
-keep class ** { *; }
ルールは、スコアを低く維持するために、スコアを反転しても機能します。 minifyEnabledステップ 3 — __CAPGO_KEEP_0__ プラグインだけを残す
ステップ 3 — Capacitor プラグインだけを残す
R8 は反射メタデータを使用します。Capacitor プラグインはアノテーションによって検出されるため、ルールを保持する必要があります。 通常、自分で追加する必要はありません。 Capacitor 3.2.3 以降では、 @capacitor/android ships ルールを保持する クラス
@CapacitorPlugin、パーミッション、@PluginMethodアクティビティのコールバック- クラスが拡張
com.getcapacitor.Plugin - レガシー
@NativePluginコルダバプラグインクラス
現在のCapacitor 6/7/8 ラインに留まることで、消費者規則が適用される。
追加の規則を android/app/proguard-rules.pro のみ リリースビルドで再現できるクラッシュの場合にのみ
# Good: one misbehaving plugin package
-keep class com.mycompany.myplugin.** { *; }
# Bad: this will tank obfuscation and shrinking
-keep class com.getcapacitor.** { *; }
-keep class ** { *; }
狭いほうが広いほうよりもいい Capgo プラグインディレクトリ、またはお問い合わせする Capgo コンサルティング __CAPGO_KEEP_0__ コンサルティング
公式 Capacitor の注釈: ProGuard を使用する.
ステップ 4 — 実際のリリース バンドルを作成する
デバッグ APK は ~0% のオブフュージョンを表示します。Play はアップロードしたものだけを評価します。
プロジェクトのルートから:
npm run build
npx cap sync android
cd android
./gradlew bundleRelease
Without a release リリース APK をデバイスにインストール ( .aab、その下の
インストール リリース APK デバイス上で ("./gradlew assembleRelease, そのアプリケーションを保護するために、APKを下さい。 app/build/outputs/apk/release/. An .aab はGoogle Playのアップロード形式であり、ユーザーが直接インストールするものではありません。 npx cap run android ネイティブプラグイン(カメラ、プッシュ、ファイル、請求、認証)を実行します。
R8のバグは android/セッションに表示されません。
app/build/outputs/mapping/release/mapping.txtapp/build/outputs/mapping/release/configuration.txt- 上記のGradleコマンドを実行した後(ここで
r8.jsonにいるはずです)、R8が実行されたことを確認してください。
Those release フォルダは、デフォルトのCapacitorバリアントです。製品フラバーとともに、バリアント名の下にマッピングが行われます。mapping/freeRelease/の apk/<flavor>/release/ フォルダはデフォルトの__CAPGO_KEEP_0__バリアントです。 apk/free/release/).
If mapping.txt は欠けている場合、間違ったバリアントフォルダにいることになります。CIが組み立てた debug, またはR8が実行した -dontobfuscateを確認してください。 minifyEnabled true に release そして、ルールを無効にしないようにしてください。
ステップ 5 — クラッシュレポートを読みやすくする
オブフュージドされたスタックトレースはマッピングファイルがなければ意味をなさない。__CAPGO_KEEP_0__を保存してください。 mapping.txt マッピングファイルがなければ、オブフュージュされたスタックトレースは無価値です。
- それぞれのPlayバージョンについて: Playコンソール:テストとリリース → アプリバンドルエクスプローラー → ダウンロード → アセット
mapping.txt, それをアップロードしてください。 - Firebase Crashlytics / Sentry: CIで同様のマッピングをアップロードする。
Android Studio / AGPはマッピングを埋め込むことがよくあります。 .aab. 最初の最適化アップロード後も、Assetsタブを確認してください。
Step 6 — Playにアップロードし、再確認
ステップ: 6 — Playにアップロードし、再確認 .aab ステップ 6 — Playにアップロードし、再確認
- ステップ 6 — Playにアップロードし、再確認 ステップ 6 — Playにアップロードし、再確認
- ステップ 6 — Playにアップロードし、再確認
- ステップ 6 — Playにアップロードし、再確認 ステップ 6 — Playにアップロードし、再確認
必要があります 25% それぞれの 3 つのメトリックのうち、オブフュージョンだけではありません。 R8 を有効にすると、 proguard-android-optimize.txt 通常、Capacitor アプリは、1 桁のオブフュージョンから、25% を超える 3 つのすべてのメトリックに跳びます。
Play だけ enforces 25% 未満の場合、R8 が有効ですが、Play (またはローカル アナライザー) が弱いスコアを示している場合、広範囲にわたる保持規則が通常残っています。
オープン
R8 設定アナライザー
- Open その場合、 then writes
assembleRelease次に書きます。configanalyzer.html次にmapping.txt. AGP 9.2 以前の場合、その HTML ファイルをスキップし、mapping.txt、APK アナライザー、 - の代わりに使用します。
-keep class com.foo.** { *; }ない。 - はそうではありません。
.aabAndroid Studioの.dexで開き、mapping.txtのファイルを選択し、デオブフュージュされた名前をオン/オフに切り替えます ( - アップデートするプラグインがまだ参照している
proguard-android.txtまだ
DEXを縮小してスコアを上げるのではなく minifyEnabled false そして、ヒューリスティクスが変化することを願っている。Playは縮小、最適化を望んでいる。 と オブフュージョン。
これは置き換えるものではない。
- JavaScriptの最適化 は
vite.config.tsこれは指標を動かさない。 - Capgoのライブアップデート HTML/JS/CSSを送信する。DEXを再構築しない。ストアバイナリにR8が有効になっている場合、オーバーザエアのJS修正を送信できる。
- オブフュージョンチェック自体には、Playのネイティブアップロードが必要。 16KBのページサイズ は別のPlayのネイティブ要件である。.
Google PlayのオブフュージョンとCapacitor Android Capgo ビルド, change android/app/build.gradle 変更 GitHub アクション Android ビルド次のクラウドビルドではR8が適用されます。別のPlayパイプラインが必要なわけではありません。ただし、最小化が有効なリリースバイナリが必要です。同様の概念は、__CAPGO_KEEP_0__ Actions Android ビルド :ワークフローはリリース、デバッグ
FAQ
R8を有効にすると、Capacitor プラグインに影響を与えるでしょうか?
もしもプラグインが反射を使用し、消費者が保持するルールを提供していない場合、影響を受ける可能性があります。Core Capacitorはプラグインクラスを保持しています。リリースビルドをテストしてください。さらに 狭い パッケージがクラッシュした場合のみルールを維持する。プラグインがメンテナンスされていない場合、 Capgoコンサルティング それでもフォークしてビルドを維持することができる。
それ npx cap run チェックを通過したことを証明した?
いいえ。 そのコマンドはR8をオフにしたデバッグビルドを使用しています。署名されたPlayアップロード用に bundleRelease /
すでに設定済み minifyEnabled true でも3%が残っているのはなぜ?
検索 -dontobfuscate, proguard-android.txt, android.enableR8.fullMode=false、と -keep 、と
ProGuard は必要ですか?R8 の代わりに?
いいえ。R8 は Android Gradle Plugin の圧縮器です。ProGuard スタイルのルールファイルを読みます。Google の Play ドキュメントでは、どの圧縮器でも使用できますが、R8 は Capacitor アプリで使用する必要があります。
チェックリスト
-
release { minifyEnabled true; shrinkResources true } -
proguard-android-optimize.txt(ではないproguard-android.txt) - いいえ
-dontobfuscate/-dontoptimize/ app-wide-keep class ** - Capacitor 3.2.3+ プラグインの消費者規則が適用されます。
- ネイティブ プラグインはリリース インストールでテストされています
mapping.txt - 新しい
- New
.aabオブフュージョン、最適化、圧縮各 25%+ - 新しい
そののはPlay Consoleの警告です: Capacitor R8をオフにしたまま、DEXのスコアリングを開始し、リリースのGradleの変更とストアのアップロードは修正です。
Fix Google Play Obfuscation Below 25% in Capacitor Appsから続けてください。
あなたが使用している Fix Google Play Obfuscation Below 25% in Capacitor Apps Android ストアのリリースを計画するには、Capgo Builderと接続する必要があります。 Capgo ネイティブビルド リリース用のアプリパッケージに Capgo CI/CD アップロードパイプラインに CI/CD統合 Capgo Builder / native cloud build product page 実装の詳細については、Automatic Capacitor Android build with GitHub actionsを参照してください。 自社パイプライン用 Capgoコンサルティング R8が有効になるとプラグインが破損する場合