Cara Mengoptimalkan Aplikasi Android (NDK) Dalam 2 Menit pada Aristektur Intel


Saya Jean-Claude Cottier, seorang veteran di industri video game. Saya sudah bekerja di bidang ini selama 18 tahun dan pada tahun 2008 saya membuat studio game solo saya sendiri: Ovogame. Game saya tersedia di beberapa platform termasuk android http://bit.ly/1i8aA1D.

Baru-baru ini pada Intel CodeFest, saya mengoptimalkan semua game saya untuk arsitektur Intel dan itu sangat mudah. Saya akan menjelaskan pengalaman saya dalam melakukan hal tersebut dan mungkin akan membuat kamu tertarik untuk melakukan hal yang sama.

Untuk mengembangkan game saya, saya menggunakan teknologi saya sendiri: sebuah engine multi platform C++ (Android, iOS, BB10, Win32, dan OSX). Saya mengembangkan aplikasi hampir eksklusif pada Win32 dengan Visual Studio Express (untuk keperluan kecepatan dan kemudahan penggunaan).

Untuk mem-porting game saya ke platform lain, saya cukup mengkopi resource (kode sumber dan data) dan dikompilasi ulang menggunakan beberapa peralatan (ADT-NDK untk Android, XCode untuk iOS dan OSX). Biasanya, ini memerlukan beberapa menit karena semuanya 100% kompatibel di semua platform.

Untuk mencapai keajaiban kecil ini, engine saya hanya menggunakan kode standar C++ dan API antar platform (OpenGL, OpenAL, OpenSL). Untuk mengatur format file (jpeg, ogg, zip), saya menggunakan sebuah pustaka C/C++ yang berbeda dengan kode sumbernya agar saya dapat mengkompilasinya di platform apapun.

Tentu saja, saya masih menggunakan sedikit kode spesifik untuk tiap platform (Java, Objective C, DirectX), namun saya menggunakan kode tersebut seminimal mungkin dan tidak tercaput dengan kode game.

Ketika kamu mengembangkan aplikasi Android secara native, NDK mengkompilasikan kode C++ kamu menjadi sebuah pustaka yang dapat diintegrasikan ke proyek Java dikarenakan antarmuka JNI. Pada engine saya, kode Java dijaga ke minimum (kebanyakan untuk komunikasi dengan sistem) dan tidak pernah mengubah dari satu game ke yang lainnya.

Sekarang mungkin untuk membuat sebuah aplikasi Android hanya menggunakan C++ (tidak ada Java), namun tidak saya rekomendasikan karena kamu nantinya kadang-kadang kamu akan menggunakan Java API pihak ketiga (untuk menampilkan banner iklan misalnya).

Sekarang, kamu dapat melihat perangkat Android yang ditenagai oleh CPU yang berbeda (ARM, Intel x86). Ini tidak masalah untuk aplikasi yang dikembangkan pada Java karena Java adalah bahasa yang ditafsirkan. Namun ketika kamu mengembangkan aplikasinya pada C++ seperti saya, kamu harus mengkompilasikan kode kamu untuk arsitektur yang spesifik.

Kebanyakan perangkat Android saat ini ditenagai oleh chip ARM. Seperti pengembang C++ lainnya, saya hanya menargetkan arsitektur ARM (armv5 dan armv7). Karena NDK, kamu dapat mengkompilasikan kode kamu ke arsitektur berbeda – armv5 untuk perangkat Android lama dan armv7 untuk yang baru. Secara otomatis akan diatur oleh sistem – APK kamu berisi kedua versi dan ketika pengguna menjalankan aplikasi kamu, kode yang paling tepat akan digunakan.

Perangkat yang ditenagai oleh aristektur x86 tentu tidak dapat menjalankan kode ARM (karena arsitektur mereka berbeda). Konsekuensinya, perangkat tersebut harus menafsirkan kode ARM melalui mesin virtual. Bahkan jika perangkat x86 dapat menafsirkan kode ARM, sayang jika performa penuh mereka tidak digunakan.

Jika kamu mengkompilasikan kode untuk x86, aplikasi kamu akan berjalan lebih cepat pada perangkat Intel dan mengkonsumsi lebih sedikit daya baterai. Secara keseluruhan, akan menjadi pengalaman yang lebih bagus bagi pengguna.

Sangat mudah untuk mendukung x86 karena kamu cukup perlu memasukkan target kompilasi baru. Kamu perlu membuat jni/Application.mk melalui editor teks dan perbaharui variabel APP_ABI variable (itu yang mendefinisikan target yang berbeda).

Karena saya hanya menargetkan armv5 dan armv7 sebelumnya, variabel saya diset seperti berikut:

APP_ABI := armeabi armeabi-v7a

Untuk menambahkan dukungan arsitektur Intel, kamu cukup menambahkan x86 pada daftar.

APP_ABI := armeabi armeabi-v7a x86

Sekarang, setiap kamu mengkompilasikan aplikasi kamu, kamu akan mendapatkan target ekstra yang kompatibel dengan arsitektur x86 yang ditambahkan ke APK kamu. Ketika aplikasi diinstal pada perangkat berbasis Intel, kode kompatibel baru inilah yang akan dieksekusi.

Semua game saya sekarang sudah dioptimalkan untuk perangkat x86. Jika seperti saya kamu sedang mengembangkan aplikasi kamu dalam C++ dengan NDK, bagusnya kamu juga menargetkan arsitektur x86. Ini sangat sederhana dan sayang jika kamu tidak memanfaatkannya.

Secara personal, saya tidak menemui masalah teknikal apapun dalam mendukung target baru ini karena engine saya menggunakan C++ standar. Bahkan, saya mengkompilasi ulang semua game saya di hari yang sama.

Kamu perlu mengetahui bahwa APK-nya akan sedikit lebih besar (untuk menyimpan kode x86) yang akan menyebalkan jika besar aplikasi kamu dekat dengan batasan 50MB pada Google Play.

Jika kamu menggunakan API pihak ketiga yang dikompilasikan untuk ARM, kamu tidak akan dapat menggunakannya lagi. Saya hanya mencoba menggunakan satu pustaka eksternal dengan kode sumber yang disediakan karena ini lebih bersahabat antar platform.

Jika kamu perlu mengubah sesuatu pada makefile bergantung pada arsitektur saat ini yang sedang dikompilasikan, kamu dapat mengubah Android.mk dan menambahkan kondisi:

ifeq ($(TARGET_ARCH_ABI), x86)

‘This code will be visible only when compiling the x86 target.’

endif

Jika kamu ingin membaca artikel yang lebih mendalam tentang mem-porting aplikasi Android kamu ke x86, kamu dapat menujungi situs web Intel Developer Zone for Android: http://intel.ly/1jnDfAd

Saya benar-benar berpikir bahwa kebanyakan pengembang yang menggunakan NDK seperti saya (dengan engine mereka sendiri atau Cocos2D sebagai contoh), menambahkan kata x86 ke variabel APP_ABI seharusnya sudah cukup untuk mendukung perangkat berbasis Intel. Kamu akan setuju bahwa ini memungkinkan untuk dilakukan dalam dua menit. Kamu saya sarankan untuk mencobanya.

* Artikel ini adalah hasil sindikasi konten dengan Intel Developer Zone. Artikel asli bisa dilihat di link ini.