Lisensi Dokumen: Copyright © 2008-2014 ilmuti.org Seluruh dokumen di ilmuti.org dapat digunakan, dimodifikasi dan disebarkan secara bebas untuk tujuan bukan komersial (nonprofit), dengan syarat tidak menghapus atau merubah atribut penulis dan pernyataan copyright yang disertakan dalam setiap dokumen. Tidak diperbolehkan melakukan penulisan ulang, kecuali mendapatkan ijin terlebih dahulu dari ilmuti.org
Membuat dan Mengoptimalkan Game Android NDK di
Platform Berarsitektur Intel
ELVITASARI HERIYANTHI
Abstrak
Android Native Development Kit (NDK) adalah peralatan pendamping Android
SDK yang memungkinkan untuk mengimplementasikan kode native seperti C dan
C++ di beberapa bagian aplikasi aplikasi yang ada di android.
Kata kunci : Android Native Development Kit, C++, Aplikasi.
pendahulian
Android adalah sistem operasi open source yang dikembangkan oleh Google. Saat
ini, Android dapat dijalankan di 3 keluarga instruction set architecture: ARM,
x86, dan MIPS. x86 menandakan keluarga instruction set architecture yang
berbasis Intel 8086 CPU yang dikenalkan pada tahun 1978. Mari kita jabarkan
dari sudut pandang aplikasi perbedaan antara x86 (biasa disebut juga Intel
Architecture atau IA) dengan chipset lainnya yang dapat menjalankan Android.
Pembahasan
Aplikasi Android dapat diklasifikasikan ke dalam dua tipe:
Aplikasi Dalvik yang memasukkan kode Java dan menggunakan hanya
Android SDK API resmi dan file sumber yang diperlukan saja seperti .xml
dan .png yang kemudian dikompilasikan ke dalam file APK.
Aplikasi Android NDK yang memasukkan kode Java dan file sumber
ditambah kode C/C++ dan kadang-kadang kode assembly. Semua
kode native dikompilasikan menjadidynamic linked library (file .so) dan
dipanggil oleh Java di program utama melalui mekanisme JNI.
Lisensi Dokumen: Copyright © 2008-2014 ilmuti.org Seluruh dokumen di ilmuti.org dapat digunakan, dimodifikasi dan disebarkan secara bebas untuk tujuan bukan komersial (nonprofit), dengan syarat tidak menghapus atau merubah atribut penulis dan pernyataan copyright yang disertakan dalam setiap dokumen. Tidak diperbolehkan melakukan penulisan ulang, kecuali mendapatkan ijin terlebih dahulu dari ilmuti.org
Android Game Engine
Game engine adalah modul kunci untuk aplikasi game. Ada beberapa game
engine yang dapat dijalankan di Android termasuk engine 2D dan 3D yang open
source maupun yang komersial. Oleh karena itu, sulit untuk memigrasikan dan
mengembangkan game Android ke platform IA. Cocos2d-x dan Unity 3D
adalah game engine paling populer di Android.
Cocos2d-x berbasis pada Cocos2d-iPhone dan terdiri memberi dukungan platform
yang lebih luas dan dengan banyak bahasa pemrograman yang memiliki struktur
API yang sama. Sejak dikenalkan pada tahun 2010, Cocos2d-x telah diunduh
lebih dari 500 juta kali. Pemain besar di industri mobile game seperti Zynga, Glu,
GREE, DeNA, Konami, TinyCo, Gamevil, HandyGames, Renren Games, 4399,
Happy Elements, SDO, dan Kingsoft sudah menggunakan Cocos2d-x.
Unity 3D adalah game engine lintas platform dengan IDE yang terintegrasi yang
dikembangkan oleh Unity Technologies. Ini digunakan untuk
mengembangkan game untukplugin web, platform desktop, konsol, dan
perangkat mobile serta sudah digunakan oleh lebih dari satu juta pengembang
aplikasi. Unity 3D berkembang dari peralatan pengembangangame untuk OS X
pada tahun 2005 hingga menjadi game engine lintas platform. Pembaharuan
terbaru dari Unity 3D, Unity 4.1, dirilis pada bulan Maret 2013. Saat ini sudah
mendukung pengembangan game untuk iOS, Android, Windows, BlackBerry 10,
OS X, Linux, peramban web, Flash, PlayStation 3, XBox 360, Windows Phone,
dan Wii.
Mengembangkan Game Android NDK di Platform IA
Sebelum kita berbicara tentang pengembangan game, kita sebaiknya berbicara
tentang platform Android secara umum terlebih dahulu. Seperti yang
diketahui, game muncul dengan berbagai macam gaya. Setiap
gaya game memerlukan prinsip desain yang berbeda. Pada awal mula proyek,
biasanya ditentukan genre dari sebuah game terlebih dahulu. Kecuali jika kita
menemukan sebuah gaya game yang benar-benar baru dan belum pernah dilihat
sebelumnya, ada kemungkinan besar ide game kita masuk ke salah
satu genre populer. Kebanyakan genre telah memiliki standar
mekanis game (contoh: skema kontrol, tujuan spesifik, dan lain-lain).
Menyimpang dari standar ini dapat membuat sebuah game menjadi terkenal
Lisensi Dokumen: Copyright © 2008-2014 ilmuti.org Seluruh dokumen di ilmuti.org dapat digunakan, dimodifikasi dan disebarkan secara bebas untuk tujuan bukan komersial (nonprofit), dengan syarat tidak menghapus atau merubah atribut penulis dan pernyataan copyright yang disertakan dalam setiap dokumen. Tidak diperbolehkan melakukan penulisan ulang, kecuali mendapatkan ijin terlebih dahulu dari ilmuti.org
karena pemain game selalu ingin sesuatu yang baru. Beberapa genre umum adalah
sebagai berikut:
Arcade & Action
Permainan Otak & Teka Teki
Kartu & Kasino
Kasual
Live Wallpaper
Balapan
Olah Raga
Widget
dan lain-lain
Proses pengembangan game Android yang umum mirip dengan pengembangan
aplikasi Android lainnya. Pertama, untuk Android SDK dan NDK dari situs web
Google dan instal mereka dengan benar.
Diasumsikan kamu sudah melaksanakan semua proses instalasi dan persiapan.
Menggunakan game engine Cocos2d-x sebagai contoh, mari kita lihat bagaimana
caranya membuat game untuk arsitektur Intel.
Unduh Cocos2d-x
Unduh versi stabil terbaru dari Cocos2d-x di situs web: http://www.cocos2d-
x.org/projects/cocos2d-x/wiki/Download
Eksekusikan Batch
Eksekusi batch melalui Windows Explorer. Ketika ditanya untuk lokasi
proyeknya, set ke semacam com.proyekkamu.apasaja dan pilih nama proyek serta
ID target. Ini akan membuat folder dengan nama proyek tersebut di dalam folder
instalasi Cocos2d-x. Kamu seharusnya akan melihat eksekusi dari skripnya tanpa
eror seperti di bawah ini:
Lisensi Dokumen: Copyright © 2008-2014 ilmuti.org Seluruh dokumen di ilmuti.org dapat digunakan, dimodifikasi dan disebarkan secara bebas untuk tujuan bukan komersial (nonprofit), dengan syarat tidak menghapus atau merubah atribut penulis dan pernyataan copyright yang disertakan dalam setiap dokumen. Tidak diperbolehkan melakukan penulisan ulang, kecuali mendapatkan ijin terlebih dahulu dari ilmuti.org
Set Environment Variable untuk NDK_ROOT
Tambahkan environment variable berikut ini di akhir home\<nama
kamu>\.bash_profile (pada kasus ini di c:\cygwin\home\user\.bash_profile):
1
2
3
NDK_ROOT=/cygdrive/<yourname>/
export NDK_ROOT
Restart cygwin dan masukkan cd $NDK_ROOT dan lalu seharusnya kamu
melihat tampilan di bawah ini:
Lisensi Dokumen: Copyright © 2008-2014 ilmuti.org Seluruh dokumen di ilmuti.org dapat digunakan, dimodifikasi dan disebarkan secara bebas untuk tujuan bukan komersial (nonprofit), dengan syarat tidak menghapus atau merubah atribut penulis dan pernyataan copyright yang disertakan dalam setiap dokumen. Tidak diperbolehkan melakukan penulisan ulang, kecuali mendapatkan ijin terlebih dahulu dari ilmuti.org
Eksekusi File build_native.sh
Konfigurasi bawaannya adalah ARM; kita harus mengubahnya untuk
mengkompilasikan ke x86. Buka file \helloworld\proj.android\build_native.sh,
cari perintah ndk-build, dan tambahkan parameter APP_ABI=x86 ke akhir
perintah. Jalankan file tersebut di Cygwin dan kamu akan melihat seperti berikut
ini:
Lisensi Dokumen: Copyright © 2008-2014 ilmuti.org Seluruh dokumen di ilmuti.org dapat digunakan, dimodifikasi dan disebarkan secara bebas untuk tujuan bukan komersial (nonprofit), dengan syarat tidak menghapus atau merubah atribut penulis dan pernyataan copyright yang disertakan dalam setiap dokumen. Tidak diperbolehkan melakukan penulisan ulang, kecuali mendapatkan ijin terlebih dahulu dari ilmuti.org
Impor Proyeknya ke Eclipse
Sekarang masuk ke Eclipse, buat proyek baru, dan pilih impor dari proyek yang
sudah ada.
Build dan Jalankan
Pada tahap ini, Eclipse akan menemukan beberapa masalah:
The import org.cocos2dx.lib cannot be resolved HelloWorld.java
/HelloWorld/src/com/young40/test line 26 Java Problem Cocos2dxActivity cannot
be resolved to a type HelloWorld.java
/HelloWorld/src/com/young40/test line 30 Java Problem Cocos2dxActivity cannot
be resolved to a type HelloWorld.java
/HelloWorld/src/com/young40/test line 33 Java Problem
Kamu harus mengimpor pustaka berikut ini ke Eclipse sebagai proyek:
cocos2d-2.1beta3-x-2.1.1/cocos2dx/platform/android/java
Masuk ke Project => Build dan lalu Run As => Android Application:
Dan lalu sebuah game framework untuk game engine Cocos2d-x akan dibuat.
Kamu dapat menambahkan logika game, suara, gambar, dan lainnya ke proyek ini
untuk membuat gameyang lengkap.
Lisensi Dokumen: Copyright © 2008-2014 ilmuti.org Seluruh dokumen di ilmuti.org dapat digunakan, dimodifikasi dan disebarkan secara bebas untuk tujuan bukan komersial (nonprofit), dengan syarat tidak menghapus atau merubah atribut penulis dan pernyataan copyright yang disertakan dalam setiap dokumen. Tidak diperbolehkan melakukan penulisan ulang, kecuali mendapatkan ijin terlebih dahulu dari ilmuti.org
Optimalisasi Game Android NDK untuk Platform IA
Intel System Studio adalah sebuah set peralatan untuk profiling dan optimalisasi
aplikasi di platform Android. Tentu saja ini juga dapat kita gunakan untuk
mengoptimalisasi game. Intel System Studio sudah termasuk:
Intel C++ Compiler
Intel Graphics Performance Analyzers
Intel VTune Amplifier
(Intel JTAG Debugger)
Di sini kita tidak akan membahas detil dari tiap alat. Sebaliknya, kita akan melihat
dari sebuah contoh tentang bagaimana alat-alat Intel tersebut bekerja.
Pertama, mari kita pilih sebuah aplikasi, yang disebut Bounding Ball, yang akan
kita jalankan di prosesor Intel Atom Z2460 (nama kode Medfield). Game tersebut
memiliki lebih dari 800 bola yang bergerak dengan kecepatan acak dan
berbenturan satu sama lain tanpa teratur. Kita dapat melihat performanya buruk
dengan mengukur nilai FPS yang hanya 6 tanpa optimalisasi.
Kita dapat menggunakan Intel Graphic Performance Analyzers (Intel GPA) untuk
mencari modul mana yang menghambat performa dan melihat mencari tahu
apakah itu terkait CPU atau GPU.
Lisensi Dokumen: Copyright © 2008-2014 ilmuti.org Seluruh dokumen di ilmuti.org dapat digunakan, dimodifikasi dan disebarkan secara bebas untuk tujuan bukan komersial (nonprofit), dengan syarat tidak menghapus atau merubah atribut penulis dan pernyataan copyright yang disertakan dalam setiap dokumen. Tidak diperbolehkan melakukan penulisan ulang, kecuali mendapatkan ijin terlebih dahulu dari ilmuti.org
Tampilan Intel GPA di bawah ini menampilkan grafik yang menjelaskan detil dari
aplikasi ini melalui GPA di platform Android. Dari situ, kita bisa melihat bahwa
total CPU yang digunakan mencapai 52,5%. Itu angka cukup tinggi untuk satu
buah aplikasi. Sementara itu ISP Load, TA Load, TSP Load, dan USSE Total
Load yang berjalan di dalam GPU hanya kurang dari 10% yang berarti bahwa
beban GPU-nya normal. Oleh karena itu dapat kita simpulkan bahwa hambatan
berada pada modul CPU. Untuk menganalisa lebih jauh tentang isu hambatan
CPU, kita perlu untuk mem-profile kode menggunakan VTune Analyzer.
Di sini, kita tidak akan menjabarkan bagaimana caranya menggunakan VTune
Analyzer, kita hanya akan membahas hasil yang kita dapatkan ketika menjalankan
alat tersebut. Permasalahannya adalah fungsi sin dan cos di dalam libm.so. Jadi
pertanyaannya adalah: kenapa aplikasi tersebut menggunakan banyak waktu dan
siklus CPU untuk menjalankan kedua fungsi tersebut?
Lisensi Dokumen: Copyright © 2008-2014 ilmuti.org Seluruh dokumen di ilmuti.org dapat digunakan, dimodifikasi dan disebarkan secara bebas untuk tujuan bukan komersial (nonprofit), dengan syarat tidak menghapus atau merubah atribut penulis dan pernyataan copyright yang disertakan dalam setiap dokumen. Tidak diperbolehkan melakukan penulisan ulang, kecuali mendapatkan ijin terlebih dahulu dari ilmuti.org
Dengan mengecek kode sumber pada aplikasinya, kita temukan bahwa dua fungsi
bermasalah ini dipanggil setiap ketika sebuah bola digambar oleh OpenGL ES.
Dikarenakan geometris dari semua bola adalah sama, hanya ukurannya yang
berbeda, kita dapat menduplikasikan bola-bola menggunakan fungsi OpenGL
glScale agar penggunaan fungsi yang bermasalah tersebut dapat dikurangi secara
besar.
Setelah optimalisasi kode, performa meningkat sebesar 80%; nilai FPS-nya adalah
14. Lebih jauhnya, kita dapat mengkompilasikan aplikasinya dengan Intel C/C++
Compiler untuk mendapatkan performa yang lebih bagus lagi di platform
berarsitektur Intel. Intel C/C++ Compiler memiliki banyak flag untuk optimalisasi
performa di platform IA. Di sini , kita hanya akan mengenalkan beberapa saja.
SSSE3_ATOM
Supplemental Streaming SIMD Extensions 3 (SSSE3 atau SSE3S) adalah
sebuah set instruksi SIMD yang dibuat oleh Intel dan merupakan iterasi
keempat dari teknologi SSE.
IPO
Flag Interprocedural Optimization akan mengurangi pemanggilan fungsi yang
berlebihan, menghilangkan kode mati, dan menyusun ulang propagasi dan
prosedur konstan.
PGO
Flag Profile-Guided Optimizations akan menganalisa dan memberikan
banyak pertanyaan terbuka untuk pengoptimalisasi seperti:
o Seberapa sering x > y
Lisensi Dokumen: Copyright © 2008-2014 ilmuti.org Seluruh dokumen di ilmuti.org dapat digunakan, dimodifikasi dan disebarkan secara bebas untuk tujuan bukan komersial (nonprofit), dengan syarat tidak menghapus atau merubah atribut penulis dan pernyataan copyright yang disertakan dalam setiap dokumen. Tidak diperbolehkan melakukan penulisan ulang, kecuali mendapatkan ijin terlebih dahulu dari ilmuti.org
o Seberapa besar ukuran dari count
o Kode mana yang disentuh dan seberapa sering
Sebagai tambahan, Intel C/C++ Compiler dapat juga memperbagus aplikasi
seperti berikut ini:
Prediksi cabang yang lebih akurat
Pergerakan blok dasar untuk memperbaiki tingkah laku cache instruksi
Keputusan yang lebih bagus untuk fungsi yang harus di-inline (membantu
IPO)
Optimalisasi yang lebih bagus untuk pengurutan ulang fungsi
Optimalisasi untuk pernyataan switch
Keputusan vektorisasi yang lebih bagus
Menggunakan berbagai macam compiler dan parameter kompilasi, sebuah
aplikasi dapat menghasilkan performa yang berbeda. Berikut ini adalah
perbandingan performa dari duacompiler GCC dan ICC. Aplikasi Bounding Ball
yang sama dijalankan di ponsel Android berbasis Intel Medfield. Bagian berwarna
biru adalah performa versi GCC dan bagian berwarna merah adalah performa
versi ICC. Dikompilasikan tanpa parameter apapun. Bagian kedua dari grafis
tersebut adalah hasil kompilasi menggunakan parameter arch=atom. Bagian ketiga
adalah hasil kompilasi ulang menggunakan semua parameter di atas. Terakhir,
kita dapat melihat performa aplikasi yang dikompilasikan menggunakan ICC 60%
lebih tinggi daripada GCC.
Lisensi Dokumen: Copyright © 2008-2014 ilmuti.org Seluruh dokumen di ilmuti.org dapat digunakan, dimodifikasi dan disebarkan secara bebas untuk tujuan bukan komersial (nonprofit), dengan syarat tidak menghapus atau merubah atribut penulis dan pernyataan copyright yang disertakan dalam setiap dokumen. Tidak diperbolehkan melakukan penulisan ulang, kecuali mendapatkan ijin terlebih dahulu dari ilmuti.org
Referensi
http://teknojurnal.com/membuat-dan-mengoptimalkan-game-android-ndk-di-
platform-berarsitektur-intel/
Penutup
Kita sudah memberikan pengenalan singkat tentang pengembangan game Android
dan optimalisasinya di platform IA. Game engine adalah bagian inti dari semua
pengembangangame. Jika mereka berjalan dengan baik di platform IA,
makan game-nya akan berjalan dengan baik pula. Kita menggunakan game
engine populer, Cocos2d-x, sebagai contoh untuk mendemonstrasikan bagaimana
cara mengembangkan game di platform IA. Intel juga menyediakan berbagai
macam alat untuk membantu pengembang aplikasi dalam
mengoptimalkan game mereka di platform IA. Dengan menggunakan Intel
System Studio kita sudah menunjukkan langkah-langkah bagaimana cara
mengoptimalisasi sebuah aplikasi demo.
Lisensi Dokumen: Copyright © 2008-2014 ilmuti.org Seluruh dokumen di ilmuti.org dapat digunakan, dimodifikasi dan disebarkan secara bebas untuk tujuan bukan komersial (nonprofit), dengan syarat tidak menghapus atau merubah atribut penulis dan pernyataan copyright yang disertakan dalam setiap dokumen. Tidak diperbolehkan melakukan penulisan ulang, kecuali mendapatkan ijin terlebih dahulu dari ilmuti.org
Biografi
Nama saya Elvitasari Heriyanthi, saya lahir di Bogor pada tanggal 27 Desember
1992. Saat ini saya adalah mahasiswi STMIK Raharja pada jurusan Manajemen
Informatika.