Программирование для Android в среде 100% С++?

Я работал над средой выполнения игрового движка на С++ для будущих игр и начал рассматривать Android как платформу. Я заметил, что он тесно связан с Java и сильно использует Java VM.

Но возможно ли поддерживать полную среду выполнения С++ в Android NDK? У меня нет ничего против Java, и я готов использовать его, если это необходимо, но производительность - одна из моих главных проблем (я намерен, чтобы мои игры были ресурсоемкими), особенно на телефонах.

И если полная среда С++ возможна, как именно я ее реализую в Eclipse Indigo CDT? Смогу ли я создать скомпилированный исполняемый файл игры для Android загодя для максимальной производительности? И будут ли какие-либо дополнительные плагины, которые мне нужно будет установить в Eclipse? Могу ли я использовать MinGW для компиляции моих игр, или мне нужно будет использовать другой компилятор? Если бы мне пришлось использовать Java так или иначе, потребовалась бы компиляция кода на С++? Это все вопросы, на которые я хочу ответить, чтобы получить прочную среду разработки в среде Eclipse IDE.

Пожалуйста, знайте, что я до сих пор довольно новичок в разработке Android и многоплатформенном программировании в целом. Моя цель - создать игровой движок, который будет использовать большинство преимуществ нового оборудования там, особенно на телефонах!

Спасибо за любой совет, который вы можете дать ребятам!

Ответ 1

NativeActivity, добавленный в Android 2.3 (API 9), может быть тем, что вы ищете в плане написания игр для Android, используя только С++. http://developer.android.com/reference/android/app/NativeActivity.html

Однако, поскольку вы говорите, что вы новичок в этом, вы можете начать с одного из доступных в настоящее время Android-движков, вместо того, чтобы писать самостоятельно. Мобильные устройства имеют совершенно другой набор ограничений, чем другие платформы. Телефон не очень полезен, если батарея умирает в середине дня, поэтому запуск проекта с заявленной целью "ресурсоемкости" уже начинает плохо. Немногие люди захотят играть в игры в течение 20 минут здесь и там, если это означает, что вечером они не смогут позвонить по телефону.

Если вы имели в виду, что вы стремитесь к высококачественной графике, имейте в виду, что устройства обладают широким спектром возможностей в этой области, и для таргетинга только верхняя граница ограничивает вашу аудиторию. Различные графические процессоры имеют очень разные стратегии и характеристики производительности, и у всех есть случаи, когда они сияют или отстают. Самые успешные мобильные игры - это не те, у которых самые высокие поликадры или самые сложные шейдеры освещения, это игры, которые обеспечивают стабильно ровную частоту кадров и имеют отличительный стиль.

Посмотрите на некоторые из существующих игровых движков для Android и попробуйте их. Напишите пару небольших игр, чтобы взять их на тест-драйв и посмотреть, где они работают, и не мешать тому, что вы пытаетесь сделать. Если вы чувствуете себя ограниченным тем, что доступно, возьмите то, что вы узнали, и попытайтесь написать свой собственный движок, который соответствует типам игр, которые вы хотите сделать.

Вот несколько ссылок, чтобы вы начали. Эти двигатели используют некоторые очень популярные игры на Android Market, и многие разработчики считают их полезными:

http://www.andengine.org/ andengine написан на Java и является открытым исходным кодом.

http://unity3d.com/ Единство основано на С# и Mono.

http://www.madewithmarmalade.com/ Мармелад, ранее Airplay SDK, был основан на С++.

Ответ 2

Ответ, на который вы хотите обратить пристальное внимание, - это @adamp's. Игнорируйте его ответ на свой страх и риск.

Чтобы решить несколько других вопросов в вашем вопросе:

Могу ли я создать скомпилированный исполняемый файл игры для Android загодя для максимальной производительности?

Нет, поскольку Android не использует "скомпилированные исполняемые файлы игры". Ваш код C/С++ будет скомпилирован в файл общего файла Linux (.so) и упакован с другим материалом (например, манифеста) в файле APK. Компиляция .so будет раньше времени.

Могу ли я использовать MinGW для компиляции моих игр, нужно ли мне использовать другой компилятор?

Я получаю отчетливое впечатление, что вы будете цепляться за ваши глаза, пытаясь сделать разработку NDK в Cygwin на Windows. Я сердечно призываю вас сделать свою разработку NDK на OS X или Linux. По крайней мере, настройте VirtualBox с Ubuntu или что-то в нем, чтобы выполнить компиляцию NDK.

Независимо от того, NDK поставляется со своим собственным компилятором GCC. AFAIK, MinGW не является кросс-компилятором, и большинство устройств Android не работают на процессорах x86.

Если бы мне пришлось использовать Java так или иначе, потребовалась бы компиляция кода на С++?

Да. Теперь для Honeycomb у вас есть возможность использовать Renderscript для работы OpenGL - это означает среду C99, код которой вам не нужно компилировать с помощью NDK.

Ответ 3

Я пробовал кучу из них, и один из лучших, что я обнаружил, что кросс компилирует мгновенно на кучу других устройств и позволяет вам программировать свои лакомства в комманде HTML5/С++ (sweeeeet), является MoSync (http://www.mosync.com/), а другой малоизвестный, который немного дружелюбен к настройке, - это MotoDev от Motorola (http://developer.motorola.com/tools/motodevstudio/?utm_campaign=mhp01092012&utm_source=mhp&utm_medium=mws)

Я заметил, что есть некоторые изображения виртуальной машины и учебные пособия, которые вы можете использовать, чтобы предотвратить настройку проблем.