Розробка ігор для Android у програмі c ++


26

Отож, будучи перш за все розробником c / c ++, я завжди вважав, що єдиним варіантом розробки мобільних ігор для мене було використання iOS, що дозволяє використовувати c / c ++ (і мінімізувати ціль C).

Однак я чув від друга, що в android є набір інструментів для розробки, який дозволяє c ++ коду працювати на android.

Хтось користувався цим, і якщо так, то як це знайти? Я маю на увазі, чи буде він «просто працювати», як iOS, чи є більше міркувань, про які потрібно подбати через велику різноманітність Android-пристроїв?

Відповіді:


26

Android API - це Java. З 2010 року Google надає NDK (SDK) для розробників C / C ++.

NDK пропонує два способи:

  • для пристроїв Android 1.5 можна завантажити бібліотеку ельфів і використовувати її з програми java через міст JNI
  • для пристроїв Android 2.3 можна використовувати NativeActivity, щоб обійти код активності Java для додатка на повноекранному екрані.

NDK пропонує кілька API C / C ++:

  • псевдо-libc під назвою біоніка: багато функцій недоступні
  • бібліотека pthread
  • OpenGL ES 1.x (> Android 1.5) і OpenGL ES 2.x (Android 2.0)
  • OpenSL (обмежена підтримка на Android 2.3)

Але багато API - це лише Java (доступна також через JNI).

Версія NDK 5 є першою придатною для розробників C ++, оскільки пропонує:

  • RTTI
  • Виключення підтримують
  • STLport
  • підтримка gdb для багатопотокових програм

Найбільш болюча операція - це налагодження на Android-пристроях. Тож я розробляю власну мультиплатформенну основу (OS X, Windows, Linux, iOS та Android) для налагодження спочатку на платформі настільних ПК, наступній платформі iOS (на Simulator) та Останній (Android).

Емулятор Android (не тренажер) має низьку продуктивність і не може імітувати OpenGL ES 2.x. Я рекомендую розробити справжні пристрої.

Ви можете знайти багато корисної інформації:


Посилання "вхідний код" зараз порушено.
Josh1billion

1
виправлено: змінити Еллісмаркова на IOPixel
Елліс

9

Я успішно використовував Android NDK, щоб перенести дві ігри SDL + OpenGL на Android, і це було напрочуд просто. У мене є 200-рядкова обгортка Java, яка створює контекст GL та забезпечує класи утиліти, такі як введення, звук та завантаження зображення для коду C ++, щоб передзвонити. Зразкова програма «Сан-Анджелес» в НДК є відмінною відправною точкою.

До речі, можна створити програми C / C ++ без рядка Java, але мені здається, що доступ до деяких методів на рівні ОС переглядає JVM час від часу.

Я думаю, якщо ваша гра вже збирається на Linux, ви відчуєте себе як вдома. Зі 100+ файлів у моєму поточному проекті лише 4 мають #ifdef ANDROID_NDKдирективу (класи, пов’язані із зображенням та звуком).

Насправді більшість часу, витраченого на перенесення гри, було через відому помилку емулятора, про яку я не знав.


Раніше в минулому у мене виникали (засмучуючі) проблеми, які намагалися отримати простий конвеєр компіляції / побудови / розгортання моєї гри opengl на емуляторі Android. Чи можете ви вказати мені на ресурс чи щось, що я можу використати? (Я не знаю, чи є у вас класи класів утиліти з відкритим кодом, але якщо ви це зробите, мені буде цікаво їх побачити.) Спасибі
brainydexter

1
@brainydexter: Я хлопець із командної лінії, який користується автоінструментами, тому я не впевнений, що я вам дуже допоможу, але мій конвеєр наступний: переконайтеся ANDROID_NDK_ROOT, що встановлено, що він знаходиться в $PATH(разом з [sdk_location]/toolsі [sdl_location]/platform-tools); перейти до каталогу проектів; скласти код NDK за допомогою ndk-build; компілювати Java-код і створити пакет, використовуючи ant compile; завантажте на емулятор або підключений пристрій за допомогою ant install. Щодо відкриття двигуна, я ще не визначився, але я вже публікую код у блозі
sam hocevar

Дякуємо за посилання! Я буду стежити за вашим блогом.
brainydexter

4

Android підтримує нативні програми з версії 1.5 до Android NDK , які дуже добре повинні охоплювати вашу цільову аудиторію. Вам все ще потрібен простий додаток для Android Java, який завантажує основну сторону вашої програми через JNI і передає вперед, наприклад, введення та здійснення дзвінків.

Існує кілька версій NDK, але ви можете використовувати останню NDK та вибрати цільовий API, який ви хочете підтримувати. З Android версії 2.3 ви можете зробити набагато більше на рідній стороні і вам потрібно менше коду Java, але підтримка пристрою для 2.3 в даний час дуже обмежена.

Розвиток Native Android C / C ++ є робочим рішенням принаймні для повноекранних ігор, а зусиль, необхідних для перенесення існуючих додатків C / C ++ OpenGL ES, досить мало.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.