NME - gm2d - Android - iOS... Настройка среды для кросс-платформенной разработки

Внимание! На момент эта статья уже не актуальна для тех, кто хочет просто установить стабильную версию и начать ей пользоваться. Сейчас всё гораздо проще.
Эта инфа теперь может пригодиться тем, кто хочет устанавливать и собирать версию из СВН или тем, кто хочет чуть глубже разобраться от каких мучений их избавил install-tool который сейчас входит в NME.

Публикую плоды своих изысканий и тестов настройки среды для создания кросс-платформенных проектов на haXe, позволяющих собирать из одного кода приложения для Android, iOS, webOS и конечно стандартных для haXe flash, c++ ...
Основано в основном на статьях с http://gamehaxe.com и на собственном опыте. На момент поставил такую среду на двух машинах и успешно собираю приложения для Android. В iOS тоже собираю, но с ним не всё так гладко пока.
В общем делюсь тем, с чем успел разобраться сам. Итак поехали:

  1. Если вдруг кто еще не поставил, качаем и ставим haXe: http://haxe.org/download
  2. Ставим hxcpp, nme, gm2d через haxelib:
  3. в консоли:

    haxelib install hxcpp
    haxelib install nme
    haxelib install gm2d

    эти первые два шага идентичны и для установки на Mac и на Linux (на Mac нужно еще запустить @haxelib setup@ перед установкой либ)
    дальше то, что связано с компиляций C++ нужно смотреть для каждой отдельной платформы

  4. качаем и ставим VisualStudio C++ Express. Она нужна hxcpp для компиляции сгенеренного C++ кода
  5. Update: Всё! Новые версии NME и HXCPP вышли на haxelib. так что остальную часть этого раздела можно уже не читать, а переходить сразу к настройке и сборке проекта.

    сейчас уже можно собирать flash, js и cpp версии, но для мобильной разработки текущие стабильные версии nme и hxcpp в haxelib устарели.
    после того, как там появятся новые стабильные версии nme и hxcpp, на этом всё закончится, но пока нужны версии с SVN, поэтому продолжаем:

  6. выбираем папку, где будут лежать SVN-версии этих либ (скажем c:/SVN) и делаем их checkout туда.
  7. hxcpp: http://code.google.com/p/hxcpp/source/checkout, nme: http://code.google.com/p/nekonme/source/checkout
    еще для сборки nme нам понадобятся статические библиотеки: sdl-statiс: http://code.google.com/p/sdl-static/source/checkout их также просто чекаутим в папку sdl-static (название в ее случае важно).
    в результате получаем в папке с:/SVN три лежащие +рядом+ папки: *hxcpp*, *nme*, *sdl-static* c последними версиями этих библиотек

  8. говорим haxelib чтобы он использовал эти папки вместо тех что ставили через него для hxcpp и nme
  9. haxelib dev nme c:/SVN/nme
    haxelib dev hxcpp c:/SVN/hxcpp
    _можно проверить: если сейчас ввести еще @haxelib list@ - покажет установленные либы и пути, на которые мы их перенаправили_

  10. качаем и ставим DirectX SDK версии June 2010
  11. Эта огромная хрень нужна только для *nme* и ради одной маленькой либы dxguid.lib. Автор nme собирался ее добавить, тогда ставить DirectX будет не нужно, но пока вот так
    * Установку доков и сэмплов/исходников в диалоге установки можно отключить, они нам не нужны)

  12. в своей домашней папке (c:/Users/ИмяЮзера) создаем файл “.hxcpp_config.xml” c таким содержимым:
  13. <xml>
      <section id="exes">
         <linker id="dll" if="windows">
            <flag value = "-libpath:c:\SDK\Microsoft DirectX SDK (June 2010)\Lib\x86"/>
         </linker>
      </section>
    </xml>

    (путь к ..\Lib\x86 поставить свой, куда поставили DirectX SDK)

  14. Собираем runtime hxcpp. Для этого из папки C:\SVN\hxcpp\runtime в консоли вызываем:
  15. haxelib run hxcpp BuildLibs.xml

    если ругается, что не может найти пути к Visual Studio значит нужно еще сделать примерно так:
    call "C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Tools\vsvars32.bat"

    TODO: я у себя как-то сделал, что это вызывается автоматом, но уже забыл как)

  16. Cобираем nme. из папки C:\SVN\nme\project вызываем:
  17. haxelib run hxcpp Build.xml

    Update: по совету profelis, добавляю, что после сборки nme, нужно запустить из папки nme:
    cd install-tool
    haxe InstallTool.hxml

  18. Profit!

