メイン コンテンツにスキップ

Fix Google Play Obfuscation Below 25% in Capacitor Apps

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

記事のクレジット

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

ライター

バレリア

レビュアー

ジョーダン

エディター

Capacitor アプリのGoogle Play オブフューザー率が25%未満の場合に修正する

Play ConsoleはCapacitor Androidアプリを アプリの最適化は、指定された閾値以下、よく オブフューザー しばらく 3%。Googleは、少なくとも 25% オブフューザー、最適化、縮小 の実施は2027年2月から、そして失敗すると、可視性と出版オプションが減る。

Androidビタルの警告は次のようになります。

Google PlayコンソールのAndroidビタルの警告が、3パーセントのオブフュージョンが表示され、25パーセントのアプリ最適化閾値以下で、2027年2月の修正日が表示されます。

これはネイティブAndroid DEXの問題です。これは、Vue、React、またはAngularのバンドルとは関係ありません。 Capgo Capgoにプルリクエストを送信する

ライブ更新もこのスコアを変えません。Android Gradleリリースビルドで修正し、App Bundleをアップロードする必要があります。

Googleが測定しているもの Google Playが検査するのは in your Android App Bundle: compiled Java and Kotlin, including Capacitor, plugins, and AndroidX. From February 2027, apps with more than Androidアプリバンドル内の JavaとKotlinのコンパイル済みコード、__CAPGO_KEEP_0__、プラグイン、AndroidXなど、2027年2月からDEXが10MBを超えるアプリは 25% すべての3つ:

指標 それが何を意味するか Capacitorの低スコアの典型的な原因
暗号化 クラス、フィールド、メソッド名が短い名前で変更される minifyEnabled まだ false
最適化 R8はバイトコードをインライン化、統合、書き換えます デフォルト proguard-android.txt 含まれる -dontoptimize
縮小 未使用のクラスとメソッドの削除 リソース/code の圧縮は、常にオフ

Play では r8.json Capacitor Android をビルドするときに最新の Android Gradle Plugin 8.10 またはそれ以上のバージョンを使用すると、Play は mapping.txtそうでない場合は DEX の推測法を使用します。minification をオフにした Capacitor アプリは、ほとんどのマッピングファイルが存在しないため、Play は読み取れる名前を認識し、数パーセントのオブフュージョン (通常は既にオブフュージョンされたライブラリ AAR から残っているもの) を報告します。その結果は 3% vitals スコアと一致します。

公式ポリシー: Play Console の技術的品質要件実装の詳細: DEX の code 最適化 そして Capacitor Android を使用してアプリの最適化を有効にする.

なぜ Capacitor アプリがこのチェックを通過しないのか

Capacitor Android テンプレートは、リリースビルドを含めてもまだ配布している しかし R8:

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

これは android-template/app/build.gradleのデフォルト設定である。

Your JavaScript is already minified by Vite or webpack. Play does not count that. Only native DEX names, unused native code, and R8 optimizations count.

あなたのJavaScriptはViteまたはwebpackによってすでに最適化されている。Playはそれを認めない。ただし、ネイティブDEX名、未使用のネイティブ __CAPGO_KEEP_0__、R8最適化のみがカウントされる。

ステップ1 — リリース用R8を有効にする android/app/build.gradle (Groovy is the Capacitor default) and change the (Groovyは __CAPGO_KEEP_0__ のデフォルト設定である)そしてリリース設定を変更する ブロック:

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 (縮小 + オブfuscate + 最適化) です。
  2. shrinkResources true 未使用の Android リソースを削除します。最適化が必要です。
  3. この R8 設定のために使用してください proguard-android-optimize.txt. proguard-android.txt ships -dontoptimize、R8 最適化をブロックし、AGP 9 でエラーが発生します。Play はどの縮小器でも許可します。Capacitor アプリは、最適化のデフォルト値で R8 を使用する必要があります。詳しくは Capacitor プラグイン AGP 9 ビルド エラー修正 を参照してください。

プラグインが古いファイルを参照している場合、 minifyEnabled true 設定しないでください。 debug. リリース専用でローカル実行が速く、スタックトレースが読みやすい。

ステップ 2 — R8 のフルモードを無効にしないでください。

開く android/gradle.properties そして、存在する場合にこの行を削除してください:

android.enableR8.fullMode=false

AGP 8+ はすでにフルモードを有効にしているため、そのフラグを残すと最適化が効果を発揮しなくなります。

また、検索してください。 android/app/proguard-rules.pro (そして、追加の) -include ファイル) に:

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

そのルールは、Play スコアが低くなるようにします。スコアを下げるために、. を切り替えるときに。 minifyEnabledステップ 3 — __CAPGO_KEEP_0__ プラグインだけを残す

