Pengoptimalan kode DEX

Pengoptimalan kode DEX adalah temuan Android vitals yang membantu Anda memantau dan meningkatkan kualitas kompilasi, ukuran, dan performa aplikasi. Mengoptimalkan dan meng-obfuscate kode menggunakan R8 atau alat alternatif (seperti pengoptimal yang kompatibel dengan ProGuard atau post-prosesor DEX sekunder) akan mengurangi ukuran DEX aplikasi, meningkatkan performa runtime, dan meminimalkan jejak memori.

File DEX, atau Dalvik Executable, berisi kode kompilasi yang digunakan untuk menjalankan aplikasi Anda. Biasanya, kode ini 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, penyusutan, dan pengoptimalan untuk aplikasi dan game yang menggunakan R8. Untuk aplikasi yang tidak menggunakan R8, Android vitals akan mencoba memeriksa tingkat pengoptimalan, penyusutan, dan obfuscation, tetapi akan menggunakan 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 minimum yang ditentukan untuk pengoptimalan kode. Untuk mengetahui definisi mendetail tentang penyusutan, pengoptimalan, dan obfuscation, lihat Menggunakan R8 Configuration Analyzer.

Untuk aplikasi yang dibuat dengan patch terbaru AGP versi 8.10 atau yang lebih baru, persentase ini diambil dari file r8.json yang disertakan.

Untuk versi AGP yang lebih rendah atau jika file r8.json tidak disertakan, persentase akan 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 akan melakukan analisis untuk memperkirakan persentase class, metode, dan kolom yang di-obfuscate dalam app bundle.

Total ukuran DEX minimum

Meskipun Android vitals menghitung metrik pengoptimalan kode untuk semua aplikasi, Anda hanya akan menerima pemberitahuan jika app bundle memenuhi persyaratan total ukuran DEX berikut:

  • Aplikasi: Bundle berisi kode DEX minimal 10 MB yang diukur sebagai ukuran tanpa kompresi
  • Game: Bundle berisi kode DEX minimal 50 MB yang diukur sebagai ukuran tanpa kompresi

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 app bundle, obfuscation, dan penyusutan menggunakan R8 Configuration Analyzer. Laporan R8 Configuration Analyzer juga disertakan dalam R8 Analyzer Skill. Meskipun laporan ini dapat membantu Anda memahami pengaruh aturan keep terhadap skor pengoptimalan, penyusutan, dan obfuscation, 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:

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.

Sistem build dan post-prosesor DEX non-R8

Jika pipeline build Anda menggunakan alat build kustom atau post-prosesor DEX sekunder, lakukan langkah-langkah berikut untuk meningkatkan pengoptimalan aplikasi:

  • Buka app bundle di Android Studio dan lihat di APK Analyzer.
  • Pilih semua file .dex.
  • Perhatikan file dengan ukuran terbesar saat Anda mengalihkan tombol "Deobfuscate names" (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 keep di seluruh paket.
  • Cari 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, jika com.foo. adalah paket besar di dex Anda, cari aturan keep dengan format -keep com.foo.** atau -keep com.foo.bar.**.
  • Perlu diingat bahwa aturan keep konsumen library mungkin tidak mudah diidentifikasi. Jika Anda menduga aturan konsumen library memengaruhi pengoptimalan, Anda dapat memvalidasinya secara lokal dengan menambahkannya ke aplikasi contoh mandiri menggunakan AGP versi terbaru, dan memeriksanya dengan R8 Configuration Analyzer.