Langkah Kepada Konten Utama

Pemecahan Google Play di Bawah 25% di Aplikasi Capacitor

Melewati Pengujian Obejekasi Google Play 25% di Aplikasi Android Capacitor dengan Mengaktifkan R8, Mengurangi DEX yang Tidak Digunakan, dan Mengirimkan Aplikasi Bundle Rilis.

Kredit Artikel

Martin Donadieu

Pengarang

Valeria

Pengulas

Jordan

Pengedit

Perbaiki Obejekasi Google Play di Bawah 25% di Aplikasi Capacitor

Play Console sekarang menandai aplikasi Android Capacitor Optimasi aplikasi di bawah ambang batas kamiPeringatan Penggunaan Aplikasi Otomatisasi tetap ada 3%. Google setidaknya ingin otomatisasi, optimasi, dan pengecilan. 25% pengubahan, pengoptimalan, dan pengurangan. Penerapan dimulai di Februari 2027, dan gagalnya dapat mengurangi visibilitas dan pilihan publikasi.

Peringatan ini tampak seperti ini di Android vitals:

Pemberitahuan Android vitals di Google Play Console menampilkan otomatisasi pada 3 persen, di bawah ambang batas optimasi aplikasi 25 persen, dengan tanggal perbaikan Februari 2027

Ini adalah masalah DEX Android asli. Ini bukan tentang bundle Vue, React, atau Angular Anda. Capgo perubahan live update juga tidak akan mengubah skor ini. Anda perlu memperbaiki skor tersebut di Android Gradle release build, kemudian unggah aplikasi Bundle yang baru.

Apa yang diukur oleh Google

Google Play memeriksa 10 MB Dalam aplikasi Android Bundle Anda: kode Java dan Kotlin yang telah dikompilasi, termasuk Capacitor, plugin, dan AndroidX. Mulai Februari 2027, aplikasi dengan lebih dari 10 MB harus menabrak DEX 25% Artinya apa

Metric Obfuscation Typical Capacitor cause of a low score
is masih Nama kelas, bidang, dan metode diubah menjadi nama pendek minifyEnabled diatasi false
Optimization R8 mengintegrasikan, menggabungkan, dan mengubah bytecode Default proguard-android.txt termasuk -dontoptimize
Shrinking Kelas dan metode yang tidak digunakan dihapus Pengurangan Ukuran Sumber/code tidak pernah diaktifkan

Play membaca r8.json ketika Anda membangun dengan patch terbaru Android Gradle Plugin 8.10 atau lebih tinggi. 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% Kebijakan resmi:

Kebijakan resmi: Kriteria Kualitas Teknis Console Play. Detail Implementasi: Optimasi DEX code dan aktifkan optimasi aplikasi dengan R8.

Mengapa aplikasi Capacitor gagal memenuhi tes ini

Template Android Capacitor masih mengirimkan rilis aplikasi tanpa R8:

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

Itu adalah default di android-template/app/build.gradle. Aplikasi debug harus tetap seperti itu. Aplikasi rilis tidak boleh, jika Anda menerbitkannya ke Play.

JavaScript Anda sudah di-minifikasi oleh Vite atau webpack. Play tidak menghitung itu. Hanya nama DEX native, code native yang tidak digunakan, dan optimasi R8 yang dihitung.

Langkah 1 — Aktifkan R8 untuk rilis

Buka android/app/build.gradle (Groovy adalah Capacitor default) dan ubah blok: Rilis Bagian:

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

Jika modul menggunakan Kotlin DSL (build.gradle.kts):

buildTypes {
    getByName("release") {
        isMinifyEnabled = true
        isShrinkResources = true
        proguardFiles(
            getDefaultProguardFile("proguard-android-optimize.txt"),
            "proguard-rules.pro"
        )
    }
}

Tiga hal yang penting:

  1. minifyEnabled true ini yang sebenarnya menjalankan R8 (mengurangi + mengaburkan + mengoptimalisasi).
  2. shrinkResources true menghapus sumber daya Android yang tidak digunakan. Ini memerlukan minifikasi.
  3. Untuk pengaturan R8 ini, gunakan proguard-android-optimize.txt. proguard-android.txt Mengirim -dontoptimizeyang menghalangi optimasi R8 dan gagal AGP 9. Play memungkinkan penggunaan shrinker apa saja; Capacitor aplikasi harus menggunakan R8 dengan pengaturan default optimize. Capacitor Mengatasi Kesalahan Pembangunan Plugin AGP 9 jika plugin masih mengacu pada file lama.

Tidak atur minifyEnabled true di debug. Hanya menjalankan lokal tetap cepat dan tumpukan jejak dapat dibaca.

Langkah 2 — Jangan nonaktifkan R8 full mode

Open android/gradle.properties dan hapus baris ini jika ada:

android.enableR8.fullMode=false

AGP 8+ sudah mengaktifkan mode penuh. Mengganti flag tersebut akan mengurangi optimasi.

Juga cari android/app/proguard-rules.pro Juga cari (dan setiap tambahan -include file-file) untuk:

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

