Studi Kasus

Tinder memangkas cold start aplikasi sebesar 47% dengan R8 Configuration Analyzer baru

Waktu baca: 4 menit

Tinder memiliki misi untuk mendukung dan menginspirasi koneksi nyata dengan membuat pertemuan menjadi mudah dan menyenangkan bagi setiap generasi lajang baru. Namun, seiring bertambahnya ukuran codebase aplikasi Android mereka, kompleksitasnya juga meningkat. Sebelum upaya pengoptimalan terbaru, sekitar 70% aplikasi tidak dioptimalkan, dengan 17 file dex,termasuk tiga file yang dikhususkan untuk memulai. Meskipun mereka telah mengaktifkan R8, sebagian besar potensi pengoptimalannya diblokir karena aturan keep, dan tim tidak dapat mengidentifikasi aturan spesifik mana yang mencegah pengoptimalan. Untuk mengurangi waktu startup dan mengurangi error Aplikasi Tidak Merespons (ANR) yang dirasakan pengguna, Tinder menggunakan Configuration Analyzer R8 baru untuk mengatasi tantangan ini.

Dengan memanfaatkan R8 Configuration Analyzer, Tinder berhasil mengidentifikasi dan menghapus pemblokir pengoptimalan yang tidak disengaja. Hasilnya langsung terlihat dan berdampak besar: Tinder berhasil mengurangi cold start aplikasi sebesar 47%, memperkecil ukuran download aplikasi sebesar 28,98% (menjadi 61,5 MB), dan mengurangi ANR yang dirasakan pengguna sebesar 28%.

Penganalisis konfigurasi 

R8 Configuration Analyzer menampilkan  pengoptimalan R8 dengan melacak skor penyingkatan, pengoptimalan, dan obfuscation untuk menampilkan area penyempurnaan yang tersedia. Laporan ini menampilkan aturan keep yang luas, redundan, atau usang, termasuk aturan dari library eksternal, sehingga Anda dapat menganalisis dampak aturan keep dan menyempurnakan aturan keep.

Metrik utama yang ditampilkan di Configuration Analyzer meliputi:

  • Skor Penyingkatan: Persentase kode yang tersedia untuk penyingkatan R8.
  • Skor Pengoptimalan: Persentase kode yang dapat dioptimalkan (misalnya, inlining metode, penggabungan class horizontal).
  • Skor Obfuscation: Persentase class, metode, dan kolom yang dapat diganti namanya oleh R8 untuk mengurangi ukuran.

Gunakan penganalisis untuk mengaudit aturan keep dan dampaknya:

  • Menemukan aturan yang luas: Mempersempit cakupan aturan seluruh paket yang membatasi pengoptimalan R8, serta mengidentifikasi class, metode, dan kolom tertentu yang dikecualikan dari penyingkatan, pengoptimalan, dan obfuscation.
  • Sempurnakan aturan: Targetkan hanya class/metode tertentu yang memerlukan refleksi untuk mengaktifkan pengoptimalan
  • Hapus aturan redundan: Hapus aturan yang tidak cocok dengan class, metode, atau kolom apa pun dalam build Anda saat ini.
  • Aturan identik: Aturan keep yang identik berarti aturan yang menargetkan class, kolom, dan metode yang sama atau deklarasi duplikat aturan keep dalam file aturan keep yang sama atau di seluruh file aturan keep.
  • Menemukan aturan yang tercakup: Bersihkan aturan tertentu yang sudah tercakup dalam konfigurasi yang lebih luas.
  • Mengidentifikasi library yang bermasalah: Periksa dampak pengoptimalan gabungan dari aturan keep konsumen yang digabungkan dari semua library.
R8-Configuration-Analyzer-Screenshot.png
Laporan R8 Configuration Analyzer dari aplikasi contoh

Untuk membantu Anda menggunakan R8 Configuration Analyzer dengan alat agentic, kami telah memublikasikan keahlian R8 Analyzer. Keterampilan ini mengoptimalkan alur kerja pengembangan otomatis dengan meringkas laporan R8 Configuration Analyzer untuk menampilkan metrik utama: skor pengoptimalan, obfuscation, dan penyingkatan. Alat ini juga menyoroti lima aturan keep yang paling berdampak, sehingga memberi Anda insight yang jelas tentang hal yang memblokir pengoptimalan kode.

Menunjukkan pemblokir pengoptimalan tersembunyi

image.png

Sebelum mengintegrasikan R8 Configuration Analyzer, aplikasi Android Tinder mengalami utang teknis yang signifikan karena codebase yang sangat tidak dioptimalkan. Kurangnya pengoptimalan ini secara langsung menurunkan kualitas pengalaman pengguna, sehingga pengguna mengalami cold start yang lambat 

Untuk mengatasi masalah ini, tim Tinder menggunakan R8 Configuration Analyzer untuk mengaudit konfigurasi R8 mereka secara komprehensif. Alat analisis menunjukkan pengoptimalan R8 pada codebase sekitar 28% bahkan dengan mode penuh R8. Dengan R8 Configuration Analyzer, Tinder mengidentifikasi bahwa library internal memperkenalkan aturan keep yang luas dan tidak tercakup. 

# Prevents optimization in all public classes along with all of their public and protected members

-keep public class * {
    public protected *;
}

Aturan "luas" ini secara tidak sengaja mencakup berbagai dependensi di seluruh aplikasi, sehingga mencegah pengoptimalan di sejumlah besar class. Karena aturan yang terlalu inklusif mencegah error runtime, developer sering kali lupa menambahkan aturan baru untuk fitur baru yang menggunakan refleksi, sehingga masalah tersembunyi menumpuk seiring waktu.

Dengan memanfaatkan insight yang diberikan oleh R8 Configuration Analyzer, tim berhasil melacak dan menganalisis class tertentu yang terpengaruh oleh aturan keep yang luas dari library. Tim segera menemukan bahwa pengoptimalan diblokir di class yang lebih besar dan tidak dipanggil secara dinamis, tempat R8 dapat melakukan pengoptimalan. Dengan menyempurnakan aturan keep khusus ini, Tinder dapat memanfaatkan kemampuan pengoptimalan yang signifikan, mengurai konfigurasi lama, dan meningkatkan angka pengoptimalan secara keseluruhan secara drastis, dengan skor R8 meningkat dari 28% menjadi 50%, sehingga mendorong peningkatan performa langsung di seluruh aplikasi, dan tim Tinder secara aktif berupaya untuk lebih meningkatkan angka ini.

  • Pemuatan Lebih Cepat: Tim berhasil mengurangi 47% pengguna yang mengalami cold start lambat pada aplikasi.
  • Ukuran Lebih Kecil: Ukuran download Aplikasi turun dari 86,6 MB menjadi 61,5 MB (penurunan 28,98%).
  • Stabilitas yang Lebih Baik: Error Aplikasi Tidak Merespons (ANR) yang dirasakan pengguna menurun dari 0,35% menjadi 0,28%, sehingga secara signifikan mendekati angka median pembanding
  • Mengurangi Kompleksitas: Jumlah total file DEX dikurangi dari 17 menjadi 11, termasuk hanya dua file startup.

Selain peningkatan performa teknis ini, pengoptimalan aplikasi yang lebih baik secara langsung menghasilkan pertumbuhan bisnis yang nyata dan engagement pengguna yang lebih tinggi, terutama di pasar dengan keterbatasan resource.

  • Interaksi Regional: Negara-negara tempat perangkat RAM Rendah menguasai sebagian besar pasar, menunjukkan peningkatan interaksi terbesar, dan penurunan rasio ANR adalah kunci untuk meningkatkan interaksi di pasar yang luas ini.
  • Pertumbuhan Engagement: Engagement meningkat 3% sejak peningkatan pengoptimalan aplikasi.
image.png

Menjaga performa di masa mendatang dengan continuous integration

Menangani minifikasi kode bukan hanya perbaikan satu kali; hal ini memerlukan kewaspadaan yang berkelanjutan. Terinspirasi oleh peningkatan besar yang dicapai melalui R8 Configuration Analyzer, tim Android Tinder secara proaktif mengintegrasikan pemantauan pengoptimalan ke dalam alur kerja harian mereka untuk mencegah regresi.

Tim Tinder menambahkan tugas baru dalam pipeline CI/CD mereka untuk melaporkan perubahan dalam statistik pengoptimalan sehingga semua orang dapat melihat pengaruh kontribusi mereka terhadap pengoptimalan.  Saat memberikan saran kepada developer lain yang mempertimbangkan integrasi konfigurasi R8, tim menekankan pentingnya mengaudit dependensi internal. Meskipun sebagian besar library pihak ketiga yang populer dilengkapi dengan aturan yang jelas, project internal perusahaan yang dianggap "stabil" mungkin sebenarnya memperkenalkan aturan luas yang berdampak negatif pada pengoptimalan secara keseluruhan.

Poin-Poin Penting

Menghadapi codebase yang sangat tidak dioptimalkan dan file DEX dalam jumlah besar, Tinder memerlukan cara untuk mengaudit aturan minifikasi aplikasinya dengan rapi. R8 Configuration Analyzer menyediakan alat ideal yang diperlukan untuk mengidentifikasi aturan library internal yang terlalu luas, class yang terpengaruh oleh aturan keep, sehingga tim dapat mengoptimalkan codebase mereka dengan percaya diri. Hasilnya, Tinder berhasil mengurangi cold start hampir setengahnya, memperkecil ukuran APK-nya lebih dari 28%, dan membangun fondasi yang lebih sehat dan berperforma lebih baik bagi penggunanya, dengan tim yang aktif berupaya meningkatkan angka-angka ini lebih lanjut.

Cara Menggunakan R8 Configuration Analyzer

R8 Configuration Analyzer dan fitur mandirinya dapat digunakan berdasarkan versi Plugin Android Gradle (AGP) Anda saat ini:

1. Rilis AGP 9.3: R8 Configuration Analyzer terintegrasi sepenuhnya dan dirilis dengan AGP 9.3. Saat menjalankan build rilis R8, laporan akan dibuat di folder `build/outputs/mapping/release/configanalyzer.html`.

2. Tugas Gradle Mandiri: AGP 9.3 memperkenalkan tugas Gradle mandiri yang memungkinkan Anda membuat laporan penganalisis tanpa menjalankan build rilis lengkap, sehingga memberikan feedback loop yang jauh lebih cepat saat menyempurnakan aturan keep secara lokal:

./gradlew :app:analyzeReleaseR8Config

Laporan dibuat pada build/reports/r8/r8-config-analyzer-release.html.

3. Penggunaan pada Versi AGP yang Lebih Lama: Jika Anda menggunakan versi di bawah AGP 9.3, Anda tidak perlu memigrasikan seluruh versi AGP untuk menganalisis konfigurasi. Anda dapat mengupdate versi R8 secara independen ke 9.3.7-dev atau yang lebih tinggi dengan mengikuti petunjuk Mengganti R8 di AGP. Untuk membuat laporan secara lokal, jalankan build Anda dengan properti yang ditentukan:

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

Untuk mempelajari lebih lanjut, lihat dokumentasi R8 Configuration Analyzer.

Lanjutkan membaca