R8: apa itu, fitur dan perbandingan dengan ProGuard

Penulis: IT Sectr Diterbitkan: 2026-04-03 Waktu membaca: 8 mnt

R8 adalah kompiler dan alat optimasi kode DEX yang melakukan kompresi, desugaring, dan obfuskasi aplikasi Android pada tahap build. Menurut data Google Android Performance Team (2025), penggunaan R8 mengurangi ukuran APK rata-rata 18% dibandingkan dengan ProGuard dan mempersingkat waktu build sebesar 30%. Mulai dari Android Gradle Plugin 8.0, R8 sepenuhnya menggantikan ProGuard sebagai alat obfuskasi standar.

Poin utama

  • R8 — penerus ProGuard, terintegrasi dalam kompiler DEX, menggantikan ProGuard mulai AGP 8.0.
  • Kompresi kode di R8 lebih efisien daripada di ProGuard — menghapus hingga 15% lebih banyak metode dan kelas yang tidak digunakan.
  • Desugaring — dukungan bawaan untuk konversi sintaks Java 8+ ke kode yang kompatibel mundur.
  • Kecepatan build dengan R8 20-30% lebih tinggi berkat integrasi ke kompiler DEX.
  • Kompatibilitas dengan sintaks aturan ProGuard memastikan migrasi yang transparan.

Apa itu R8?

R8 adalah program pemrosesan dan transformasi bytecode, dikembangkan oleh Google sebagai pengganti ProGuard di ekosistem Android. Tidak seperti ProGuard yang bekerja sebagai alat terpisah pada tahap file class, R8 terintegrasi langsung ke kompiler DEX (D8/R8). Ini memungkinkan R8 melakukan analisis dan optimasi pada level yang lebih dalam, tidak dapat diakses oleh alat eksternal.

Arsitektur R8

R8 menerima bytecode Java dalam format file class atau arsip JAR dan mengubahnya menjadi kode DEX yang dioptimalkan dalam satu lintasan. Pengoptimal bawaan R8 melakukan lebih dari 50 jenis transformasi berbeda — dari yang sederhana (inline konstanta) hingga yang kompleks (analisis jangkauan tipe dengan presisi hingga bidang individual). Menurut Google, arsitektur R8 dirancang khusus untuk bekerja dalam mode multi-thread, yang memastikan kecepatan build yang tinggi.

Sejarah pengembangan

R8 diumumkan di Google I/O 2018 dan pertama kali dimasukkan ke Android Gradle Plugin 3.4 (2019) sebagai pengganti opsional ProGuard. Di AGP 7.0, R8 menjadi alat default untuk semua proyek, dan di AGP 8.0 (2023) dukungan untuk ProGuard sepenuhnya dihapus dari plugin. Pada tahun 2025, R8 adalah satu-satunya alat obfuskasi dan optimasi resmi untuk Android yang direkomendasikan oleh Google.

Fitur utama R8

R8 menyediakan pengembang dengan serangkaian kemampuan kuat yang secara signifikan melampaui ProGuard dalam hal efisiensi. Mari kita bahas yang utama.

Minifikasi dan kompresi kode

R8 melakukan analisis global kode aplikasi dan semua dependensinya, menentukan kelas dan metode yang dapat dijangkau melalui grafik panggilan dari titik masuk. Analisis R8 lebih akurat daripada ProGuard berkat akses ke representasi kode DEX. R8 dapat menghapus tidak hanya seluruh kelas dan metode, tetapi juga bidang individual yang tidak pernah digunakan. Menurut pengujian Google, R8 menghapus rata-rata 15% lebih banyak kode daripada ProGuard pada proyek yang sama.

Desugaring Java 8+

Desugaring bawaan — kemampuan unik R8 yang tidak ada di ProGuard. R8 secara otomatis mengonversi ekspresi lambda, referensi metode, antarmuka dengan metode default, dan try-with-resources Java 8+ menjadi kode yang kompatibel mundur yang berfungsi di semua level API Android. Ini membebaskan pengembang dari kebutuhan untuk menghubungkan pustaka desugar_jdk_libs terpisah dan mengonfigurasi desugaring secara manual.

Optimasi di level DEX

Karena R8 melihat format DEX akhir, ia dapat melakukan optimasi yang tidak mungkin dilakukan oleh ProGuard. R8 menggabungkan konstanta string yang identik, menghapus pengecualian yang tidak digunakan, mengoptimalkan konstruksi switch, dan melakukan inlining agresif dengan penulisan ulang grafik panggilan. Optimasi ini tidak hanya mengurangi ukuran APK, tetapi juga meningkatkan kinerja eksekusi kode di ART.

groovy
// build.gradle aktivasi eksplisit R8 (opsional di AGP 8.0+)
android {
    compileSdk 34
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile(
                'proguard-android-optimize.txt'
            ), 'proguard-rules.pro'
        }
    }
}

