Автоматизация сборки проекта под несколько платформ с помощью ant

Условная компиляция и ant могут сильно упростить жизнь при разработке проекта под несколько платформ, а именно:

  • сборка под все платформы за один клик;
  • отдельные swf для каждой платформы;
  • независимость от операционной системы (windows или osx);
  • независимость от IDE.

Рассмотрим простейший пример. Что для этого понадобится:

Открываем FlashDevelop и создаём новый проект AIR Mobile AS3 App. Или скачиваем готовый проект(без сертификатов). Открываем Project/Properties/Compiler Options/Additional Compiler Options и вписываем три строки:

Необходима папка obj. Чтобы она появилась, достаточно один раз скомпилировать пустой проект, затем правой кнопкой по проекту/Show Hidden Items. Итоговый проект будет выглядеть так:

01

 

В коде есть 4 класса и один интерфейс. Классы из пакета generators реализуют интерфейс IGenerator и возвращают строки. Каждый класс для своей платформы:

В основном классе создаётся одна из реализаций интерфейса IGenerator в зависимости от конфига, из неё вытаскивается строка и отображается текстовое поле с этой строкой:

Тут всё очень просто. Переходим к ant конфигу(папка build). В файле build.config находится список внешних параметров:

  • flex.home — путь к Flex SDK или AIR SDK;
  • compile.config — конфиг компиляции из папки obj;
  • release.folder — папка для релизных сборок;
  • debug.build — флаг дебаг сборки;
  • android.cert — путь к сертификату для Android;
  • android.cert.pass — пароль от сертификата для Android;
  • ios.provision — путь к провижену для ios;
  • ios.cert — путь к сертификату для ios;
  • ios.cert.pass — пароль от сертификата для ios;
  • ios.build.type — тип сборки для ios (для релизной сборки поменять на ipa-app-store).

Теперь рассмотрим по частям файл build.xml. В начале инициализация внутренних параметров и список таргетов:

Самое главное — подключение внешних параметров(build.config), затем путь к компилятору, путь к adt, а также путь к AIR конфигу и путь к Flex конфигу. Эти конфиги нужны для сбоки swf. В конце таргеты для сборки под все платформы, для сборки под Android и для сборки под ios.

Переходим непосредственно к таргетам, которые делают всю работу. Начнём со сборки swf под Flash Player:

С помощью таска jar и компилятора ASC 2.0 собирается swf с заданными параметрами. Подгружается Flex конфиг и конфиг проекта, задётся флаг дебаг сбоки и версия swf (29 соответствует FP 18 и AIR 18) и  объявляются дополнительные параметры для условной компиляции. flashplayer = true, остальные — false. С помощью таска move готовый swf перемещается в папку для релизных билдов. Можно не подгружать конфиг проекта, а забить все параметры компилятора вручную.

Сборка под Android состоит из двух частей: компиляция swf и сборка apk.

В таргете —compile.for.android всё аналогично compile.for.player, только вместо Flex конфига подгружается AIR конфиг, а скомпилированный swf перемещается в папку bin. В таргете -make.android.apk собираются два apk для разных типов процессоров(armv7 и x86) и помещаются в папку для релизных сборок.

И для ios всё аналогично:

В панели проекта жмём правой кнопкой по файлу build.xml и выбираем пункт Add as Ant Build File, чтобы он появился в панели Ant (плагин Ant Panel):

02

Нажимает Run и ждём пару минут. Появится папка release с четырьмя файлами:

03

Логи и ошибки можно отслеживать в панели Output. Можно собирать как под все платформы одновременно, так и для каждой по отдельности.

На каждой платформе отображается свой текст:

Теперь при работе во FlashDevelop над особенностями для каждой платформы можно менять в свойствах проекта параметры компилятора.

Системы автоматизации позволяют очень гибко настраивать параметры сборки. Для примера возможно:

  • Использовать разные ane для ios и Android, а для версии под Flash Player не использовать;
  • В AIR приложениях использовать сохранение в файл, а для Flash Player — SharedObject;
  • Сделать для Android версии несколько swf, а для ios — один;
  • Использовать разные ресурсы для разных платформ;
  • Несколько вариантов сборки под одну платформу;
  • и много чего ещё.

И всё это в одном проекте с одним кодом.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *