Top Banner
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 [email protected] 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.
12

Membuat dan Mengoptimalkan Game Android NDK di Platform ...ilmuti.org/wp-content/uploads/2014/03/Elvitasari-Heriyanthi... · engine yang dapat dijalankan di Android termasuk engine

Mar 16, 2019

Download

Documents

tranthu
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Membuat dan Mengoptimalkan Game Android NDK di Platform ...ilmuti.org/wp-content/uploads/2014/03/Elvitasari-Heriyanthi... · engine yang dapat dijalankan di Android termasuk engine

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

[email protected]

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.

Page 2: Membuat dan Mengoptimalkan Game Android NDK di Platform ...ilmuti.org/wp-content/uploads/2014/03/Elvitasari-Heriyanthi... · engine yang dapat dijalankan di Android termasuk engine

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

Page 3: Membuat dan Mengoptimalkan Game Android NDK di Platform ...ilmuti.org/wp-content/uploads/2014/03/Elvitasari-Heriyanthi... · engine yang dapat dijalankan di Android termasuk engine

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:

Page 4: Membuat dan Mengoptimalkan Game Android NDK di Platform ...ilmuti.org/wp-content/uploads/2014/03/Elvitasari-Heriyanthi... · engine yang dapat dijalankan di Android termasuk engine

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:

Page 5: Membuat dan Mengoptimalkan Game Android NDK di Platform ...ilmuti.org/wp-content/uploads/2014/03/Elvitasari-Heriyanthi... · engine yang dapat dijalankan di Android termasuk engine

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:

Page 6: Membuat dan Mengoptimalkan Game Android NDK di Platform ...ilmuti.org/wp-content/uploads/2014/03/Elvitasari-Heriyanthi... · engine yang dapat dijalankan di Android termasuk engine

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.

Page 7: Membuat dan Mengoptimalkan Game Android NDK di Platform ...ilmuti.org/wp-content/uploads/2014/03/Elvitasari-Heriyanthi... · engine yang dapat dijalankan di Android termasuk engine

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.

Page 8: Membuat dan Mengoptimalkan Game Android NDK di Platform ...ilmuti.org/wp-content/uploads/2014/03/Elvitasari-Heriyanthi... · engine yang dapat dijalankan di Android termasuk engine

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?

Page 9: Membuat dan Mengoptimalkan Game Android NDK di Platform ...ilmuti.org/wp-content/uploads/2014/03/Elvitasari-Heriyanthi... · engine yang dapat dijalankan di Android termasuk engine

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

Page 10: Membuat dan Mengoptimalkan Game Android NDK di Platform ...ilmuti.org/wp-content/uploads/2014/03/Elvitasari-Heriyanthi... · engine yang dapat dijalankan di Android termasuk engine

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.

Page 11: Membuat dan Mengoptimalkan Game Android NDK di Platform ...ilmuti.org/wp-content/uploads/2014/03/Elvitasari-Heriyanthi... · engine yang dapat dijalankan di Android termasuk engine

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.

Page 12: Membuat dan Mengoptimalkan Game Android NDK di Platform ...ilmuti.org/wp-content/uploads/2014/03/Elvitasari-Heriyanthi... · engine yang dapat dijalankan di Android termasuk engine

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.