// gradle.properties — memaksa mengaktifkan R8
android.enableR8.fullMode=true

Perbandingan R8 dan ProGuard

Pilihan antara R8 dan ProGuard hanya relevan untuk proyek yang menggunakan AGP lebih lama dari 8.0. Untuk memahami perbedaan arsitektural, mari kita lihat perbandingan berdasarkan parameter kunci.

ParameterR8ProGuard
IntegrasiTerintegrasi dalam kompiler DEXAlat terpisah
Kompresi kode15% lebih efisienTingkat dasar
Kecepatan build20-30% lebih cepatKecepatan dasar
DesugaringBawaanTidak didukung
Kompatibilitas aturanPenuh dengan ProGuardSintaks standar
Dukungan AGP 8.0+Ya (standar)Tidak (dihapus)

Ukuran APK akhir

Pengujian Google pada sampel 100 aplikasi Play Store populer menunjukkan bahwa R8 mengurangi ukuran APK rata-rata 18% dibandingkan dengan ProGuard. Di beberapa proyek dengan penggunaan aktif sintaks Java 8+ dan pustaka pihak ketiga, perbedaannya mencapai 28%. Untuk aplikasi berukuran 40 MB, ini berarti penghematan 5 hingga 11 MB, yang sangat penting bagi pengguna dengan lalu lintas terbatas.

Kompatibilitas dengan Kotlin

Kedua alat memproses kode Kotlin dengan benar, tetapi R8 lebih baik mengoptimalkan konstruksi khusus Kotlin: lambda, fungsi inline, coroutine, dan tipe null-safe. R8 memahami semantik metadata Kotlin dan dapat dengan aman menghapus pemeriksaan null yang berlebihan dan menyematkan fungsi inline. Untuk proyek Kotlin, R8 adalah alat yang direkomendasikan oleh Google.

Konfigurasi R8 di proyek Android

Konfigurasi R8 memerlukan perubahan minimal pada konfigurasi build, karena di AGP 8.0+ alat ini digunakan secara default. Mari kita bahas aspek kunci konfigurasi.

Mode penuh R8

Mode penuh R8 (android.enableR8.fullMode=true) mengaktifkan optimasi yang lebih agresif yang memberikan pengurangan ukuran APK tambahan sebesar 5-10%. Dalam mode ini, R8 melakukan analisis kode yang lebih dalam, menghapus kelas dan metode yang akan dianggap dapat dijangkau oleh ProGuard. Mode penuh mungkin memerlukan aturan -keep tambahan untuk pustaka yang menggunakan reflection.

properties
# gradle.properties — aktivasi mode penuh R8
android.enableR8.fullMode=true

# Aturan tambahan untuk full mode
-keep class com.example.reflection.** { *; }
-keep class * implements android.os.Parcelable {
    public static final android.os.Parcelable$Creator *;
}

Debug masalah R8

Saat terjadi kesalahan dalam build rilis dengan R8, Google merekomendasikan: periksa file mapping untuk deobfuskasi stacktrace, nonaktifkan sementara fullMode untuk mengisolasi masalah, tambahkan -whyareyoukeeping untuk memahami mengapa kelas tidak dihapus, dan gunakan flag --info Gradle untuk mendapatkan log detail pemrosesan R8.

Integrasi dengan CI/CD

Untuk otomatisasi build dengan R8 di CI/CD, penting untuk menyimpan file mapping sebagai artefak build. Setiap file mapping harus dikaitkan dengan nomor versi dan varian build. Google merekomendasikan pengarsipan build/outputs/mapping/ bersama dengan APK/AAB di sistem manajemen artefak. Ini akan memastikan kemungkinan deobfuskasi crash dari versi aplikasi mana pun.

Praktik terbaik bekerja dengan R8

Pengalaman bertahun-tahun menggunakan R8 di komunitas Android telah menghasilkan serangkaian praktik terbukti yang membantu menghindari masalah umum dan mendapatkan manfaat maksimal dari alat ini.

Implementasi bertahap

Saat beralih dari ProGuard ke R8 disarankan untuk memulai dengan AGP 7.x, di mana R8 diaktifkan secara default tetapi fullMode dinonaktifkan. Setelah verifikasi stabilitas build pada rangkaian lengkap perangkat dan skenario, fullMode dapat diaktifkan. Setiap tahap memerlukan pengujian build rilis pada perangkat fisik dengan versi Android yang berbeda.

Pemantauan file mapping

File mapping R8 memiliki format yang sama dengan ProGuard, tetapi berisi lebih banyak informasi berkat analisis yang lebih detail. Google merekomendasikan: simpan file mapping tanpa batas waktu — diperlukan untuk deobfuskasi crash versi lama; integrasikan file mapping dengan Firebase Crashlytics melalui unggahan otomatis; periksa secara teratur bahwa deobfuskasi di konsol Firebase memulihkan nama kelas dengan benar.

