Занимаетесь разработкой кросс-платформенного приложения или игры для Android? Если так, то вам стоит присмотреться к специальным инструментам. Например, к SDK Marmalade C++ 8.0 и игровому движку ShiVa3D. Сегодня мы поговорим об их применении для платформы Android x86.



Marmalade C++ SDK


Идея, лежащая в основе Marmalade SDK, звучит следующим образом: «написанное один раз запускается где угодно». Мысль это не новая, но вполне актуальная. Один и тот же код можно компилировать и исполнять на всех поддерживаемых платформах – вместо того, чтобы использовать разные языки программирования и API. Такая универсальность достигается благодаря API, основанному на C/C++, который играет роль уровня абстракции для API каждой из целевых платформ.

Marmalade SDK – это набор инструментов для разработки кросс-платформенных приложений. Сам он может работать в различных средах, мы будем пользоваться Windows. Marmalade включает в себя набор библиотек, примеров кода и инструментов для разработки, тестирования и развёртывания приложений на различных платформах. В частности – на Android x86. Пакет хорошо документирован.

Предварительная подготовка


Ниже мы поговорим об использовании Marmalade SDK в среде Windows. Если вы работаете в Mac OS, обратитесь к этому разделу документации.
Итак, перед установкой Marmalade SDK надо подготовиться. А именно, для дальнейшей работы нам понадобится:

  • Windows 7 или более новая версия ОС;

  • Java JRE 5 или выше;

  • Microsoft Visual Studio 2008 SP1/2010/2012/2013/2015 (С++), подойдут различные варианты, в том числе – и Express-версии пакета;

  • Scons (C++), ZeroBrane Studio (Lua);

  • Среда разработки Android. Можно загрузить её с сайта Google или получить в составе Intel INDE;

  • Android NDK. Если вы установили Intel INDE, NDK уже будет присутствовать в системе.

  • Apache Ant (необязательно).

Перед работой стоит проверить переменные среды, и, если они при установке вышеописанных инструментов, не были правильно настроены, исправить это.

  • Переменная ANDROID_SDK_ROOT должна содержать полный путь к папке Android SDK. В нашем случае SDK установлена в составе Intel INDE, данная переменная выглядит так: C:\Intel\INDE\IDEintegration\SDK

  • Переменная ANDROID_NDK_ROOT, соответственно, должна указывать на папку Android NDK. В нашем случае это C:\Intel\INDE\IDEintegration\NDK

  • Переменная JAVA_HOME содержит путь к JAVA JDK. В нашем случае – это C:\Program Files\Java\jdk1.7.0_79

  • Переменная ANT_HOME должна указывать на папку Apache ANT. Например, она может выглядеть так: C:\ant\apache-ant-1.9.6

  • В переменной Path, помимо прочего, должны содержаться пути к следующим папкам: JDK, JDK bin, NDK, ANT bin, Android SDK tools, Android SDK platform-tools. Пути разделяются точкой с запятой.

Редактируя переменные среды, будьте внимательны, проследите, чтобы в конце путей не было специальных символов или разделителей вроде «\».

Теперь, когда предварительная подготовка проведена, пришло время загрузить Marmalade SDK. Нас интересует, в частности, Marmalade Core. Прежде чем вам дадут ссылку на загрузку пакета, потребуется регистрация на сайте. После установки, для того, чтобы приступить к экспериментам, нужно будет ввести лицензионный код, который придёт на электронную почту, указанную при регистрации.

Разработка для Android x86 с использованием Marmalade SDK


Рассмотрим проект HelloWorld из набора примеров, который поставляется вместе с Marmalade SDK. В нашем случае проект находится здесь: C:\Marmalade\8.0\examples\HelloWorld.


Содержимое папки примера HelloWorld

В папке находятся MKB и CPP-файлы для двух демонстрационных проектов. В них показаны разные способы, которыми Marmalade может поприветствовать мир. Имена файлов, относящихся к одному проекту, совпадают.
Файл с расширением MKB содержит информацию о проекте. А именно:

  • Параметры компиляции
  • Информацию об используемых библиотеках
  • Сведения о файлах с исходным кодом
  • Данные о графических, звуковых и других ресурсах
  • Параметры развёртывания проекта

