Предисловие
Если вы задумались о создании мобильных приложений, но не знаете с чего начать, у вас есть достаточно времени на эксперименты и изучение нового, то позвольте порекомендовать вам в качестве инструмента выбрать язык программирования haxe. Возможно, вы о нем уже слышали и возможно, слышали о нем, как о некоторой замене для Flash'a. Это не совсем так, и можно даже сказать совсем не так.
Да, стандартная библиотека haxe имеет подмножество классов и функций, организационно похожих на стандартную библиотеку actionscript 3. Но это не мешает создавать приложения для нативных пла��форм, таких как Linux, Windows, Android, Mac, iOS.
При создании приложений для нативных платформ возможностей стандартной библиотеки не хватает и приходится искать сторонние библиотеки или разрабатывать свои. Я пошел по второму пути и для текущего проекта (небольшой игры, похожей на TripleTown по механике) разработал библиотеку для работы с Flurry, Localytics, GooglePlay Game Services и некоторыми другими сервисами.
В представленом ниже переводе, описывается с чего начать, если вы хотите создать библиотеку расширений для haxe и фреймворка OpenFL (бывший NME), в частности. Автор оригинальной статьи Laurent Bédubourg.
Создание простого расширения для OpenFL
До недавнего времени я использовал адобовские инструменты для публикации приложений на iOS и Андроид.
OpenFL набирает обороты и похоже, что достиг достаточного уровня зрелости, так что я решил использовать его для моего следующего проекта.
Использовать высокоуровневые библиотеки клево, но иногда необходимы нативные функции, которые описаны в документации, но не доступны из библиотек. Чтобы решить эту проблему существует адобовский ANE и он, надо сказать, делает это хорошо.
Но как же нам получить такие же возможности в OpenFL? Ниже я опишу мои попытки справиться с этой задачей.
Следующим образом, используя шаблон из OpenFL, можно создать расширение:
$ openfl create extension TestExtension
$ cd TestExtension
$ ls -1
TestExtension.hx # обертка на языке haxe для вашего расширения
haxelib.json # описание проекта для haxelib
include.xml # описание расширения, openfl будет использовать его для
# включения в приложение
ndll/ # в этом каталоге будут нативные библиотеки для каждой
# платформы
project/ # исходный код расширения
После компиляции расширения под все поддерживаемые платформы в каталоге ndll/ появятся соответствующие нативные библиотеки.
cd project/
haxelib run hxcpp Build.xml
haxelib run hxcpp Build.xml -Dandroid
haxelib run hxcpp Build.xml -Diphoneos -DHXCPP_ARMV7
haxelib run hxcpp Build.xml -Diphonesim
Теперь нам необходимо зарегистрировать наше расширение в haxelib:
cd ..
haxelib dev TestExtension `pwd`
Чтобы убедиться, что создание расширения прошло успешно, сделаем следующее:
mkdir TestApp
cd TestApp
Создадим project.xml:
<?xml version="1.0" encoding="utf-8"?>
<project>
<meta
title="TestApp"
package="me.labe.testapp"
version="1.0.0"
company="Laurent Bedubourg"
/>
<app
main="Main"
path="Export"
file="TestApp"
/>
<source path="." />
<haxelib name="openfl" />
<haxelib name="TestExtension" />
</project>
Main.hx:
class Main {
public static function main(){
var t = new flash.text.TextField();
t.text = Std.string(TestExtension.sampleMethod(16));
flash.Lib.current.addChild(t);
}
}
Скомпилируем и протестируем следующим образом:
openfl test project.xml cpp
openfl test project.xml android
openfl test project.xml ios -simulator
openfl test project.xml ios
Все прекрасно работает на Маке и на Андроиде.
Мне все еще нужно разобраться как использовать внешние библиотеки, как структурировать исходный код для различных платформ, но уже это хорошее начало: создать расширение для OpenFL проще, чем расширение для Adobe Air (ANE).
К сожалению, у меня пока остались ошибки линковки для iOS и когда я разберусь с ними, я обновлю эту статью.
В своем репозитории на гитхабе я разместил исходный код примера из статьи. А в блоге Джошуа Граника можно найти статью о создании расширений.
Дополнение: Похоже, что мои проблемы с линковкой под iOS связаны с несоответствием регистров имен импортируемых функций. Как только, эта ошибка будет исправлена, вы сможете без проблем экспериментировать с расширениям с именами в нижнем регистре (как и предполагается под iOS).
Дополнение: Определенно, это проблема несоответствия имен импортируемых функций. В репозитории OpenFL находится описание ошибки, так что вы сможете самостоятельно отследить, когда она будет исправлена.
Дополнение: Джошуа Граник исправил шаблон расширения, так что теперь все будет отлично работать прямо из коробки*.
* от переводчика — я оставил все дополнения в переводе с той целью, что они могут пригодиться кому-нибудь при возникновении подобных ошибок.
