понедельник, января 16, 2006

FlashCommand 0.9.0 с возможностью добавлять classpaths

В течение последней недели я тратил часть своего свободного времени на выработку технологии сборки flash-проектов, которая бы преследовала следующие цели:


  • Она должна надежно собирать мой проект.

  • Она должна по возможности быстро собирать мой проект.

  • Она должна собирать мой проект легко и непринужденно на любой Windows-машине (при условии, конечно, что там будет установлено необходимое программное обеспечение).

  • Эта методика не предназначена для опенсорсной flash-разработки.


В общем-то, неизвестных много, но много и известных. Безусловно, для сборки должен использоваться ANT. Это зарекомендовавший себя инструмент. К тому же он прост в использовании.

Быстроту мне обеспечит mtasc. Через задачу exec он легко интегрируется в ant'овский скрипт. Но обладает существенным недостатком: он не компилирует mx-классы. Поэтому мне не обойтись при компиляции начальной swf-ки, а также при изменении элементов дизайна приложения средой разработки Flash. Также я испытываю острую необходимость компилировать билды с помощью среды разработки Flash - скажем так для надежности (это все-таки поддерживаемая коммерческая среда). Но, скажем, ежедневные билды будут компилиться всего раз в день и, в общем-то, этот процесс может быть и продолжительным.

Ну вот, собственно, тут и начинается основная заморока: приложение в среде Flash трудно компилировать из командной строки. Есть ряд способов (сводящихся в основном к использованию jsfl), которые более-менее позволяют это делать, но у всех способов есть один существенный недостаток: пути к классам должны прописываться либо в среде Flash, либо во fla-файле. Это, по сути, напрочь убивает все преимущества компиляции из командной строки. И это служило основным камнем преткновения во всей замышляемой цепочке.

И тут возникает выбор: воспользоваться ANT Task'ами FlashAnt Арала Балкана или FDT (в котором тоже есть - fdt.flashCompile)? Это кроссплатформенные решения (а платформы всего две и в связи со спецификой России меня Маки не интересуют). Есть более простое решение.

И тут я вспомнил про старый добрый и, вроде, ничем не примечательный инструмент Майка Чамберса FlashCommand. Он бесплатен, с открытым исходным кодом, написан на C# под .Net. И сам Майк пишет, что его можно улучшать на здоровье:

Use at your own risk. The code is not documented well, and I haven't touched it in 6 months, but I wanted to make it available to anyone who wanted to work on it or improve it (and it could use a lot of improvements).

Ну вот я и улучшил. Версия Майка была 0.8.2. Теперь можно скачать версию 0.9.0.

Мною сделаны мелкие багфиксы, поддержка Flash 8 (при нормальной инсталляции последняя версия определяется и запускается автоматически, без указания путей), и, главное, возможность задавать classpaths в коммандной строке. Опять же, если Flash был нормально установлен и у вас на машине есть админские права, все должно работать. Задается classpath с помощью ключа -cp , за которым следуют пути к классам сплошняком через ;. Если в этой строке будут пробелы, то можно заключить ее (и остальные такие строки) в кавычки. Ниже приведу все доступные ключи:


Использование:

FlashCommand.exe -e | -c | -p [-q] [-v] [-x] [-q] (-s ) ([-l] []) ([-o] ) ([-f] ) ([-t] ) ([-cp] <"classpath1;classpath2;classpath3">)

-version : Выводит информацию о программе.
-help | Выводит информацию об использовании.

-e : Осуществляется экспорт приложения.
-c : Save and compact.
-p : Публикация клипа.