R8 はリフレクションメタデータを使用します。 Capacitor プラグインはアノテーションによって検出されるため、保持ルールが必要です。

Capacitor 通常、自分で追加することはありません。 Capacitor 3.2.3 以降 @capacitor/android 提供 消費者用 ProGuard ルール クラス

  • @CapacitorPlugin 、パーミッションとアクティビティコールバック @PluginMethodクラスが拡張している
  • レガシー com.getcapacitor.Plugin
  • コルダバープラグインクラス @NativePlugin __CAPGO_KEEP_0__ 6/7/8 の現在の行に留まることで、消費者用のルールが適用されます。

Stay on a current Capacitor 6/7/8 line so those consumer rules are applied.

__CAPGO_KEEP_0__ 6/7/8 の現在の行に留まることで、消費者用のルールが適用されます。 android/app/proguard-rules.pro 日本語 Google PlayのオブフュージョンとCapacitor Android

# Good: one misbehaving plugin package
-keep class com.mycompany.myplugin.** { *; }

# Bad: this will tank obfuscation and shrinking
-keep class com.getcapacitor.** { *; }
-keep class ** { *; }

崩壊する Capgo plugin directory狭い勝つ広い 第三者プラグインがターゲットされたキープルール後にまだクラッシュする場合、プラグインを更新し、Capgo プラグインディレクトリからメンテナンスされている代替を検討する。 __CAPGO_KEEP_0__ プラグインディレクトリ

Official Capacitor notes: __CAPGO_KEEP_0__ コンサルティング.

に問い合わせて修正する。

公式__CAPGO_KEEP_0__ノート

ProGuardの使用

npm run build
npx cap sync android
cd android
./gradlew bundleRelease

Google PlayのオブフュージョンとCapacitor Android release 署名設定がなければ .aabこれらのタスクは成功しますが、署名されていない

.署名するには、Android Studioで署名する必要があります。 リリースAPKを にインストールします。./gradlew assembleReleaseデバイスにAPKをインストールすると、 app/build/outputs/apk/release/の下にあるAPKは .aab はGoogle Playのアップロード形式であり、サイドロードするものではありません。 npx cap run android ネイティブプラグインを実行してください(カメラ、プッシュ、ファイル、請求、認証)。

R8のバグは android/セッションでは表示されません。

  • app/build/outputs/mapping/release/mapping.txt
  • app/build/outputs/mapping/release/configuration.txt
  • AGP 8.10 以降の最新パッチで r8.json アプリ バンドル内

それら release フォルダはデフォルトの Capacitor バリアントです。製品フラバーとマッピングはバリアント名の下にあります (mapping/freeRelease/APKは apk/<flavor>/release/ の例 apk/free/release/).

が欠けている場合、間違ったバリアントのフォルダにいます、CIで組み立てられた mapping.txt 、またはR8が debugで実行された場合、再度 -dontobfuscateを確認し、オブフュージョンを無効にするルールが存在しないことを確認してください。 minifyEnabled true 製品フラバー release CIで組み立てられた

Step 5 — Crash Report の読み取りを維持する

オブフュージド スタック トレースはマッピング ファイルがないと無駄です。読み取りを mapping.txt それぞれの Play バージョンについて:

  • Play Console: テストとリリース → アプリ バンドル エクスプローラー → ダウンロード → アセット, それをアップロード mapping.txt もしすでにアップロードされていない場合は
  • Firebase Crashlytics / Sentry: CI の一部として同じマッピングをアップロードする

Android Studio / AGP はマッピングを .aab. 依然としてアップロード後のアセット タブを確認する

Step 6 — Play にアップロードし、再度確認する

新しい .aab Google PlayのオブフュージョンとCapacitor Android

  1. Open: Test and release → アプリパッケージエクスプローラ
  2. そのバージョン
  3. DEXサイズプラスオブフュージョン/最適化/縮小率 Monitor and improve → Androidビタルズ

新バージョンがPlayで分析されるのはそのバージョン 必要なのは 25%それぞれの proguard-android-optimize.txt usually jumps a Capacitor app from single-digit obfuscation to well above 25% on all three.

通常、__CAPGO_KEEP_0__アプリは、1桁のオブフュージョンから25%を超えるすべての3つのメトリックに飛びます。 Playはのみで DEXが10MBを超えるアプリ (ゲームは50MB) の場合、25%のフロアが適用されます。 その下でも、修正はまだ価値があります: 小さいDEX、メモリの使用量が少なく、起動時間が短くなります。

あなたはまだ25%未満の場合