Подробности об MKB-файлах можно найти в документации. CPP-файл – это исходный код проекта, написанный на C++.

Существует три способа работы с Marmalade-проектами. Все они связаны с MKB-файлами. Первый применяется при автоматическом создании проекта для используемой IDE, второй задействует инструменты командной строки, третий основан на использовании Marmalade Hub.

Работа с Marmalade-проектом в Visual Studio


Сделаем двойной щелчок по файлу IwGxHelloWorld.mkb. Marmalade, открыв интерфейс командной строки, выполнит для нас большую работу, которая в итоге приведёт к появлению рядом с этим файлом пары новых папок и к открытию в Visual Studio проекта IwGxHelloWorld_vc14.


Проект, открытый в Visual Studio

Скомпилируем проект и запустим его на x86-симуляторе Marmalade. Для этого выполним команду меню Debug > IwGxHelloWorld_vc14 Properties…


Команда IwGxHelloWorld_vc14 Properties

В появившемся окне нажмём на кнопку Configuration Manager.


Кнопка Configuration Manager

Теперь, в поле Configuration, выберем вариант x86 Debug. Нажмём кнопку Close.


Настройка конфигурации проекта

Вернувшись в основное окно Visual Studio, выполним команду меню Debug > Start Debugging.


Команда начала отладки проекта

Если появится окно с предупреждением, нажмём в нём кнопку Yes.


Окно с предупреждением

Если появится окно с сообщением об отсутствии отладочной информации, так же нажмём Yes. Теперь остаётся лишь ждать, наблюдая в окне Output за процессом подготовки нашего проекта к запуску. Если всё прошло так, как нужно, будет открыто окно Marmalade x86 Simulator с запущенным Hello World.


Проект HelloWorld успешно запущен в эмуляторе.

Сборка проекта из командной строки


В Marmalade SDK входит пакетный файл mkb.bat, который можно вызывать из командной строки для обработки MKB-файлов. Это позволяет ускорить работу. Предположим, наш MKB-файл называется Hello.mkb. Перейдём в папку, в которой расположен этот файл, и с помощью нижеприведённой команды выполним перестроение проекта для всех поддерживаемых платформ:

>>mkb.bat Hello.mkb –execute –rebuild

Если нужно работать с какой-то конкретной платформой, в нашем случае, с Android x86, в MKB-файл, в раздел option, можно внести следующее дополнение:

option
{
android-x86
}

Для сборки Debug и Release-версий проекта можно воспользоваться, соответственно, следующими командами:

>> mkb.bat Hello.mkb --execute --debug
>> mkb.bat Hello.mkb --execute --release

Для того чтобы mkb.bat можно было запускать из командной строки, нужно добавить путь к папке bin s3e для установленной копии Marmalade в переменную среды Path. Например, путь может выглядеть так: C:\Marmalade\8.0\s3e\bin.

Работа с Marmalade Hub


После установки Marmalade SDK в вашей системе будет установлен и Marmalade Hub. Это – набор инструментов, автоматизирующий работу с проектами. Запустим его и на первой странице выберем команду Create new project:


Создание нового проекта в Marmalade Hub

Появится окно создания нового проекта:


Окно создания нового проекта

Здесь нас интересуют следующие поля:

  • В поле Type выберем Core C++;
  • В поле Name введём имя проекта;
  • В поле Location укажем директорию проекта;
  • В поле Template выберем шаблон Empty C++;

После выполнения этих настроек нажмём на кнопку Create. Проект будет создан, в окне Marmalade Hub откроется новая закладка:


Новый проект в окне Marmalade Hub

Нас интересует платформа Android x86, поэтому нажмём на кнопку Create deployment и в появившемся окне настроим параметры развёртывания:


Настройка параметров развёртывания проекта

А именно, выберем Android в поле Platform, в списке поддерживаемых архитектур укажем GCC X86 ANDROID. Нажмём на кнопку Next. В следующем окне нам предложат указать имя пакета и его версию. Не будем менять стандартные значения, нажмём на кнопку Create.

Проект для нужной архитектуры будет создан. Теперь его можно запустить в эмуляторе, для этого служит кнопка Run in simulator, доступная, когда выбрана закладка Project, или на устройстве. При условии, естественно, что к компьютеру подключено Android-устройство подходящей архитектуры, готовое к USB-отладке приложений.

Для развёртывания и запуска проекта на устройстве (в нашем случае это планшет ASUS Fonepad 8, который построен на основе CPU Intel Atom Z3530) нажмём на кнопку Install and run on device. Если проект удалось удачно установить и запустить, об этом можно будет узнать из сообщения в строке состояния, выведенного зелёным цветом.


Успешная установка и запуск проекта на Android-устройстве

На устройстве будет запущен наш Marmalade-проект.


Приложение, созданное с помощью Marmalade SDK, запущено на устройстве

Двоичные файлы .SO и .OBJ проекта можно найти по адресу C:\MarmaladeTest\HelloWorld\build_helloworld_vc14\Debug_HelloWorld_vc14_gcc_x86_android. Это, соответственно, HelloWorld.so и HelloWorld.obj.

Сгенерированный APK-файл проекта (HelloWorld.apk) находится здесь: C:\MarmaladeTest\HelloWorld\deployments\HelloWorld.0.gcc_x86_android. Marmalade SDK 8.0 поддерживает как создание индивидуальных APK-файлов для конкретных вариантов платформы Android, так и универсальные файлы, содержащие версии библиотек для различных платформ (fat binary). При размещении проекта в Google Play можно загружать различные варианты APK-файлов для разных платформ.

Игровой движок ShiVa3D


Примечание: Актуальна та же версия движка, о которой здесь идёт речь, поэтому оставил всё как есть. Немного изменил оформление и подачу материала.

ShiVa3D – это набор инструментов для разработки трёхмерных игр. Всё в нём направлено на эту цель. В частности, он оснащён графическим редактором, рассчитанным на создание игр и приложений для Web, игровых консолей и мобильных устройств. А именно, с помощью ShiVa3D можно создавать приложения для Windows, Mac OS, Linux, iPhone, iPad, BlackBerry Tablet OS/BlackBerry 10, Android, Palm OS, Wii, WebOS, это автономные приложения и приложения, выполняемые в веб-браузере.

Движок использует OpenGL, OpenGL ES, или DirectX, может выполнять программный вывод графики. ShiVa3D поддерживает подключаемые модули, ставшие индустриальными стандартами, в частности, NVIDIA PhysX, библиотеку для работы со звуком FMOD и ARToolKit.

ShiVa3D Web Edition – это полная бесплатная версия, которую можно использовать для экспериментов.

В дополнение к вышеупомянутому редактору, ShiVa3D предоставляет разработчику ShiVa3D Authoring Tool – средство для авторинга проектов, созданных в редакторе для платформ Windows, Mac OS, Linux, iPhone, iPod, iPad, Android, BlackBerry QNX, и Palm.

Установка ShiVa3D


Прежде чем установить ShiVa3D, нужно будет подготовиться. В целом, нижеприведенный список дополнительных средств соответствует тому, что мы рассматривали выше, для подготовки к установке Marmalade SDK, однако, здесь есть и некоторые особенные требования, характерные для ShiVa3D. А именно, нам понадобятся:

  • Windows 7 или выше;
  • Среда разработки Android;
  • Android NDK;
  • Cygwin. Это приложение позволяет организовать в Windows рабочую среду в стиле Linux. При инсталляции Cygwin нужно выбрать и установить следующие пакеты: autoconf, automake, binutils, gcc-core, gcc-g++, gcc4-core, gcc4-g++, gdb, pcre, pcre-devel, gawk, make, python. Не забудьте выбрать GNU-версию make, иначе вы не сможете выполнять построение проектов с использованием NDK.
  • Java JDK;
  • Apache Ant;
  • Microsoft Visual Studio C++;

Теперь стоит проверить переменные среды, и, если они при установке вышеописанных инструментов, не были правильно настроены, исправить это.

  • Переменная ANDROID_SDK_ROOT должна содержать полный путь к папке Android SDK. В нашем случае SDK установлена в составе Intel INDE, данная переменная выглядит так: C:\Intel\INDE\IDEintegration\SDK

  • Переменная ANDROID_NDK_ROOT, соответственно, должна указывать на папку Android NDK. В нашем случае это C:\Intel\INDE\IDEintegration\NDK

  • Переменная ANT_HOME должна указывать на папку Apache ANT. Например, она может выглядеть так: C:\ant\apache-ant-1.9.6

  • В переменной Path, помимо прочего, должны содержаться пути к следующим папкам: JDK, JDK bin, NDK, Cygwin bin, ANT bin, Android SDK tools, Android SDK platform-tools. Пути разделяются точкой с запятой.

Напоминаем, что редактируя переменные среды, стоит проследить за тем, чтобы в конце путей не было специальных символов или разделителей вроде «\».

Теперь всё готово к загрузке и установке ShiVa3D. В частности, нас интересует ShiVa3D Web Edition.
Пакет поставляется с множеством примеров, для первых экспериментов вы можете загрузить один из них. Для того чтобы это сделать, нужно, после запуска ShiVa Editor, воспользоваться кнопкой Open or Drop a Game в разделе Game Editor главного окна. Будет открыто окно Open со списком игровых проектов. Предполагая, что вы нашли игровой проект для экспериментов, рассмотрим процедуру экспорта проекта с помощью редактора ShiVa3D.

Экспорт проекта в STK-файл


Выполним команду General > Game Editor > Game > Export для запуска процедуры экспорта.


Запуск процедуры экспорта проекта в ShiVa3D

Заполним поля в появившемся окне, введя имя (name) и версию (version) экспортируемого приложения. Укажем расположение для файлов, которые будут получены в результате экспорта. В нашем случае используется папка D:\ShiVa3D_prog\game_export. Вы можете использовать любую другую папку.


Настройка параметров экспорта

Обратите внимание на то, что на выходе должен получиться единственный STK-файл, за это отвечает флаг Runtime Package.

Компиляция приложения с использованием ShiVa 3D Authoring Tool


После экспорта проекта закроем ShiVa Editor и запустим ShiVa 3D Authoring Tool.


Окно ShiVa 3D Authoring Tool

Выберем, в левой части окна, пункт Android, выполнив по нему двойной щелчок.


Окно ShiVa 3D Authoring Tool после выбора пункта Android

Импортируем приложение, экспортом которого мы занимались ранее. Для этого нужно заполнить соответствующие поля в данном окне, указав пути к нужным файлам. Тут же можно добавить изображение для иконки приложения, картинку для стартового экрана.


Выбор файлов для создания проекта

Нажмём на кнопку Settings, которая находится в правой нижней части окна, откроется экран настроек.


Окно настроек

В этом окне, в соответствующих полях, нужно указать пути к различным программным средствам, которые нужны для подготовки приложения. Среди них – Cygwin, Android NDK и другие.

После того, как ввод данных завершён, нажмём ОК, и, вернувшись в основное окно ShiVa 3D Authoring Tool, активируем вкладку Step 2: Authoring.


Переход к вкладке Step 2: Authoring

Здесь нужно ввести имя пакета приложения.


Работа с вкладкой Step 2: Authoring

Перейдём на вкладку Step 3: Build. Здесь можно задать параметры сборки. А именно – минимальную версию Android, целевую платформу (x86 в нашем случае), выходную директорию.


Настройка параметров сборки приложения на вкладке Step 3: Build

Установив подходящие значения, нажмём на кнопку Build, которая расположена в правой нижней части экрана. Если всё пройдёт успешно, система сообщит об этом.


Успешная компиляция приложения

Работая с ShiVa3D, мы ограничены использованием ShiVa 3D Authoring Tool, инструмента с графическим интерфейсом. Поддержка средств командной строки здесь не предусмотрена. Рассмотрим подробнее настройки Authoring Tool для подготовки приложений, рассчитанных на платформу x86.

Настройка ShiVa 3D Authoring Tool для платформы x86


  1. Создайте приложение в ShiVa Editor и экспортируйте его. Обратите особое внимание на имя файла проекта. Оно должно состоять из прописных и заглавных букв латинского алфавита (a-z или A-Z), цифр (0-9), может включать в себя знак подчёркивания ( _). Другие символы в имени файла приведут к ошибкам на этапе компиляции. Важно учитывать, что игровой проект сначала нужно экспортировать средствами ShiVa Editor, а потом уже обрабатывать с помощью ShiVa Authoring Tool.

  2. Откройте ShiVa 3D Authoring Tool, сделайте двойной щелчок по пункту Android. С этого момента вы можете воспользоваться вышеприведенным руководством с некоторыми отличиями. А именно, когда вы окажетесь на закладке Step 2: Authoring, вы увидите там поле Authoring type.


Поле Authoring type

По умолчанию в этом поле установлено значение APK Package. Если APK-пакет приложения, который можно тут же установить на устройство – это всё, что вам нужно, не меняйте значение данного поля.

Учтите, что при таких настройках никаких дополнительных файлов вы не получите. Они, конечно, существуют в процессе сборки пакета, но хранятся во временной папке, и, когда необходимость в них отпадает, удаляются.

Если вам нужны исходные файлы, а не APK-пакет, выберите в поле Authoring type вариант Project. В итоге будет сгенерирован ZIP-файл с исходными файлами проекта, но APK-файл создан не будет.

Папка, в которую попадают сгенерированные при компиляции файлы (APK или ZIP), задаётся на закладке Step 3: Build, в поле Output folder. Для того чтобы до этого поля добраться, нужно воспользоваться полосой прокрутки.


Поле Output folder

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

Для выбора целевой платформы компиляции проекта служит поле CPU support на закладке Step 3: Build. Оно расположено выше поля Output folder. По умолчанию здесь установлено значение Default. Нас интересует пункт x86.


Выбор целевой платформы

Настраивая минимальную версию Android, необходимую для работы приложения и установив в поле Minimum OS support версию API меньше 9, вы можете столкнуться с ошибками.


Выбор минимальной версии Android API

О файлах, получаемых в результате компиляции проекта


После того, как вы учли всё то, о чём мы только что говорили, ваша ShiVa3D-игра готова к компиляции для платформы x86. То, что получится на выходе, зависит от выбранного варианта Authoring type: APK Package или Project. Однако, в любом случае, файлы окажутся в указанной выходной директории. Наша папка расположена по такому адресу: D:\ShiVa3D_prog\authoring_tool_output.

При выборе варианта APK Package в ней будет содержаться один .apk-файл:
D:\ShiVa3D_prog\authoring_tool_output\FistApp_1-debug.apk

При выборе варианта Project файл будет тоже один, но на этот раз – с расширением .zip:
D:\ShiVa3D_prog\authoring_tool_output\FistApp_1_Android.zip

Этот архив, в свою очередь, содержит двоичные файлы, файлы манифестов, make-файлы, ресурсы и build-файлы проекта.

Выводы


Из этого руководства вы узнали о том, как сделать первые шаги в работе с Marmalade SDK и ShiVa 3D, ориентируясь на платформу Android x86. Если вы задумываетесь о том, чтобы написать собственную мобильную игру, то, вполне возможно, один из этих инструментов окажется именно тем, что вам нужно.

Оригинал статьи тут.

Комментарии (13)


  1. Smrdis
    10.12.2015 18:51
    +1

    Написать порт на каждую платформу нативными средствами раза в два быстрее, чем мучиться с мармеладом. Очень специфический инструмент для специфических задач.


    1. elmm
      10.12.2015 19:04
      +1

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


      1. Smrdis
        10.12.2015 19:11

        Да, когда уже вписался перейти на другой продукт бывает сложно.


        1. crmMaster
          10.12.2015 20:19

          Вопрос «перейти» в грамотно спроектированном движке — это переписать отрисовку моделей, окружения и эффектов. Конечно, это может потребовать некоторое время, но именно «сложного» тут ничего нет. Куда сложней разработать игру без утечек памяти и грамотным менеджментом ресурсов.

          Мармелад хорош тем, что написан на C++ и по API похож на OpenGL, что для многих является очень приятным плюсом — ведь даже если местами есть низкоуровневые костыли, их можно с минимальными усилиями перетащить.

          Правильно написанное приложение на мармеладе имеет намного лучший отклик и более плавную анимацию, чем написанное на unity3D, и главная причина тому — тотальный контроль за отрисовкой, позволяющий использовать GPU по полной, эффективно управлять памятью и многопоточностью.

          Проблема у мармелада одна, вытекающая из его достоинства — это C++, а значит ручное управление памятью и высокие требования к уровню программиста.


          1. Smrdis
            10.12.2015 20:39

            Правильно написанное приложение на мармеладе имеет намного лучший отклик и более плавную анимацию, чем написанное на unity3D
            Лол, у 99.999999% игр правильно написанных на Unity производительность вообще никак не отличается от написанных на мармеладе ибо есть довольно большой запас по перфомансу. А ботлнек, как правило, где-то в графике, которая, что на Unity, что на мармеладе рисуется с одинаковой скоростью.

            Проблема у мармелада одна, вытекающая из его достоинства — это C++
            Вообще-то, у мармелада вагон проблем. Хреновая поддержка, баги, медленное развитие, крохотное комьюнити, куча устаревших расширений. Ну и самое главное, что это не игровой движок, а платформа, со всеми вытекающими.


            1. elmm
              10.12.2015 21:30
              +1

              У каждой вещи есть свои плюсы и минусы. В юнити мы упирались в размер батчей, с нашим движком мы могли код батчига настроить под наши нужды. Упирались по производительности в скорость менеджед языка и писали нативный плагин. Хотя это совсем разные инструменты, конечно. В итоге остались в использовании обе технологии для разных проектов.


              1. Smrdis
                11.12.2015 14:03

                Да, я так и написал «специфическая вещь».


    1. St007
      14.12.2015 02:52

      Скажу пару слов в поддержку мармелада. Как инструмент для разработки 2D игр вполне очень хорош. Достаточно посмотреть сколько серьезных проектов было выпущено как раз на мармеладе. Так же и простенькие поделки можно запилить на коленке очень быстро, без «мучений». Костыли и баги есть в любом продукте, а мармелад достаточно серьезный продукт и на багрепорты реагирует хорошо. Да и с багами Вы вряд-ли столкнетесь, если не зададитесь целью с ходу запилить что-нибудь колоссальное не зная платформы. Среди прочих плюсов, это возможность делать сборку для iOS на Win машине без помощи мака. И конечно же большой плюс это С++ и скорость. Отпугивающим может быть то что это не инструмент для домохозяек и создать проект из готовых блоков в WYSIWYG редакторе не получится, анимация работа с текстом, физика обо всем этом придется задумываться и во все это придется вникать. Работа над игрой будет достаточно низкоуровневая. Если есть желание упростить себе жизнь и попробовать, как это писать игры на С++, то лучше начать с Cocos2dx.


      1. Smrdis
        14.12.2015 13:05

        Как инструмент для разработки 2D игр вполне очень хорош

        Очень хорош. Только для 2D в нем ничего нет, кроме глючной Iw2d.

        Так же и простенькие поделки можно запилить на коленке очень быстро, без «мучений»

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

        и на багрепорты реагирует хорошо

        Да, но только если купить лицензию за $3.5k в год. На дешевой лицензии можно только задавать вопросы на форуме, на которые в 20% случаев будут что-то по делу отвечать, ибо комьюнити нету.

        Да и с багами Вы вряд-ли столкнетесь

        :D :D :D. Да оно состоит из багов, как с ними можно не столкнуться? Совсем не тестировать что ли?


  1. St007
    14.12.2015 18:32

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


    1. Smrdis
      15.12.2015 18:47

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


      1. St007
        16.12.2015 02:02

        Извините, описка, имел в виду, что проекты уже в сторе и приносят деньги заказчикам.


    1. Smrdis
      15.12.2015 18:51

      Как может быть одновременно в продакшене и успешные? %)