2017-12-20
Malam ini, 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.
1cd /path/to/android/sdk/emulator/
2./emulator -list-avds
Akan muncul daftar nama AVD yang kita miliki. Contohnya seperti ini
1Nexus_4_API_26
2Nexus_7_2012_API_21_2
3Samsung_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 :D
Muncul pesan error kurang lebih seperti berikut
1libGL error: unable to load driver: i965_dri.so
2libGL error: driver pointer missing
3libGL error: failed to load driver: i965
4libGL error: unable to load driver: i965_dri.so
5libGL error: driver pointer missing
6libGL error: failed to load driver: i965
7libGL error: unable to load driver: swrast_dri.so
8libGL error: failed to load driver: swrast
9X Error of failed request: BadValue (integer parameter out of range for operation)
10Major opcode of failed request: 155 (GLX)
11Minor opcode of failed request: 24 (X_GLXCreateNewContext)
12Value in failed request: 0x0
13Serial number of failed request: 68
14Current 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 yang terpasang di sistemmu :D . Seharusnya sampai sini sudah berhasil. Jika masih tidak bisa jalan. Coba periksa apakah library mesa sudah terpasang atau belum.
Selamat melanjutkan pengembangan aplikasi :D
android, android emulator, pemrograman