Contoh Android Game Development Extension menunjukkan cara menggunakan fitur utama ekstensi tersebut. Topik ini menjelaskan contoh tersebut dan setelan yang diperlukan untuk menjalankannya.
Contoh berikut tersedia di halaman download:
- HelloJNI: project pengantar.
- Endless-Tunnel: project khusus Android.
- Teapot: project lintas platform untuk Windows dan Android.
- AssemblyCode-Link-Objects: project template yang memiliki kode sumber assembly.
Sebelum memulai
Instal Android Game Development Extension beserta contohnya. Lihat panduan memulai untuk mengetahui detailnya. Topik ini juga menjelaskan cara membuat dan menjalankan contoh, serta menggunakan contoh Teapot versi Android sebagai contohnya.
Panduan konfigurasi project menjelaskan cara mengonfigurasi setelan untuk project yang menggunakan ekstensi tersebut, seperti menambahkan platform Android dan APK.
HelloJNI
Contoh HelloJNI adalah project sederhana yang menampilkan pesan "Hello From JNI" di jendela aplikasi. Project ini menggunakan kumpulan kode sumber yang berbeda untuk Windows dan Android.
- Kode sumber Android dan direktori skrip build Gradle: HelloJNI\AndroidPackaging
- Kode sumber Windows dan direktori project Visual Studio: HelloJNI
Saat Anda membuat project, Visual Studio akan meneruskan setelan berikut ini
ke file build.gradle
tingkat aplikasi. Anda dapat mengubah setelan ini dengan
mengubah skrip build Gradle.
MSBUILD_NDK_VERSION
MSBUILD_MIN_SDK_VERSION
MSBUILD_JNI_LIBS_SRC_DIR
MSBUILD_ANDROID_OUTPUT_APK_NAME
MSBUILD_ANDROID_GRADLE_BUILD_OUTPUT_DIR
Untuk menyiapkan dan menjalankan contoh:
- Di Visual Studio, buka dan buat contoh HelloJNI.
- Tambahkan platform Android arm64-v8a. Untuk informasi selengkapnya, lihat Menambahkan Platform Android.
- Tambahkan item APK Android ke platform baru.
- Kompilasikan project.
- Tambahkan platform Android berikut, lalu tambahkan item APK Android ke setiap platform tersebut: Android-armeabi-v7a, Android-x86, dan Android-x86_64.
- Buat dan jalankan contoh.
Endless-Tunnel
Contoh Endless-Tunnel adalah game Android yang mengharuskan pemain mengumpulkan kubus putih saat mencoba mencapai akhir terowongan. Contoh ini telah ditransfer dari contoh OpenGL di repositori Android NDK di GitHub. Contoh ini tidak menyediakan game versi Windows.
Contoh ini sudah mengonfigurasi setelannya dan platform Android, sehingga Anda dapat membuat dan menjalankan project di Visual Studio tanpa modifikasi apa pun. Saat Anda membuka solusi, Solution Explorer akan menampilkan modul berikut:
- endless-tunnel: modul aplikasi yang menampilkan logika game.
- glm: snapshot repositori Matematika OpenGL yang dibuat sebagai library statis.
- native_app_glue: wrapper NDK yang berkomunikasi dengan objek NativeActivity.
Teapot
Contoh Teapot menampilkan teko klasik yang dirender dengan OpenGL ES dan ditransfer ke Android Game Development Extension untuk menunjukkan fitur berikut:
- Pengembangan project lintas platform: Anda dapat membuat contoh Teapot untuk Windows dan Android.
- Penggunaan paket Android kustom: skrip build Gradle dipindahkan ke
direktori utama contoh, tempat file
Teapot.sln
berada. - Integrasi build Ninja eksperimental yang memungkinkan pembukaan project di Android Studio.
- Konfigurasi Android kustom yang menunjukkan cara menggunakan Address Sanitizer (ASan) dan Hardware Address Sanitizer (HWAsan).
Implementasi contoh Teapot dibagi menjadi beberapa bagian, yang umumnya untuk aplikasi dan game lintas platform berukuran besar:
- Modul
GameApplication
: menentukan tindakan pengguna dan status aplikasi, seperti pengguna memutar teko atau memperbarui statistik aplikasi. - Modul
GameEngine
: mengimplementasikan modul rendering inti.
Untuk menyiapkan contoh dan menjalankannya di Android, lihat panduan memulai. Untuk menyiapkan contoh dan menjalankannya di Windows:
- Instal GLEW:
- Download dan ekstrak file GLEW.
- Salin file biner dari
$your-glew-directory\bin\Release\x64
ke%SystemRoot%\system32
.
- Instal freeglut:
- Download dan ekstrak file freeglut.
- Salin
$your-freeglut-directory\bin\x86\freeglut.dll
ke%SystemRoot%\system32
.
- Tambahkan dependensi project freeglut:
- Buka
Teapot.sln
di Visual Studio. - Di menu, klik Debug > x64 > Local Windows Debugger.
- Di Solution Explorer, klik kanan GameApplication, lalu pilih Properties > C/C++ > General > Additional Include Directories.
- Tambahkan
$your-freeglut-dir\include
ke jalur.
- Klik Ok.
- Pilih Linker > General > Additional Library Directories.
- Tambahkan
$your-freeglut-dir\lib\x64
ke jalur. - Klik Ok.
- Pilih Linker > General > Additional Library Directories.
- Tambahkan
freeglut.lib
ke jalur. - Klik Ok.
- Buka
- Tambahkan dependensi project GLEW:
- Di panel Solution Explorer, klik kanan GameApplication, lalu pilih Properties > C/C++ > General > Additional Include Directories.
- Tambahkan
$your-glew-dir\include
ke jalur. - Klik Ok.
- Pilih Linker > General > Additional Library Directories.
- Tambahkan
$your-glew-dir\lib\Release\x86
ke jalur. - Klik Ok.
- Pilih Linker > General > Additional Library Directories.
- Tambahkan
glew32.lib
ke jalur. - Klik Ok.
- Jalankan contoh di Windows:
- Di toolbar Visual Studio, klik tombol jalankan Local Windows Debugger.
- Contoh akan terlihat seperti berikut:
AssemblyCode-Link-Objects
Project ini adalah project template yang menunjukkan cara membuat library native Android dari assembly dan kode sumber C/C++. Berikut adalah komponen utamanya:
AssemblyCode-Link-Objects
: library native Android utama yang dibuat dari kode sumber assembly dan C++.StaticLib
: library statis helper yang mengekspor fungsifrom_static_lib_assembly_code_as
.
Project ini mendukung beberapa arsitektur. Setiap arsitektur yang didukung memiliki
file sumbernya sendiri yang mengimplementasikan fungsi yang diekspor dari StaticLib
.
Anda hanya boleh menyertakan file sumber assembly untuk platform
yang sedang dibuat. Project ini menyertakan file assembly dalam build menggunakan
alat build kustom.
Untuk menyiapkan dan membuat contoh:
- Di Visual Studio, pastikan alat build kustom dikonfigurasi untuk
file assembly:
- Di Solution Explorer, klik kanan file assembly, lalu klik Properties. Tindakan ini akan membuka dialog Properties Pages untuk file tersebut.
- Pilih konfigurasi dan platform, seperti All configurations untuk Android-arm64-v8a.
- Pastikan General > Exclude from Build disetel ke No.
- Pastikan General > Item Type disetel ke Custom Build Tool.
- Klik Apply jika ada perubahan yang akan diterapkan.
- Pastikan
Configuration Properties > Custom Build Tools > Command Line:
disetel ke
$(AsToolExe) -o "$(IntDir)%(FileName).o" %(FullPath)
. NDK menyertakan assembler terpisah untuk setiap arsitektur CPU dan$(AsToolExe)
memetakan ke assembler yang tepat. Contoh ini menggunakan toolchain NDK untuk membuat project Android x86 dan x86_64. Jika Anda ingin menggunakan yasm untuk platform Android x86_64, gunakan$(YasmToolExe)
sebagai gantinya. - Pastikan
Configuration Properties > Custom Build Tools > Outputs:
disetel ke
$(IntDir)%(FileName).o
. String ini harus disertakan dalam setelan Command Line. - Pastikan
Configuration Properties > Custom Build Tools > Link Objects:
disetel ke
Yes
.
Misalnya, setelan Android-arm64-v8a akan terlihat seperti screenshot berikut:
- Buat project. Tindakan ini akan mem-build file
libAssmeblyCodeLinkObjects.so
:- Buka file
AssemblyCode-Link-Objects.sln
. - Di menu, klik Build > Build Solution.
- Buka file
- Untuk mengonfirmasi bahwa fungsi tersebut diekspor dengan benar ke library
Android, gunakan alat NDK nm.exe:
- Pada command line, buka direktori contoh.
- Buka lokasi library Android yang dihasilkan oleh
build Anda. Lokasi default mirip dengan
$sample_dir\$solution_configuration\$solution_platform\$platform
dan$sample_dir\Debug\Android-arm64-v8a\arm64-v8a
untuk platform arm64-v8a. - Pastikan bagian simbol yang diekspor berisi fungsi dengan
menjalankan perintah berikut:
…\ndk\toolschains\llvm\prebuilt\windows-x86_64\aarch64-linux-android\bin\nm.exe --defined-only …\Debug\Android-arm64-v8a\arm64-v8a\libAssmeblyCodeLinkObjects.so
Dalam output, Anda akan melihat daftar simbol yang menyertakan kode berikut:
T from_shared_object_assembly_code_as
T from_static_lib_assembly_code_as