Artikel ini dipersembahkan oleh Intel Developer Zone. Untuk
Mengetahui lebih lanjut tentang membuat aplikasi Android di Arstitektur
Intel, kunjungi Intel Developer Zone for Android. Artikel asli dari artikel ini dapat dilihat di link ini.
Android Native Development Kit (NDK) adalah peralatan pendamping
Android SDK yang memungkinkan kamu untuk mengimplementasikan kode
native seperti C dan C++ di beberapa bagian aplikasi kamu.
Kamu dapat mengunduh peralatan NDK di:
http://developer.android.com/tools/sdk/ndk/index.html#Downloads
NDK untuk x86 Instruction Set Architecture
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.
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 menjadi dynamic linked library (file .so) dan dipanggil oleh Java di program utama melalui mekanisme JNI.
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 untuk
plugin web, platform
desktop, konsol, dan perangkat
mobile serta sudah digunakan oleh lebih dari satu juta pengembang aplikasi. Unity 3D berkembang dari peralatan pengembangan
game 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 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:
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):
|
|
NDK_ROOT=/cygdrive/<yourname>/
export NDK_ROOT
|
Restart cygwin dan masukkan cd $NDK_ROOT dan lalu seharusnya kamu melihat tampilan di bawah ini:
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:
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
game yang lengkap.
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.
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?

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:
- Seberapa sering x > y
- Seberapa besar ukuran dari count
- 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 dua
compiler 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.
Kesimpulan
Kita sudah memberikan pengenalan singkat tentang pengembangan
game Android dan optimalisasinya di platform IA.
Game engine adalah bagian inti dari semua pengembangan
game. 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.
* Kunjungi Intel Developer Zone for Android untuk mengetahui lebih lanjut. Artikel asli dari artikel ini dapat dilihat di link ini.
Related
In "Intel Developer Zone"
In "Intel Developer Zone"
In "Advertorial"