Настройка системы

для сборки Android проектов

  1. должны быть установлены/настроены SDK, NDK и остальные инструменты для создания Android приложений ( http://android.com и google в помощь)
  2. в системном окружении должны быть созданы переменные JAVA_HOME, ANDROID_SDK, ANDROID_NDK_ROOT и ANT_HOME
  3. примерно так (подставьте свои пути, куда установили):

    set ANT_HOME=с:\SDK\ant
    set ANDROID_SDK=с:\SDK\android-sdk
    set ANDROID_NDK_ROOT=с:\SDK\android-ndk
    set JAVA_HOME=с:\SDK\Java\jdk1.6.0_24

для сборки iOS проектов

Нужны только собственно Mac OS X и установленный на ней xcode. Больше ничего вроде бы не надо.

Сборка проекта

С использованием gm2d

библиотека gm2d использует installTool встроенный в nme
для сборки для каждой платформы достаточно зайти в папку проекта и ввести одну из следующих строк в консоль:

haxelib run nme test ProjectName.nmml flash
haxelib run nme test ProjectName.nmml cpp
haxelib run nme test ProjectName.nmml android
haxelib run nme test ProjectName.nmml webos
haxelib run nme test ProjectName.nmml neko

соответственно первая команда соберет (и запустит) из вашего проекта swf, вторая исходники на c++ и исполняемый exe, третья android-проект и apk, четвертая проект для webOS и последняя для Neko VM

Для сборки xcode-проекта для iOS строка немного меняется и выглядит нам момент таким образом:

haxelib run nme update ProjectName.nmml iphone

причем на момент, насколько понимаю (поправьте если не прав) и любая из следующих строк будет давать тот же результат:
haxelib run nme update ProjectName.nmml iphonesim
haxelib run nme update ProjectName.nmml ios

сборку под iphonesim нужно обязательно делать под OS X, все остальное можно собирать и под Windows

Комментарии

NMETemplate Android

А кто-нибудь собирал и запускал проект от Граника NMETemplate под андройдом? У меня проект собирается, устанавливается и даже запускается, но после первого же кадра вылетает с ошибкой. Попробовал на всех версиях эмулятора :( И даже на реальном устройстве... вылетает. Написал к ним на форум - не отвечают :(

RE: NMETemplate Android

у меня на Acer Liquid E без проблем запустился и не вылетает. только там белый экран. это же template.
с эмулятором могут быть траблы из-за того что в нем не работает OpenGL, а nme его вроде бы по умолчанию использует. во всяком случае у меня один из тестов на эмуляторе не работал, а на девайсе работал отлично. правда при запуске в эмуляторе в logcat были видны вполне внятные ошибки из-за отсутствия OpenGL.

а вообще я быстро перестал пользоваться эмулятором и тестирую сейчас только на девайсе. и гораздо быстрее и реалистичнее. с haxe-nme особенно удобно, т.к. install tool сразу и собирает и ставит/запускает приложение и дальше в той же консоли показывает logcat. т.е. при включенном режиме отладки на девайсе и установленных USB-драйверах в компе одна команда в консоли даёт всё - и собранный проект и запущенное приложение на девайсе.

RE

Эх:( почему же мне так не везёт:( И планшет то неплох по характеристикам, и вроде прошивку допилили, и даже 3д игры многие идут... а тут ну никак...
Создал темку тут: http://haxe.ru/node/368

Опыт

Давай пробовать вместе. Запость тему на форуме, приатач apk и будем смотреть. Я смотрю народ оживился, многим будет интересно

Re: Опыт

Да, было бы интересно :) запостю вечером

жить стало проще

Всё, дождались: Релиз NME 3.0 и HXCPP 2.08 на haxelib
Теперь из десяти пунктов установки достаточно сделать первые три.

Остальные оставлю на будущее, могут пригодиться тем, кто будет собирать из SVN свежие версии.

Отличные

Отличные новости!

Забыл про neko

Забыл добавить, что можно и так:

haxelib run nme test ProjectName.nmml neko

added

спасиб, добавил
меньше всего правда представляю кому и в каком случае эта цель может понадобиться. даже меньше чем WebOS ;)
на сервере еще могу представить зачем neko может понадобиться, а вот для графических приложений... есть опыт или мысли в этом плане?

шутка

Для увеличения длины списка поддерживаемых таргетов :) Аргумент?

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

есть такое

кстати да, есть такая проблема с cpp на Висте, проверил. на Win7 все в порядке

достали эти заголовки

Вопрос 1. Как отключил замену?
Предложени 2. Столкнулся с аналогичной проблемой, решил переименовыванием папки nme из 3,0,0 в просто 3 и поменял содержимое файла .current соответственно

Заголовок

1. Пришлось залезть в код install_tool из nme (install-tool/src/data/Icons.hx) и почти в самом конце закомментировать строку InstallTool.runCommand(".", InstallTool.nme + "\\ndll\\Windows\\ReplaceVistaIcon.exe", [ inExeName, name] );
Ну и как обычно:
cd install-tool
haxe InstallTool.hxml
2. Не понял

шапка

2. Я из FD запускал билд и он ругнулся мол нет файла такого и чтото там ".../nme/3," (запятая в конце строки)
Я полез в haxe/lib/nme/ Там фаил .current и папка 3,0,0. Я эту папку переименовал просто в 3, а фаил подредактировал в текстовом редакторе. И ошибка перестала быть. Надо таки баг репорт написать, чтобы отказались от запятых в путях или экранировали пути старательнее

native API

Спасибо за туториал.
Тема актуальная, продолжаю изучать ее применительно к Андроиду.
Возникает один вопрос - как из haXe + cpp + nme получить доступ к системному API.

Допустим к файловой системе наверное получится через cpp.FileSystem или cpp.io...
А как например с акселерометром быть?

native API: акселерометр тоже есть

Похоже с акселерометром проблем нет,
нашел в NME пакедж UI,

Acceleration.hx
Accelerometer.hx
Keyboard.hx
Multitouch.hx
MultitouchInputMode.hx

Однако вопрос с доступом к остальному API Android остается открытым.

могу

могу посоветовать ключевые слова - NME JNI, но что и как там работает - пока не в курсе

а можно пару

а можно пару слов о том, что оно умеет/не умеет из флеша?

если речь о NME,

если речь о NME, из того, что знаю, умеет маппить методы программного рисования graphics.drawLine в методы SDL, работу с BitmapData, с SVG, со звуком... А не умеет вроде бы получать программный доступ к объектам и анимации внутри swf (сам swf загрузить/запустить вроде бы можно, по крамере сэмпл такой в gm2d есть). Анимацию из flash вообще рекомендуется конвертировать в тайлы - и в плане производительности. Механизмы для работы с тайлами есть. Один из вариантов как раз во вчерашнем тьюториале от Граника: http://www.joshuagranick.com/blog/?p=493

попробовал, мне

попробовал, мне нравится
из выясненных смешных штук

nme - как я понял, не умеет использовать API 10 и 11 флеша на родной флешплатформе - мультитач и акселерометр надо врапать в #if cpp #end

родной андроидный флешплеер (который сегодня обновился до 11го) не умеет мультитач вообще - Multitouch.maxTouchPoints всегда 1
(для сравнения у nme всегда 2, мой телефон поддерживает 4)

update. NME можно

update. NME можно задать версию апи флеша в NMML файле (чтобы не было ошибок Accessing this field require flash version) так:

<set name="SWF_VERSION" value="10.1" />

в документации почему-то нет

Добавь, что

Добавь, что после сборки nme стоит сделать из папки nme

cd install-tool
haxe InstallTool.hxml

спасибо,

спасибо, добавил
но вообще это по-моему делается для теста что все ок.
я после сборки на Windows-машине этого не делал и все заработало.
а вот на МакОси собирал по этому тьютору и сделал. но вообще и там это называется "Trying the new install-tool"

А вот я в

А вот я в воскресение пока не сделал этого, у меня не собирались проекты, вылитала ошибка везде :(

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

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <blockcode> <dd>
  • Строки и параграфы переносятся автоматически.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>. The supported tag styles are: <foo>, [foo].
  • Use [gist:####] where #### is your gist number to embed the gist.

Подробнее о форматировании

CAPTCHA
Для отсева спамеров)
f
p
4
v
L
5
Enter the code without spaces and pay attention to upper/lower case.