-l : Определяет файл, в который будет вывоится лог. Не обязательный. В дополнительном необязательном параметре путь к файлу лога. Если не определен, лог будет находиться в \log
-q : Тихий режим. Не обязательный. Если указан, вывод не будет производиться в консоль (но может производиться в лог).
-v : Подробный вывод.
-d : Задает каталог для временных файлов (не обязательный).
-s : Мсходный fla-файл. Лбязательный.
-o : Определяет выходной swf-файл если установлен флаг-e. Не обязательный. Если не указан, файл будет располагаться в одном каталоге с исходным.
-x : Если указан, среда разработки Flash будет закрыта после компиляции. Не обязательный.
-k : Если указан, временный jsfl-файл не будет удален. Не обязательный.
-f : Указывает путь к исполняемому файлу, запускающему Flash. Не обязательный.
-t : Задает таймаут. Не обязателен
-d : Задает временный каталог. Не обязателен.
-cp : Задает пути к классам. Можно указать несколько каталогов, разделяя их ";", а также заключить их все в кавычки если там содержатся пробелы. Не обязателен.

Для установки просто скопируйте в свой любимый каталог. Можно добавить каталог с программой к переменным окружения чтобы не задавать путь в ant-скрипте.

Пример мини-проекта с использованием ant можно скачать. Скрипт для ant довольно простой и на моей машине работает как часы:

<?xml version="1.0" encoding="UTF-8"?>
<!-- ======================================================================
15.01.2006 22:37:23

Cats
Тренируемся на кошках

Constantiner (constantiner gav-gav gmail dot com)
====================================================================== -->
<project name="Cats" default="flashCommandBuild" basedir="../">
<description>
Тренируемся на кошках
</description>

<property name="flashCommandExe" location="D:\Program Files\FlashCommand\FlashCommand.exe"/>
<property name="bin" location="bin/"/>
<property name="fla" location="fla/"/>
<property name="classpath1" location="src1/"/>
<property name="classpath2" location="src2/"/>
<property name="buildFile" location="${fla}/cats.fla"/>
<property name="outputFile" location="${bin}/cats.swf"/>
<property name="logDir" location="log/"/>
<property name="logFile" location="${logDir}/log.txt"/>

<!-- =================================
target: flashCommandBuild
================================= -->
<target name="flashCommandBuild" depends="clearBin" description="--> Тренируемся на кошках">
<exec executable="${flashCommandExe}">
<arg line="-e"/>
<arg line="-x"/>
<arg line="-s ${buildFile}"/>
<arg line="-l ${logFile}"/>
<arg line="-o ${outputFile}"/>
<arg line="-cp &quot;${classpath1};${classpath2}&quot;"/>
</exec>
</target>

<!-- - - - - - - - - - - - - - - - - -
target: depends
- - - - - - - - - - - - - - - - - -->
<target name="clearBin">
<echo>Clear Output Dir...</echo>
<delete>
<fileset dir="${bin}"></fileset>
<fileset dir="${logDir}"></fileset>
</delete>
</target>

</project>


В общем, пользуйте на здоровье. Замечания, баги, пожелания - в комменты. Думаю, что в скором будущем выложу исходники.
UPD: Для работы приложения необходим .NET фрэймворк версии 2.0. Его можно скачать с сайта производителя. В Visual Studio 2005 я не очень еще разбираюсь. Вечерком попробую опубликовать под 1.1.

Комментариев 6:

Anonymous Анонимный сообщает:

You can use some HTML tags, such as

16 января, 2006 02:37  
Blogger Unknown сообщает:

Нэ понял :)

16 января, 2006 08:53  
Anonymous Анонимный сообщает:

Спасибо - тулза полезная. Но я честно говоря мало понял как все запускать- можно попоробнее описать процесс?

16 января, 2006 14:42  
Blogger Unknown сообщает:

2pablo
Как обычный компилятор коммандной строки. Наподобие, например, mtasc. Или на каком шаге возникли проблемы? Может, .Net 2.0 не установлен?

16 января, 2006 15:14  
Anonymous Анонимный сообщает:

Мой менеджер давно интересовался, можно ли как-то организовать полную сборку проекта из командной строки.. Сегодня у него день рождения, так что твоя статья как раз ложка к обеду :))

17 января, 2006 12:47  
Blogger Unknown сообщает:

2fix
Смотри следующий пост. Там все слегка улучшено и теперь все супер.

17 января, 2006 14:45  

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

Вернуться на главную