Gagal Menjalankan Emulator Android di Linux
Pada suatu malam, saya melakukan update development tools Android. Dan sebuah keanehan terjadi. Selesai melakukan update, emulator Android saya gagal jalan. Hmm, ini mengingatkan saya pada error yang pernah saya alami. Saya pernah menemukan penyebabnya dengan cara menjalankan emulator dari command-line. Sebagai programmer, pastinya hal ini menjadikan kita gelisah dan mengganggu pikiran untuk melanjutkan kegiatan pemrograman.
Tenang, sebenarnya solusinya sederhana, kok. Langkah pertama, kita perlu tahu terlebih dulu apa nama AVD (Android Virtual Device) yang akan kita jalankan.
Masuk ke direktori di mana Android SDK-mu berada.
cd /path/to/android/sdk/emulator/
./emulator -list-avds
Akan muncul daftar nama AVD yang kita miliki. Contohnya seperti ini
Nexus_4_API_26 Nexus_7_2012_API_21_2 Samsung_J7_API_25
Nah, setelah itu kita coba jalankan emulator memakai salah satu nama AVD di atas.
./emulator @Samsung_J7_API_25
Jangan lupa ada karakter @ keongnya ya 😀
Muncul pesan error kurang lebih seperti berikut
libGL error: unable to load driver: i965_dri.so
libGL error: driver pointer missing
libGL error: failed to load driver: i965
libGL error: unable to load driver: i965_dri.so
libGL error: driver pointer missing
libGL error: failed to load driver: i965
libGL error: unable to load driver: swrast_dri.so
libGL error: failed to load driver: swrast X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 155 (GLX)
Minor opcode of failed request: 24 (X_GLXCreateNewContext)
Value in failed request: 0x0
Serial number of failed request: 68
Current serial number in output stream: 69
Kalau kita perhatikan, error ini bermula dari tidak ditemukannya driver i965_dri.so. Ini disebabkan oleh gagalnya emulator mengakses perangkat keras GPU (Graphical Processing Unit) kita karena menggunakan driver bawaan dari Android SDK.
Untuk mengakses GPU, kita perlu membuat supaya emulator menggunakan driver native dari sistem operasi. Hanya dengan mengubah nama berkas driver bawaan Android SDK akan membuat emulator mencari driver dari sistem.
Pada sistem berarsitektur 64bit
cd /path/to/android/sdk/emulator/lib64/libstdc++/
Pada sistem berarsitektur 32bit
cd /path/to/android/sdk/emulator/lib/libstdc++/
Kemudian ubah nama library-nya
mv libstdc++.so.6 libstdc++.so.6.bak
Jika ragu mana arsitektur sistemmu, ubah saja nama berkas di kedua direktori tersebut ¯\_(ツ)_/¯
Dengan begini, emulator akan mencoba mencari driver native GPU sistemmu 😀 . Seharusnya sampai sini sudah berhasil. Jika masih tidak bisa jalan. Coba periksa apakah library mesa sudah terpasang di sistemmu.
Selamat melanjutkan pengembangan aplikasimu 😀 .
Originally published at mnsam.net on December 20, 2017.