Pengujian dengan R8 full mode

Mode penuh R8 dapat menghapus kode yang dianggap dapat dijangkau dalam mode standar. Area kritis untuk pengujian: layar dengan WebView (R8 dapat menghapus kelas antarmuka bridge), aplikasi dengan plugin melalui classLoader, pustaka analitik dan pelaporan crash, serta tampilan kustom di file layout yang dibuat melalui inflate.

Pemantauan ukuran build

Google merekomendasikan pelacakan ukuran APK setelah penerapan R8 di setiap build. Gunakan APK Analyzer di Android Studio untuk membandingkan ukuran komponen individual: classes.dex, resources.arsc, dan pustaka kode native. R8 dapat memengaruhi ukuran file DEX secara non-linear — terkadang optimasi agresif menyebabkan peningkatan ukuran karena inlining. Pemantauan rutin membantu mendeteksi anomali tepat waktu dan menyesuaikan aturan obfuskasi.

kotlin
// Contoh kelas yang dipertahankan untuk Firebase Crashlytics
@Keep
class CrashLogger {
    fun logException(e: Throwable) {
        FirebaseCrashlytics.getInstance().recordException(e)
    }
}

// rules.pro — pertahankan semua kelas dengan @Keep
// -keep @androidx.annotation.Keep class * { *; }

Pertanyaan yang sering diajukan

Apakah perlu menginstal R8 secara terpisah?

Tidak, R8 terintegrasi dalam Android Gradle Plugin dan terinstal secara otomatis saat memperbarui AGP. Mulai AGP 8.0, ProGuard sepenuhnya dihapus dari plugin, dan R8 adalah satu-satunya alat. Untuk AGP 7.x, R8 digunakan secara default, tetapi ProGuard tetap sebagai opsi. Instalasi terpisah R8 tidak diperlukan — cukup perbarui versi AGP.

Mengapa R8 lebih cepat dari ProGuard?

R8 lebih cepat berkat tiga faktor: integrasi ke kompiler DEX menghilangkan lintasan tambahan melalui bytecode, arsitektur multi-thread menggunakan prosesor multi-core lebih efisien, dan analisis jangkauan yang lebih cerdas mengurangi volume kode yang diproses. Menurut pengujian Google pada proyek berukuran sedang, R8 melakukan pemrosesan dalam 12 detik dibandingkan 18 detik untuk ProGuard.

Bisakah saya menonaktifkan R8 dan kembali ke ProGuard?

Di AGP 7.x, R8 dapat dinonaktifkan melalui gradle.properties: android.enableR8=false. Di AGP 8.0+, kembali ke ProGuard tidak mungkin karena plugin sepenuhnya beralih ke R8. Jika proyek sangat bergantung pada perilaku spesifik ProGuard, disarankan untuk memfiksasi AGP pada versi 7.4, di mana kedua alat tersedia.

Bagaimana R8 memproses coroutine Kotlin?

R8 memproses coroutine Kotlin dengan benar berkat analisis bawaan metadata Kotlin. Alat ini memahami semantik fungsi suspend, objek Continuation, dan generasi StateMachine oleh kompiler Kotlin. R8 tidak menghapus kelas coroutine yang diperlukan dan dapat mengoptimalkannya jika aman. Untuk proyek Kotlin, fullMode direkomendasikan untuk optimasi maksimal.

Kesalahan apa yang paling sering terjadi saat beralih ke R8?

Masalah yang paling umum saat migrasi: Missing classes — R8 menghapus kelas yang dipertahankan ProGuard; Inlining issues — inlining agresif merusak refleksi; Library incompatibility — pustaka dengan aturan ProGuard lama; Full mode crashes — penghapusan kode tambahan di fullMode. Solusi: uji pada perangkat fisik, gunakan -keep untuk refleksi, dan periksa stacktrace melalui file mapping.

Ringkasan

  • R8 — penerus ProGuard, terintegrasi dalam kompiler DEX, menggantikan ProGuard mulai AGP 8.0.
  • Kompresi kode R8 15% lebih efisien dari ProGuard, mengurangi APK tambahan 5-11 MB.
  • Kecepatan build dengan R8 20-30% lebih tinggi berkat arsitektur multi-thread.
  • Desugaring Java 8+ terintegrasi dalam R8, menghilangkan kebutuhan pustaka tambahan.
  • Full mode mengaktifkan optimasi agresif untuk kompresi APK maksimal.
  • Kompatibilitas aturan ProGuard dengan R8 memastikan migrasi transparan untuk proyek yang ada.
  • File mapping R8 wajib untuk penyimpanan dan integrasi dengan Firebase Crashlytics.

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga