Jadi sebagai pengembang c / c ++ utama, saya selalu berpikir bahwa satu-satunya pilihan untuk pengembangan game mobile untuk saya adalah menggunakan iOS, yang memungkinkan untuk c / c ++ (dan meminimalkan objektif C).
Saya mendengar dari seorang teman, bahwa android memiliki toolkit pengembangan asli yang memungkinkan kode c ++ untuk bekerja di android.
Adakah yang menggunakan ini, dan jika demikian, bagaimana Anda menemukannya? Maksud saya, apakah ini "hanya berfungsi" seperti iOS, atau apakah ada pertimbangan lain yang perlu dijaga karena beragamnya perangkat android yang tersedia?
API Android adalah Java. Sejak 2010, Google menyediakan NDK (a SDK) untuk pengembang C / C ++.
NDK menawarkan dua cara:
untuk perangkat Android 1.5, Anda dapat memuat perpustakaan elf dan menggunakannya dari aplikasi java melalui jembatan JNI
untuk perangkat android 2.3, Anda dapat menggunakan NativeActivity untuk mem-bypass kode Aktivitas Java untuk Aplikasi Layar Penuh.
NDK menawarkan beberapa C / C ++ API:
a pseudo libc yang disebut bionik: banyak fungsi tidak tersedia
perpustakaan pthread
OpenGL ES 1.x (> Android 1.5) dan OpenGL ES 2.x (Android 2.0)
OpenSL (dukungan terbatas pada Android 2.3)
Tetapi banyak API hanya Java (juga tersedia melalui JNI).
Versi NDK 5 adalah yang pertama digunakan untuk pengembang C ++ karena menawarkan:
RTTI
Pengecualian mendukung
STLport
dukungan gdb untuk program multi-utas
Operasi yang paling menyakitkan adalah debugging pada perangkat android. Jadi saya mengembangkan kerangka kerja multi-platform saya sendiri (OS X, Windows, Linux, iOS dan Android) untuk debug pertama pada platform desktop, platform iOS berikutnya (pada Simulator) dan Terakhir (Android).
Android Emulator (bukan simulator) memiliki kinerja yang buruk dan tidak dapat meniru OpenGL ES 2.x. Saya merekomendasikan perangkat nyata untuk dikembangkan.
Saya telah berhasil menggunakan Android NDK untuk port dua game SDL + OpenGL ke Android dan ternyata sangat mudah. Saya memiliki pembungkus Java 200-line yang menciptakan konteks GL dan menyediakan kelas utilitas seperti input, suara dan memuat gambar untuk kode C ++ untuk dipanggil kembali. Program sampel "San-Angeles" di NDK adalah titik awal yang sangat baik.
By the way, dimungkinkan untuk membangun program C / C ++ tanpa garis Jawa, tapi saya merasa nyaman untuk mengakses beberapa metode tingkat OS dengan memanggil kembali JVM dari waktu ke waktu.
Saya pikir jika game Anda sudah dikompilasi di Linux, Anda akan merasa di rumah. Dari 100+ file dalam proyek saya saat ini, hanya 4 yang memiliki #ifdef ANDROID_NDKarahan (kelas terkait gambar dan suara).
Sebenarnya sebagian besar waktu yang dihabiskan untuk porting gim adalah karena bug emulator yang dikenal yang saya tidak sadari.
Sebelumnya di masa lalu saya memiliki (frustasi) masalah mencoba untuk mendapatkan pipa sederhana kompilasi / build / deploy game opengl saya di emulator android. Bisakah Anda mengarahkan saya ke sumber daya atau sesuatu yang bisa saya gunakan? (Saya tidak tahu apakah Anda memiliki kelas-kelas utilitas open source, tetapi jika Anda melakukannya, saya akan tertarik melihatnya.) Terima kasih
brainydexter
1
@brainydexter: Saya seorang pria commandline yang menikmati autotool, jadi saya tidak yakin saya akan sangat membantu Anda, tetapi saluran pipa saya adalah sebagai berikut: memastikan ANDROID_NDK_ROOTdiatur, bahwa ia berada di $PATH(bersama dengan [sdk_location]/toolsdan [sdl_location]/platform-tools); pergi ke direktori proyek; kompilasi kode NDK menggunakan ndk-build; kompilasi kode Java dan bangun paket menggunakan ant compile; unggah ke emulator atau perangkat yang terhubung menggunakan ant install. Adapun opensource mesin, saya belum memutuskan, tapi saya sudah menerbitkan kode di blog
sam hocevar
Terima kasih untuk tautannya! Saya akan mengawasi blog Anda.
brainydexter
4
Android telah mendukung aplikasi asli sejak versi 1.5 hingga Android NDK , yang seharusnya dapat menjangkau audiens target Anda dengan sangat baik. Anda masih memerlukan aplikasi Java Android sederhana yang memuat sisi asli aplikasi Anda melalui JNI dan meneruskan misalnya masukan dan membuat panggilan.
Ada beberapa versi NDK, tetapi Anda dapat menggunakan NDK terbaru dan memilih API target yang ingin Anda dukung. Sejak Android versi 2.3 Anda dapat melakukan lebih banyak hal di sisi asli dan membutuhkan lebih sedikit kode Java, tetapi dukungan perangkat untuk 2.3 saat ini sangat terbatas.
Pengembangan Android C / C ++ asli adalah solusi yang berfungsi setidaknya untuk game layar penuh dan upaya yang diperlukan untuk mem-port aplikasi C / C ++ OpenGL ES yang ada cukup kecil.
Saya telah berhasil menggunakan Android NDK untuk port dua game SDL + OpenGL ke Android dan ternyata sangat mudah. Saya memiliki pembungkus Java 200-line yang menciptakan konteks GL dan menyediakan kelas utilitas seperti input, suara dan memuat gambar untuk kode C ++ untuk dipanggil kembali. Program sampel "San-Angeles" di NDK adalah titik awal yang sangat baik.
By the way, dimungkinkan untuk membangun program C / C ++ tanpa garis Jawa, tapi saya merasa nyaman untuk mengakses beberapa metode tingkat OS dengan memanggil kembali JVM dari waktu ke waktu.
Saya pikir jika game Anda sudah dikompilasi di Linux, Anda akan merasa di rumah. Dari 100+ file dalam proyek saya saat ini, hanya 4 yang memiliki
#ifdef ANDROID_NDK
arahan (kelas terkait gambar dan suara).Sebenarnya sebagian besar waktu yang dihabiskan untuk porting gim adalah karena bug emulator yang dikenal yang saya tidak sadari.
sumber
ANDROID_NDK_ROOT
diatur, bahwa ia berada di$PATH
(bersama dengan[sdk_location]/tools
dan[sdl_location]/platform-tools
); pergi ke direktori proyek; kompilasi kode NDK menggunakanndk-build
; kompilasi kode Java dan bangun paket menggunakanant compile
; unggah ke emulator atau perangkat yang terhubung menggunakanant install
. Adapun opensource mesin, saya belum memutuskan, tapi saya sudah menerbitkan kode di blogAndroid telah mendukung aplikasi asli sejak versi 1.5 hingga Android NDK , yang seharusnya dapat menjangkau audiens target Anda dengan sangat baik. Anda masih memerlukan aplikasi Java Android sederhana yang memuat sisi asli aplikasi Anda melalui JNI dan meneruskan misalnya masukan dan membuat panggilan.
Ada beberapa versi NDK, tetapi Anda dapat menggunakan NDK terbaru dan memilih API target yang ingin Anda dukung. Sejak Android versi 2.3 Anda dapat melakukan lebih banyak hal di sisi asli dan membutuhkan lebih sedikit kode Java, tetapi dukungan perangkat untuk 2.3 saat ini sangat terbatas.
Pengembangan Android C / C ++ asli adalah solusi yang berfungsi setidaknya untuk game layar penuh dan upaya yang diperlukan untuk mem-port aplikasi C / C ++ OpenGL ES yang ada cukup kecil.
sumber