Kena limit referensi 64K di Android

Salah satu horor ketika memprogram Android adalah limitasi Method 64K. Dengan limitasi ini, pemrogram harus bisa mengatur agar jangan sampai method yang digunakan (dan berbagai pusatakanya) melebihi dari 65536 buah. Sayangnya itu sulit, setidaknya buat saya.

Seperti dialami salah satu aplikasi yang saya kembangkan. Saat build rilis terakhir sekitar sebulan lalu, tidak ada masalah dengan limitasi ini. Tapi tadi sore ketika mau coba build debug dan release, tiba-tiba saja muncul error seperti di bawah ini.

Dari hasil googling dan ubek-ubek StackOverflow, katanya error itu merupakan pertanda bahwa aplikasi yang saya kembangkan sudah mencapai batas limit 64K. Duh.

Sebenarnya, apa itu limitasi Method 64K? Mengutip dari sini, limitasi method atau batas referensi 64K adalah ketika jumlah total metode yang bisa dirujuk dalam file DEX tunggal sudah melebihi dari 65.536 alias 2^16. Ini termasuk metode kerangka kerja Android, metode pustaka, dan metode yang kita buat.

Mengingat sulit untuk tetap membatasi metode yang dipakai kurang dari 64K, solusinya adalah dengan memecah APK sesuai arsitektur ponsel pengguna. Karena itu multidexEnabled  harus diatur true.

Tapi itu tidak cukup jika aplikasi yang kita bangun ingin juga mendukung versi Android yang lebih lama, seperti KitKat (API 19) atau Jelly Bean (17). Untuk itu kita harus menambahkan pustaka multidex, sehingga berkas build.gradle-nya seperti ini:

Selain itu, pada berkas Application.java (atau nama kelas lain yang extends dari Application), tambahkan method attachBaseContext(Context base) :

Jika kita gunakan kelas Application, jangan lupa tambahkan baris berikut di berkas AndroidManifest.xml :

Seharusnya, sekarang kita bisa build lagi aplikasinya. Minimal untuk melakukan debugging. Tapi, di saya masih ada masalah. Ketika coba lakukan build Release APK, masih terjadi error, terutama ketika proguard-nya diaktifkan :|. Ketika proguardnya dinonaktifkan, eh bisa di-build. Nasib. Semoga di build yang terakhir ini tidak ada error lagi.

*Ditulis sambil nunggu proses build signed APK yang sudah berjalan sekitar satu jam dan masih belum selesai juga*

Ada komentar?

%d bloggers like this: