Pengoptimalan kode DEX adalah temuan Android vitals yang membantu Anda memantau dan meningkatkan kualitas kompilasi, ukuran, dan performa aplikasi. Mengoptimalkan dan meng-obfuscate kode Anda menggunakan R8 atau alat alternatif (seperti pengoptimal yang kompatibel dengan ProGuard atau pasca-pemroses DEX sekunder) akan mengurangi ukuran DEX aplikasi Anda, meningkatkan performa runtime, dan meminimalkan jejak memori.
File DEX, atau Dalvik Executable, berisi kode yang dikompilasi yang digunakan
untuk menjalankan aplikasi Anda. Biasanya mencakup kode Java dan Kotlin, bukan
kode C++ yang dikompilasi atau file .so.
Android vitals melaporkan metrik pengoptimalan kode DEX untuk semua aplikasi dan game, tetapi hanya menerapkan nilai minimum untuk aplikasi dan game yang memenuhi persyaratan ukuran tertentu.
Mendeteksi masalah
Android vitals dapat memberi tahu Anda jika tingkat pengoptimalan kode DEX aplikasi Anda rendah. Hal ini mencakup obfuscation, penyingkatan, dan pengoptimalan untuk aplikasi dan game yang menggunakan R8. Untuk aplikasi yang tidak menggunakan R8, Android vitals mencoba memeriksa tingkat pengoptimalan, penyusutan, dan obfuscation, tetapi akan kembali ke heuristik obfuscation sebagai proxy jika diperlukan.
Memantau status pengoptimalan
Android vitals dapat membantu meningkatkan performa aplikasi dengan memberi tahu Anda melalui Konsol Play jika aplikasi Anda tidak memenuhi persentase yang ditentukan minimum untuk pengoptimalan kode. Untuk mengetahui definisi mendetail tentang penyingkatan, pengoptimalan, dan obfuscation, lihat Menggunakan R8 Configuration Analyzer.
Untuk aplikasi yang dibangun dengan patch terbaru AGP versi 8.10 atau yang lebih tinggi, persentase ini diambil dari file r8.json yang disertakan.
Untuk versi AGP yang lebih rendah atau jika file r8.json tidak disertakan, persentase dihitung dari file mapping.txt jika disertakan, atau menggunakan heuristik DEX jika file pemetaan tidak tersedia.
Untuk aplikasi yang dioptimalkan dengan pengoptimal kode alternatif, Android vitals melakukan analisis untuk memperkirakan persentase class, metode, dan kolom yang di-obfuscate dalam paket aplikasi.
Minimum total ukuran DEX
Meskipun Android vitals menghitung metrik pengoptimalan kode untuk semua aplikasi, Anda hanya akan menerima pemberitahuan jika paket aplikasi Anda memenuhi persyaratan ukuran DEX total berikut:
- Aplikasi: Bundle berisi kode DEX minimal 10 MB yang diukur sebagai ukuran yang tidak dikompresi
- Game: Bundle berisi setidaknya 50 MB kode DEX yang diukur sebagai ukuran tidak terkompresi
Android vitals menampilkan ukuran DEX aplikasi Anda, tetapi Anda juga dapat mengukurnya secara lokal menggunakan command line:
unzip -l <yourapp>.aab | grep -E '\.dex$' | awk '{sum+=$1} END {print sum}'
Mengukur pengoptimalan kode R8 secara lokal
Jika aplikasi Anda dioptimalkan dengan R8, Anda dapat mengukur pengoptimalan, obfuscation, dan penyusutan paket aplikasi menggunakan R8 Configuration Analyzer. Laporan R8 Configuration Analyzer juga disertakan dalam R8 Analyzer Skill. Meskipun laporan ini dapat membantu Anda memahami pengaruh aturan penyimpanan terhadap skor pengoptimalan, pengecilan, dan pengaburan, persentase dalam laporan tidak akan cocok dengan nilai di Android vitals, karena persentase ini dihitung sebelum pengoptimalan.
Untuk memeriksa metadata persis yang digunakan Android vitals untuk menghitung skor Anda,
ekstrak file r8.json dari app bundle Anda:
unzip -p <yourapp>.aab BUNDLE-METADATA/com.android.tools/r8.json
Memperbaiki masalah
Untuk mengatasi skor pengoptimalan kode DEX yang rendah, tinjau rekomendasi berdasarkan sistem build dan pengoptimal Anda:
Plugin Android Gradle dan R8
Untuk meningkatkan skor pengoptimalan kode DEX R8, lihat panduan di Meningkatkan pengoptimalan R8. Anda juga dapat menggunakan R8 Analyzer skill untuk mendapatkan panduan tambahan tentang cara mengoptimalkan aturan keep aplikasi Anda.
Sistem build dan pasca-pemroses DEX non-R8
Jika pipeline build Anda menggunakan alat build kustom atau pemroses DEX sekunder, lakukan langkah-langkah berikut untuk meningkatkan pengoptimalan aplikasi Anda:
- Buka app bundle Anda di Android Studio dan lihat di APK Analyzer.
- Pilih semua file
.dex. - Perhatikan baik-baik file dengan ukuran terbesar saat Anda mengaktifkan tombol "Deobfuscate nama" (catatan: Anda harus mengupload file
mapping.txt). Jika Anda menemukan beberapa file tersebut tetap berukuran besar saat di-obfuscate, kemungkinan file tersebut terpengaruh oleh aturan mempertahankan seluruh paket. - Lihat di file
proguard-rules.pro,configuration.txt, atau yang setara untuk pengoptimal Anda jika Anda tidak menggunakan R8, lalu cari aturan keep yang cocok dengan paket yang tidak di-obfuscate. Misalnya, jikacom.foo.adalah paket besar di dex Anda, cari aturan keep dengan format-keep com.foo.**atau-keep com.foo.bar.**. - Perlu diingat bahwa aturan penyimpanan konsumen pustaka mungkin tidak mudah diidentifikasi. Jika Anda menduga aturan konsumen library memengaruhi pengoptimalan, Anda dapat memvalidasi secara lokal dengan menambahkannya ke aplikasi contoh mandiri menggunakan AGP versi terbaru, dan memeriksanya dengan R8 Configuration Analyzer.