В своём уроке по созданию Native Extension я давал довольно замороченный способ сборки ane файла, который состоял из следующих шагов:
- компиляция swc через Flash Pro;
- распаковка swc через 7-zip и перетаскивание файлов по нужным папкам;
- сборка java классов в jar библиотеку через Eclipse;
- сборка ane через командную строку.
Представьте, сколько манипуляций приходилось делать чтобы протестировать любые изменения кода. Это неимоверно неудобно.
Относительно недавно я открыл для себя инструмент под названием Apache Ant и жалею, что не обратил на него внимания раньше. Он позволяет проделать все эти шаги в один клик. Если кратко, то ant — это утилита для автоматизации компиляции и сопутствующих процессов(работа с файлами, изменения кода и т.д.). Сборочный конфиг представляет собой обычный xml. Для его запуска нужно выполнить команду ant -f build.xml. Сам по себе ant довольно прост и при желании его можно освоить за один вечер, хотя и придётся подглядывать в документацию.
На примере расширения Android-Notification-Extension-ANE я кратко расскажу, как это работает.
Весь билд-конфиг выглядит вот так. Рассмотрим чуть подробней.
Определение свойств:
Тут определяются пути, id расширения и таски для компиляторов флекса.
Создание временных папок:
Компиляция java классов и упаковка их в jar:
Тут стоит упомянуть, что ane не работает с jar библиотеками, скомпилированными с помощью jdk 1.7, поэтому в начале задаётся свойство пути к библиотеке jdk 1.6 и добавляются три параметра компилятора:
- source=’1.6′
- target=’1.6′
- bootclasspath=’${java_rt.lib}’
При компиляции через jdk 1.6 эти параметры не нужны.
Компиляция swc с помощью компилятора компонентов compc:
Работа с файлами:
Тут распаковывается swc и все файлы перемещаются в нужные места.
Сборка ane:
После сборки также удаляются временная папка и нужные файлы перемещаются в папку ane_ready_for_use.
Также рекомендую использовать утилиту AntRunner, она позволяет запускать отдельные таски и проще отслеживать ошибки.
Добрый день.
Пытаюсь собрать свою нативную либу используя вышеописанный метод и получаю ошибку
Error 102: Invalid namespace http://ns.adobe.com/air/extension/3.2
Ошибка вылетает на этапе задачи build.ane в процессе обработки extension.xml
компилю все под air 3.2 для чтобы сохранить совместимость с некоторыми устройствами.
параметр swf-version установил как 14 в build.xml хотя в принципе при его изменении ошибка также вылезает.
Значит, ваш AIR SDK более ранней версии, чем 3.2, обновите.
Я использую flex sdk 4.6 с air 3.1(то что предустанавливается flashdevelop-ом), но мне кажется что проблема не в этом или не только в этом. Я попробовал скомпилить ane используя самый первый метод(http://gamedevblogs.ru/blog/android/1156.html) и получил точно такую же ошибку хотя использовал flash cs6 с публикацей в air 3.2
Как вы хотите собрать под air 3.2, используя air 3.1?
Да, тут я ступил. Скачал обновлённый sdk и стало компилится нормально хотя странно, что старый метод (через флэш) тоже не сработал.
В любом случае спасибо
Добрый день. Задам ещё один вопрос по теме.
Возможно ли включить в одну ane библиотеку несколько реализаций для разных платформ — например для андроида и windows? Есть необходимость использовать один и тот же код для разных платформ.
Да, возможно.
Здравствуйте,
возможно ли добавить в ANE jar файл и папки(armeabi-v7a/x86) с *.so файлами которые он использует?