メイン コンテンツにジャンプ

Capacitor アプリの下 25% 未満の Google Play オブフュージョンを修正する

Google Playの25%のオブフュージョンチェックを通過するCapacitor Androidアプリを作成するには、R8を有効にし、未使用のDEXを圧縮し、リリースアプリバンドルを配信する必要があります。

Article Credits

マーティン・ドナディュー

ライター

ヴァレリア

レビュアー

ジョーダン

エディター

Google Playのオブフュージョン25%未満のCapacitorアプリを修正する

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

Android バイタルの警告はこのように表示されます。

これはネイティブの Android DEX 問題です。 Vue、React、または Angular のバンドルとは関係ありません。

__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 つの重要な点があります:

  1. minifyEnabled true R8 を実行するのは実際に (縮小 + 不明瞭化 + 最適化) です。
  2. shrinkResources true 未使用の Android リソースを削除します。最適化には最適化が必要です。
  3. この 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.txt
  • app/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にアップロードし、再確認

  1. ステップ 6 — Playにアップロードし、再確認 ステップ 6 — Playにアップロードし、再確認
  2. ステップ 6 — Playにアップロードし、再確認
  3. ステップ 6 — Playにアップロードし、再確認 ステップ 6 — Playにアップロードし、再確認

必要があります 25% それぞれの 3 つのメトリックのうち、オブフュージョンだけではありません。 R8 を有効にすると、 proguard-android-optimize.txt 通常、Capacitor アプリは、1 桁のオブフュージョンから、25% を超える 3 つのすべてのメトリックに跳びます。

Play だけ enforces 25% 未満の場合、R8 が有効ですが、Play (またはローカル アナライザー) が弱いスコアを示している場合、広範囲にわたる保持規則が通常残っています。

オープン

R8 設定アナライザー

  1. Open その場合、 then writes assembleRelease 次に書きます。 configanalyzer.html 次に mapping.txt. AGP 9.2 以前の場合、その HTML ファイルをスキップし、 mapping.txt、APK アナライザー、
  2. の代わりに使用します。 -keep class com.foo.** { *; } ない。
  3. はそうではありません。 .aab Android Studioの .dex で開き、 mapping.txtのファイルを選択し、デオブフュージュされた名前をオン/オフに切り替えます (
  4. アップデートするプラグインがまだ参照している 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が有効になるとプラグインが破損する場合

Capacitor アプリのためのリアルタイム更新

ウェブ層のバグが生じた場合、Capgo を通じて修正を配信し、数日間待つ必要のないアプリストアの承認を待つのではなく、ユーザーはバックグラウンドで更新を受け取り、ネイティブの変更は通常のレビュー経路で残ります。

最新のブログ記事

Capgoは、プロフェッショナルなモバイルアプリを開発するために必要な最良の洞察を提供します。