R8が有効ですが、Play (またはローカルアナライザー) は弱いスコアを示しています。通常の残りは広範囲にわたる保持ルールです。

  1. Open R8設定アナライザー あなたのAndroid Gradle Pluginが9.3以上の場合 — assembleRelease その場合、次のファイルを生成します。 configanalyzer.html 次に mapping.txtAGP 9.2以前の場合、skipするHTMLファイルを使用し代わりに mapping.txtAPKアナライザー、Playのアプリバンドルエクスプローラーを使用します。
  2. 保持ルールを、どれだけアプリを凍結するかでソートします。ライブラリの消費者ルールは編集できませんが、通常のルールです。アプリレベル -keep class com.foo.** { *; } はそうではありません。
  3. Android StudioのAPKアナライザを開きます。 .aab Android StudioのAPKアナライザで、選択した大きな .dex ファイルを表示し、デオブフュージュされた名前を切り替えます (必要なのは) mapping.txt大きく読みやすいまま残っているパッケージは、すべて削除するパッケージです。
  4. まだ参照しているプラグインを更新してください。 proguard-android.txtAGP 9では、オプティマイズをブロックするファイルです。また、古いプラグインでは、警告を表示します。

低スコアを改善するためにDEXを縮小して、 minifyEnabled false と期待するヒューリスティクスを変更するのではなく、修正しないでください。 Playは縮小、オプティマイズ、 そして

オブフュージュを望んでいます。

  • これは、代わるものではありません。 in vite.config.ts 動作を実行しない
  • Capgo ライブ更新 __CAPGO_KEEP_0__ HTML/JS/CSSを配信します。 DEXを再構築する必要はありません。 R8がストアバイナリに含まれている場合、JSの修正をオーバー・ザ・エアで配信できます。 オブフューザー・チェック自体には、Playのネイティブアップロードが必要です。
  • 16 KBのページサイズ これはPlayのネイティブ要件として別個です。 ご参照ください。 Android 16 KBのページサイズ.

すでにAndroidをビルドしている場合に Capgo ビルド, android/app/build.gradle リポジトリ内で変更 GitHub Actions Android buildsワークフローを組み立てる必要があります。 リリースデバッグではありません。

FAQ

R8を有効にすると、Capacitor プラグインが破壊されることはありませんか?

プラグインが反射を使用し、消費者が保持するルールを提供していない場合、破壊される可能性があります。Core Capacitor は既にプラグインクラスを保持しています。リリースビルドをテストしてください。破壊されるパッケージにのみ、狭い保持ルールを追加してください。プラグインがメンテナンスされていない場合、Capacitor Consulting はフォークしてビルドを維持できます。 狭い 保持ルールを追加してください。 Capgo Consulting 確認することはできますか?

__CAPGO_KEEP_0__ npx cap run __CAPGO_KEEP_0__

No. そのコマンドは、R8をオフにしたデバッグビルドを使用しています。 / bundleRelease / 署名プレイアップロードを使用してください。

既に設定済みです。 minifyEnabled true なぜ3%が表示されるのですか?

、を検索してください。 -dontobfuscate, proguard-android.txt, android.enableR8.fullMode=false、と全面的な -keep ルールを確認してください。CIが最適化されたAABをアップロードしたか、古いアーティファクトをアップロードしたかを確認してください。

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 /アプリ全体 -keep class **
  • Capacitor 3.2.3+ そのプラグインの消費者規則が適用される
  • リリースビルドで生成される mapping.txt
  • ネイティブプラグインはリリースインストールでテストされる
  • 新規 .aab アップロード済み;アプリバンドルエクスプローラーでマッピングが付属
  • オブフュージョン、最適化、縮小それぞれ25%以上

そのPlay Consoleの警告は、CapacitorがR8をオフにした、PlayがDEXをスコアリングし、1行のリリースGradleの変更とストアのアップロードが修正の鍵

Keep going from Fix Google Play Obfuscation Below 25% in Capacitor Apps

あなたが使用している Fix Google Play Obfuscation Below 25% in Capacitor Apps を使用してAndroidストアのリリースを計画する場合、__CAPGO_KEEP_0__を接続する Capgo Native Builds __CAPGO_KEEP_0__ のリリース用アプリパッケージ Capgo CI/CD __CAPGO_KEEP_0__ のアップロードパイプライン用CI/CD CI/CDの統合 __CAPGO_KEEP_0__ の実装詳細 自動Capacitor AndroidビルドとGitHubアクション __CAPGO_KEEP_0__ 自社のパイプライン用 Capgo のコンサルティング __CAPGO_KEEP_0__ がR8が有効になるときにプラグインが破損した場合

Capacitor アプリの Google Play オブフュージョンを 25% 未満に下げる方法を続けてください。

Capgoのウェブ層のバグが生じた場合、Capgoを使用して修正を配信し、App Storeの承認待ちの日数を待たずに修正を実施する。ユーザーはバックグラウンドで更新を受け取り、ネイティブの変更は通常のレビュー経路で残る。

マーティンによる人工知能サポート

スタートする

最新のブログ

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