Those rules will keep Play scores low even after you flip minifyEnabledHapuslah kecuali Anda memiliki alasan yang terdokumentasi dan sementara.

Langkah 3 — Simpan plugin Capacitor, bukan aplikasi seluruhnya

R8 menggunakan metadata refleksi. Plugin Capacitor ditemukan melalui annotasi, sehingga mereka memerlukan aturan-aturan. Biasanya Anda tidak menambahkannya sendiri. Sejak Capacitor 3.2.3, @capacitor/android mengirimkan aturan-aturan ProGuard konsumen yang menjaga:

  • @CapacitorPlugin kelas, @PluginMethod, callback hak istimewa dan aktivitas
  • Kelas yang mengembangkan com.getcapacitor.Plugin
  • Warisan @NativePlugin dan kelas plugin Cordova

Tetaplah pada garis Capacitor saat ini 6/7/8 agar aturan konsumen tetap berlaku.

Tambahkan aturan tambahan di android/app/proguard-rules.pro Hanya untuk crash yang dapat Anda reproduksi di build rilis. Lebih sempit lebih baik daripada lebih luas:

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

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

Jika plugin pihak ketiga masih crash setelah aturan keep yang ditargetkan, update plugin tersebut, kemudian pertimbangkan alternatif yang dipelihara dari direktori plugin __CAPGO_KEEP_0__ Direktori plugin Capgoatau tanyakan Konsultasi Capgo mengpatchinya

Catatan resmi Capacitor: Menggunakan ProGuard.

Langkah 4 — Bangun bundle rilis nyata

APK debug akan masih menampilkan ~0% pengaburan. Play hanya menilai apa yang Anda unggah.

Dari root proyek:

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

Tidak ada release signingConfig, these tasks still succeed but emit an unsigned .aabTanda tanganlah di Android Studio sebelum unggah ke Play.

Instal APK rilis pada perangkat ( kemudian APK di./gradlew assembleReleasesetelah itu, file APK tersebut app/build/outputs/apk/release/. Apa itu .aab adalah format unggah Play, bukan sesuatu yang disidik. Lakukan plugin-plugin native (kamera, push, file, billing, autentikasi). Masalah R8 tidak akan muncul di sesi debug. npx cap run android sesi debug.

Konfirmasikan apakah R8 telah berjalan: android/Konfirmasikan R8 telah berjalan:

  • app/build/outputs/mapping/release/mapping.txt
  • app/build/outputs/mapping/release/configuration.txt
  • Pada patch terbaru AGP 8.10 atau lebih tinggi, r8.json di dalam Bundle Aplikasi

Those release folders are the default Capacitor variant. With product flavors, mapping is under the variant name (mapping/freeRelease/APK tersebut tersembunyi apk/<flavor>/release/ Contohnya apk/free/release/).

If mapping.txt tidak ada, Anda berada di folder varian yang salah, CI telah diatur debugatau R8 telah dijalankan dengan -dontobfuscate. Periksa kembali minifyEnabled true di release dan aturan yang tidak mematikan pengaburan.

Langkah 5 — Pastikan laporan kegagalan dapat dibaca

Tidak ada informasi yang dapat diakses tanpa file pemetaan. mapping.txt untuk setiap versi Play:

  • Console Google Play: Uji coba dan rilis → Pengembaraan bundle aplikasi → Unduh → Sumber dayaConsole Play: mapping.txt Uji dan rilis → Pemutus aplikasi → Unduh → Asset
  • Firebase Crashlytics / Sentry: unggah peta yang sama sebagai bagian dari CI.

Android Studio / AGP seringkali menyematkan peta dalam .aab. Masih verifikasi tab Assets setelah upload yang dioptimalkan pertama kali.

Langkah 6 — Unggah dan periksa Play

Upload file baru .aab ke dalam jalur uji coba internal (produksi tidak diperlukan untuk memperbarui skor). Buka:

  1. Uji coba dan rilis → Pengembaraan bundle aplikasi Uji dan rilis → Pemutus aplikasi
  2. Ukuran DEX plus persentase pengobatan / optimasi / pengurangan ukuran
  3. Monitor dan perbaiki → Kinerja Android setelah versi baru adalah yang Play analisis

Anda perlu 25% pada setiap di antara tiga metrik, tidak hanya pengacakan. Mengaktifkan R8 dengan proguard-android-optimize.txt biasanya membuat aplikasi Capacitor meningkat dari pengacakan satu digit ke di atas 25% pada semua tiga.

Hanya di Play menetapkan lantai 25% ketika DEX melebihi 10 MB untuk aplikasi (50 MB untuk game). Bahkan di bawah itu, memperbaikinya masih layak dilakukan: DEX yang lebih kecil, memori yang lebih sedikit, startup yang lebih cepat.

Jika Anda masih di bawah 25%

R8 aktif, tapi Play (atau analisis lokal) masih menunjukkan skor yang lemah. Aturan broad keep biasanya adalah sisa yang biasa.

  1. Buka Analisis Konfigurasi R8 jika plugin Gradle Android Anda adalah 9.3 atau lebih baru — assembleRelease maka menulis configanalyzer.html dekat mapping.txt. Pada AGP 9.2 dan sebelumnya, lewati file HTML tersebut dan gunakan mapping.txt, APK Analyzer, dan eksplorator bundle aplikasi Play alih-alih.
  2. Urutkan aturan penyimpanan sesuai dengan bagian aplikasi yang mereka beku. Aturan konsumen library yang tidak dapat diedit adalah normal. Aturan aplikasi-tingkat -keep class com.foo.** { *; } tidak.
  3. Buka .aab Pilih file APK besar di Android Studio APK Analyzer .dex files, and toggle deobfuscated names (needs mapping.txtPaket-paket yang tetap besar dan dapat dibaca adalah paket-paket yang harus dihentikan secara besar-besaran.
  4. Perbarui plugin yang masih mengacu proguard-android.txtItu file menghalangi optimasi pada AGP 9 dan merupakan tanda peringatan pada plugin yang lebih tua.

Jangan "perbaiki" skor rendah dengan mengurangi DEX minifyEnabled false dan berharap heuristik berubah. Play ingin mengecilkan, optimasi, dan obfuscation.

Apa yang ini tidak menggantikan

  • Apakah ini tidak menggantikan in vite.config.ts tidak bergerak ini metrik.
  • Capgo pembaruan langsung ship HTML/JS/CSS. They do not rebuild DEX. After R8 is on in the store binary, you can still ship JS fixes over the air. The obfuscation check itself needs one native Play upload.
  • 16 KB ukuran halaman adalah syarat native Play yang terpisah. Lihat Android 16 KB ukuran halaman.

Jika Anda sudah membangun Android dengan Capgo Pembangunan, ubah android/app/build.gradle di repositori. Proses build cloud berikutnya akan mengambil R8. Anda tidak perlu pipeline Play yang berbeda, hanya binary rilis yang diproduksi dengan minifikasi aktif. GitHub Actions Android builds__CAPGO_KEEP_0__ Actions Android builds releasetidak debug.

FAQ

Will enabling R8 break my Capacitor plugins?

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 tetapkan aturan hanya untuk paket yang bermasalah. Jika plugin tidak dipelihara, Capgo Konsultasi mungkin dapat membagi dan menjaga tetap berjalan.

Apakah npx cap run terbukti saya melewati cek?

Tidak. Perintah itu menggunakan bangun debug dengan R8 off. Gunakan bundleRelease / a unggah Play yang ditandatangani.

Sudah kita atur minifyEnabled true tetapi masih melihat 3%. Mengapa?

Cari untuk -dontobfuscate, proguard-android.txt, android.enableR8.fullMode=false, dan aturan tutup. -keep Konfirmasi CI telah mengunggah AAB yang di-minifikasi, bukan artefak lama.

Apakah kita memerlukan ProGuard daripada R8?

Tidak. R8 adalah plugin pengurang Gradle Android. Ia membaca file aturan ProGuard. Dokumen Play Google memungkinkan penggunaan pengurang apa pun; R8 adalah satu-satunya pengurang yang harus digunakan oleh aplikasi Capacitor.

Checklist

  • release { minifyEnabled true; shrinkResources true }
  • proguard-android-optimize.txt Tidak proguard-android.txt)
  • No -dontobfuscate / -dontoptimize / app-wide -keep class **
  • Capacitor 3.2.3+ sehingga aturan konsumen plugin berlaku
  • Release build menghasilkan mapping.txt
  • Plugin Native diinstalasi rilis telah diuji
  • New .aab diunggah; peta yang terkait dalam eksplorator bundle aplikasi
  • Ditambahkan; peta nama yang terkait dalam Pemutus Paket Aplikasi

Itu adalah peringatan seluruh Console Play: Capacitor meninggalkan R8, Play mulai menghitung DEX, dan perubahan Gradle satu baris plus unggah ke toko adalah solusi.

Teruskan dari Fix Google Play Obfuscation Below 25% di Capacitor Aplikasi

Jika Anda menggunakan Fix Google Play Obfuscation Below 25% di Capacitor Aplikasi untuk merencanakan rilis aplikasi Android, hubungkan dengan Capgo Pembangunan Asli untuk bundle aplikasi rilis, Capgo CI/CD untuk pipeline unggah, Integrasi CI/CD untuk detail implementasi, Automatic Capacitor Android build with GitHub actions Untuk pipeline yang dihost sendiri, dan Capgo Konsultasi Jika plugin rusak setelah R8 diaktifkan.

Pembaruan Langsung untuk Aplikasi Capacitor

Ketika ada bug layer web yang hidup, kirimkan perbaikan melalui Capgo daripada menunggu hari-hari untuk persetujuan toko aplikasi. Pengguna mendapatkan update di latar belakang sementara perubahan native tetap dalam jalur review normal.

Terbaru dari Blog Kami

Capgo memberikan Anda wawasan terbaik yang Anda butuhkan untuk membuat aplikasi seluler yang profesional.