Menggunakan R8 Configuration Analyzer

R8 Configuration Analyzer adalah alat yang dirancang untuk membantu Anda memaksimalkan manfaat performa R8 dengan memberikan insight mendetail tentang kualitas konfigurasi aplikasi Anda. Alat ini memungkinkan Anda melacak dan meningkatkan pengoptimalan R8 dengan memantau metrik utama—khususnya skor penyingkatan, pengoptimalan, dan obfuscation—yang menunjukkan persentase codebase Anda yang tersedia untuk pengoptimalan. Dengan mengidentifikasi aturan keep yang luas atau tidak perlu, termasuk yang diperkenalkan oleh library pihak ketiga, analyzer ini membantu Anda menyempurnakan konfigurasi untuk memastikan R8 dapat mengoptimalkan sebanyak mungkin class, kolom, dan metode Anda secara efektif.

Membuat laporan

Dengan AGP 9.3.0 dan yang lebih tinggi, Anda dapat membuat laporan R8 Configuration Analyzer menggunakan tugas Gradle mandiri khusus atau secara otomatis selama build R8.

Menjalankan tugas Gradle mandiri (Direkomendasikan untuk penggunaan lokal)

Saat melakukan iterasi aktif pada aturan keep, gunakan tugas Gradle mandiri untuk mengevaluasi dampak perubahan Anda dengan cepat tanpa membuat APK atau App Bundle sepenuhnya:

./gradlew :app:analyzeReleaseR8Config

Karena tugas ini melewati pembuatan APK atau App Bundle, tugas ini memberikan loop masukan yang jauh lebih singkat. Hal ini memungkinkan Anda menganalisis dengan cepat pengaruh aturan keep terhadap skor penyingkatan, pengoptimalan, dan obfuscation, serta segera menyempurnakannya. Laporan HTML dibuat di app/build/reports/r8/r8-config-analyzer-release.html.

Membuat laporan secara otomatis selama build reguler

Saat menjalankan build rilis R8 lengkap (seperti assembleRelease), laporan akan otomatis dibuat di build/outputs/mapping/release/configanalyzer.html. Untuk menonaktifkan pembuatan output otomatis selama build reguler, tetapkan properti Gradle berikut:

android.experimental.r8.enableR8ConfigurationAnalyzer=false

Untuk AGP 9.2 dan yang lebih lama

Untuk AGP 9.2 dan yang lebih lama, tetapkan properti sistem com.android.tools.r8.dumpkeepradiushtmltodirectory saat menjalankan tugas Gradle dengan build yang diaktifkan dengan R8.

./gradlew assembleRelease \
    -Dcom.android.tools.r8.dumpkeepradiushtmltodirectory=<output_directory>

Misalnya, gunakan perintah berikut untuk membuat laporan HTML di direktori /tmp/r8analysis:

# To create the /tmp/r8analysis folder.
mkdir -p /tmp/r8analysis

# To generate the report in the /tmp/r8analysis folder.
./gradlew assembleRelease \
    -Dcom.android.tools.r8.dumpkeepradiushtmltodirectory=/tmp/r8analysis

Memahami laporan

R8 Configuration Analyzer memberikan insight tentang konfigurasi R8 aplikasi Anda dan dampak setiap aturan keep pada aplikasi Anda. Hal ini membantu Anda mendapatkan pengoptimalan maksimum dari R8, sehingga meningkatkan performa aplikasi Anda. Gunakan skor berikut untuk memahami seberapa banyak codebase Anda yang tersedia untuk pengoptimalan oleh R8.

Contoh bagian ringkasan laporan
Gambar 1. Contoh bagian ringkasan laporan.

Skor penyingkatan

Saat R8 menyingkat aplikasi Anda, R8 akan mengurangi ukuran keseluruhan aplikasi Anda dengan mengidentifikasi dan menghilangkan kode serta resource yang tidak digunakan, sehingga memastikan build akhir Anda sesederhana mungkin. Skor penyingkatan melacak persentase class, kolom, dan metode yang tunduk pada penyingkatan. Misalnya, skor penyingkatan sebesar 66% berarti R8 dapat melakukan penyingkatan di 66% codebase Anda.

Skor pengoptimalan

R8 melakukan pengoptimalan seperti inlining metode dan penggabungan class yang menghasilkan peningkatan startup dan memori untuk aplikasi Anda. Skor pengoptimalan melacak persentase class, kolom, dan metode yang tunduk pada pengoptimalan R8. Misalnya, jika skor pengoptimalan adalah 66%, berarti R8 hanya dapat melakukan pengoptimalan di 66% codebase Anda.

Skor obfuscation

Dengan meng-obfuscate class, kolom, dan metode menjadi nama yang lebih pendek, R8 mengurangi metadata aplikasi untuk menghemat memori. Skor obfuscation mengukur persentase kode yang tersedia untuk obfuscation dalam codebase Anda.

Menyempurnakan aturan keep

Untuk meningkatkan skor dan mendapatkan pengoptimalan R8 yang lebih baik, Anda harus menyempurnakan aturan keep agar tidak mencegah R8 mengoptimalkan aplikasi Anda secara tidak perlu. Anda hanya boleh menyimpan class, metode, atau kolom yang diakses menggunakan refleksi.

Untuk mencapainya, gunakan Analisis Aturan Keep.

Contoh analisis aturan penyimpanan
Gambar 2. Contoh analisis aturan keep.

Untuk melihat analisis mendetail tentang aturan, klik aturan tersebut untuk membuka layar detail.

Contoh analisis aturan penyimpanan
Gambar 3. Contoh analisis aturan keep.

Cara menyempurnakan aturan keep

Untuk menyempurnakan aturan keep dan mendapatkan potensi penuh pengoptimalan R8 untuk aplikasi Anda, lakukan hal berikut:

  1. Untuk setiap aturan keep, lihat persentase class, kolom, dan metode yang tidak dapat dioptimalkan oleh R8 di Configuration Analyzer. Gunakan ini untuk mengidentifikasi aturan keep yang mencegah pengoptimalan dalam jumlah besar class, kolom, atau metode. Properti pengoptimalan yang dicegah oleh setiap aturan keep juga tercantum.
  2. Jika Anda melihat aturan keep yang mencegah pengoptimalan sejumlah besar class, Anda harus memastikan untuk memeriksa class, kolom, dan metode mana yang dicegah dari pengoptimalan oleh aturan keep untuk melihat apakah aturan ini menyimpan item yang tidak dipanggil secara dinamis menggunakan refleksi.
  3. Kurangi pengoptimalan yang diblokir oleh aturan keep dengan hanya menargetkan yang diperlukan class, kolom, atau metode dengan memilih opsi keep yang tepat dan mengikuti praktik terbaik.
  4. Selidiki dan jalankan pengujian yang mencakup class, kolom, dan metode yang terpengaruh dari aturan keep, lalu sempurnakan aturan keep.

Memeriksa pengoptimalan library

Saat Anda mengintegrasikan library pihak ketiga, library tersebut sering kali menyertakan aturan keep konsumennya sendiri untuk bekerja dengan R8. Karena penulis library tidak dapat memprediksi penerapan spesifik Anda, terkadang mereka menulis aturan konservatif yang luas dan mencegah pengoptimalan di lebih banyak class, kolom, dan metode daripada yang diperlukan. Hal ini dapat mencegah R8 mengoptimalkan bagian aplikasi Anda yang tidak ada hubungannya dengan eksekusi runtime sebenarnya dari library. Anda dapat menggunakan R8 Configuration Analyzer untuk mengidentifikasi library yang memperkenalkan aturan yang berdampak negatif pada pengoptimalan aplikasi Anda.

Gunakan configuration analyzer untuk memeriksa efek gabungan dari semua aturan keep konsumen yang digabungkan. Dengan menganalisis dampak setiap aturan keep yang berasal dari library pihak ketiga, Anda dapat mengidentifikasi dan melacak library pihak ketiga tertentu yang mencegah pengoptimalan dalam jumlah besar di aplikasi Anda.

Cara mengoptimalkan library

Untuk mengatasi aturan keep yang diperkenalkan oleh library pihak ketiga, lakukan hal berikut:

  • Jika library menyertakan aturan yang terlalu luas, sebaiknya hubungi pengelola library dengan data dari laporan Anda untuk menunjukkan bagaimana aturan saat ini memengaruhi skor pengoptimalan aplikasi Anda. Jika library tersebut adalah library eksternal, cari bug yang ada di library sebelum mengajukan masalah.
  • Jika perlu, Anda dapat menguji potensi peningkatan dengan memfilter aturan dari library tertentu. Anda dapat mengimpor aturan library ke project Anda, mengecualikan aturan yang luas, dan menjalankan kembali configuration analyzer untuk mengukur potensi keuntungan dalam ukuran dan performa.

Aturan yang digabungkan

Mungkin ada kasus ketika beberapa aturan keep tumpang-tindih dan salah satu aturan mungkin mencegah lebih banyak pengoptimalan daripada yang diperlukan. Jika ada dua aturan keep di codebase Anda.

# Prevents optimization in the entire package
# Remove this to improve optimization
-keep class com.example.package.** { *; }

# Prevents optimization to the class inside the package
-keep class com.example.package.Myclass

Aturan keep pertama yang mencegah pengoptimalan di seluruh paket menggabungkan aturan keep kedua yang menargetkan class di dalam paket yang disimpan oleh aturan keep pertama. Saat aturan keep tumpang-tindih, salah satunya dapat memblokir lebih banyak pengoptimalan daripada yang diperlukan. Dengan menyempurnakan aturan yang tumpang-tindih ini, Anda dapat memaksimalkan pengoptimalan R8 dan menghilangkan utang teknis. Proses ini melibatkan penyederhanaan konfigurasi Anda untuk memastikan hanya kode penting yang disimpan sekaligus mendapatkan potensi penuh kemampuan pengoptimalan R8.

Contoh bagian ringkasan laporan
Gambar 4. Contoh aturan yang digabungkan dalam laporan.

Mengoptimalkan aturan yang digabungkan

  1. Temukan aturan keep yang digabungkan menggunakan R8 Configuration Analyzer.
  2. Identifikasi class, kolom, atau metode yang tepat dalam codebase Anda yang benar-benar mengandalkan refleksi, yang harus disimpan menggunakan aturan keep. Mengetahui hal ini akan membantu Anda menyempurnakan aturan keep.
  3. Dengan menggunakan configuration analyzer, bandingkan dampak setiap aturan yang menargetkan class, kolom, atau metode yang sama. Anda dapat menggunakan persentase pengoptimalan yang dicegah oleh setiap aturan keep untuk mengidentifikasi aturan mana yang lebih luas dan aturan mana yang merupakan aturan keep sempit.
    1. Jika aturan sempit ditulis dengan tepat—hanya menyimpan anggota atau class yang diakses secara reflektif—hapus aturan keep yang lebih luas. Tindakan ini akan membuka pengoptimalan R8 dengan aman untuk bagian paket Anda lainnya.
    2. Jika aturan luas menargetkan class yang tepat, pertahankan aturan luas dan hapus aturan sempit. Aturan sempit hanya merupakan kekacauan yang berlebihan. Pastikan untuk menyempurnakan aturan luas agar hanya menargetkan class, kolom, atau metode yang telah Anda identifikasi.

Verifikasi dan uji perubahan Anda: Jalankan kembali configuration analyzer untuk memastikan konflik telah diperbaiki. Kemudian, kompilasi build rilis dan uji perubahan Anda untuk memastikan codebase berfungsi seperti yang diharapkan.

Menghapus aturan yang tidak perlu

Dengan menggunakan configuration analyzer, Anda dapat mengaudit codebase secara sistematis untuk mengidentifikasi dan menghapus aturan keep yang tidak digunakan lagi yang mengacaukan konfigurasi Anda. R8 Configuration Analyzer secara khusus menyoroti dua sumber utama aturan yang tidak perlu:

  • Aturan yang tidak digunakan: Aturan yang tidak cocok dengan class, metode, atau kolom dalam build Anda saat ini. Aturan ini sering kali tetap ada setelah refactoring kode, penghapusan dependensi, atau dari konfigurasi salin-tempel yang tidak lagi relevan, sehingga menambah kompleksitas konfigurasi yang tidak perlu.
  • Aturan yang identik: Aturan keep yang identik berarti aturan yang menargetkan class, kolom, dan metode yang sama atau deklarasi aturan keep duplikat dalam file aturan keep yang sama atau berbeda.

Kedua jenis aturan ini menambah kekacauan pada konfigurasi Anda, sehingga mempersulit pemeliharaan dan proses debug. Dengan mengidentifikasi aturan ini, Anda dapat membersihkan konfigurasi.