суббота, 2 февраля 2008 г.

Управления компиляцией и доступ к SWC-библиотекам в FDT

Недавно я взялся за изучение Flash-платформы: почитал документацию, форумы, блоги, поковырялся в Adobe Flash CS3 Professional, собрал пару элементарных программ на AS3, для общего понимания - и как-то не понравился мне Flash.

Ну, во-первых, как рабочая среда для программиста, он (Flash) ужасен. Я когда-то давно (лет 5-7 назад) программировал на Java. Так вот, после VisualAge и JBuilder, во Flash нельзя работать, можно только сидеть и горько плакать.

Во-вторых, меня очень смутило так называемое единство графики и кода. Конечно если ты сам себе программист, дизайнер, архитектор и, заодно, начальник, то такая "единая среда" вполне удобна. Но серьезные задачи, при такой постановке дел, решать невозможно.

Поскольку отказываться от дальнейшего изучения Flash-платформы я не собирался, а терпеть надругательство над своей, и без того нездоровой, психикой я счел небезопасным, было решено попытаться найти удобную IDE и разобраться с правильной организацией проекта.

Я решил облегчить себе жизнь и не анализировать весь спектр существующих интегрированных сред, а руководствоваться при выборе IDE мнением компетентных людей. Как оказалось, выбор был, в общем-то, невелик:

  • Powerflasher FDT - удобная и функциональная среда разработки, представляющая собой плагин к Eclipse.
  • FlashDevelop - бесплатный open source продукт. По отзывам и доступной документации, выглядит слабее FDT.

Вопрос оплаты для меня не стоял, открытый исходный код мне без надобности, так что проблема выбора меня не мучила, FDT показался мне наиболее удачным вариантом.

Установка Eclipse и FDT особых проблем не вызвала. Прочтение FDT - User Guide / Getting Started / Basic AS3 tutorial дало мне возможность в 2-3 клика интегрировать Flex 3 SDK Beta 3 в FDT, создать проект, написать простой класс и запустить его.

Восторгу не было предела. Да, я могу программировать, компилировать и запускать Flash-приложения! Но как мне управлять компиляцией? Как управлять шириной, высотой, фреймрейтом и параметрами безопасности конечного SWF-файла?

С этим вопросом я обратился на "Flasher.ru", где уважаемый господин etc сильно озадачил меня, посоветовав подружить Flex SDK с FDT через Ant. Беглого просмотра документации по Ant хватило мне для того, чтобы ужаснуться до глубины души. Дело в том, что Ant - платформонезависимый аналог UNIX-утилиты make. Из опыта работы с ОС Linux я знаю, что make - мощный, удобный, но весьма сложный инструмент, на освоение которого может уйти какое-то время. Использование такого инструмента при сборке простых проектов - неоправданно и сравнимо с установкой и использованием в таких случаях сервера CVS или Subversion. Написать "Hello World", сохранить его в CVS и собрать с помощью Ant - абсурд, не так ли? Конечно, Ant и Subversion нужно изучить, но не на этом этапе, а чуть позже.

Немного поразмыслив, я решил найти более простой способ управления компиляцией, эмпирически изучая FDT. И нашел. Оказалось, что если кликнуть ПКМ по файлу класса в проекте и выбрать Run (или Debug) As / Open Run (или Debug) Dialog, а затем перейти к FDT AS3 Application / [файл класса], то на вкладке Compiler Arguments можно обнаружить поле Arguments, содержащую строку опций компилятора mxmlc. Редактируя эту строку, можно довольно гибко управлять компиляцией конечного SWF-файла. Разумеется, описание опций компилятора mxmlc можно найти в Adobe LiveDocs.

Казалось, счастье есть и можно с наслаждением предаваться программированию, ан нет. Flash - это графика, много графики, очень много графики. Ну не рисовать же все это самому программными средствами? Для этого есть дизайнеры. Flash CS3, как инструмент, будет им в самый раз. В идеале хотелось, чтобы дизайнер, создавая во Flash CS3 необходимый графический контент, имел возможность, в конечном счете, предоставить мне некий ресурс, из которого я мог бы брать графические элементы и использовать их в коде своего проекта под FDT.

Глядя на мою неудовлетворенность, многоуважаемый господин etc посоветовал мне посмотреть документацию по Flex SDK и метатегу Embed. И я посмотрел. Не буду сейчас описывать, как много нового я узнал, т.к. большую часть из этого я не понял. Главное, что я понял - ненужно разбираться с embedding-ом на третий день изучения Flash-платформы.

После некоторых теоретических рассуждений и пары-тройки экспериментов я выяснил следующее:

  • Дизайнер должен создавать графический контент, оформляя отдельные его элементы в символы и компилируя наборы символов в SWC-библиотеку.
  • В папке проекта следует (так, для порядка) создать папку lib и поместить туда SWC-библиотеку, предоставленную дизайнером.
  • В FDT в окне Flash Explorer, нужно кликнуть ПКМ по файлу SWC-библиотеки и выбрать Source Folder / Add to Classpath.

После этого символы, которые содержатся в SWC-библиотеке, станут доступны из кода проекта.

PS: Я так и не понял чем руководствовался премногоуважаемый господин etc давая мне такие своеобразные советы. Видимо, мудрость его так велика, что я не в состоянии постичь его помыслов. Тем не менее, его советы все же помогали мне ориентироваться в информационном пространстве, за что я безмерно ему благодарен. Надеюсь, он простит мне некоторую иронию в его адрес.

10 комментариев:

  1. Рад привествовать новый, и похоже весьма толковый блог.

    ОтветитьУдалить
  2. Рост, для меня является большой честью то, что вы первым оставили коментарий в моем блоге.
    Спасибо.

    ОтветитьУдалить
  3. Тебе спасибо за конструктивные комментарии на Потрошителе.

    Кстати, по существу статьи: когда более-менее освоишься с технологией, овладение основами Apache Ant все же очень рекомендуется — это универсальный инструмент. Его же использует FDT, просто он свои манипуляции с Ant заворачивает в удобную для тебя форму диалогового окна.

    Но освоив Ant, ты получишь полную власть над конфигурацией проекта.

    Так что товарищ etc прав..

    У Кости Ковалева есть по Анту очень хорошие материалы на русском:

    Разработка Flash-проектов с использованием Apache Ant

    И еще:


    Сборка Flex-приложений с помощью Ant.

    И еще вот эти:

    Идеальный проект.

    И напоследок:

    http://riapriority.com/blogs/constantiner.php/2007/01/25/flex_ant_tasks

    http://riapriority.com/blogs/constantiner.php/2006/12/07/advanced_ant_for_flex

    В будущем может пригодиться. Как ни крути, Ант - это промышленный стандарт, не только во флексе.

    ОтветитьУдалить
  4. Ant - вещь полезная. Я это понимаю и изучу его со временем.
    Спасибо за ссылки.

    ОтветитьУдалить
  5. Касательно сборки антом, она не так сложна как может показаться на первый взгляд, разобраться в основах можно за несколько часов - к примеру для компиляции swc нужно всего ничего http://www.flasher.ru/forum/showthread.php?t=107522#4 Но вот что действительно не радует то, что mxmlc весьма медленный, ускорить его призван Flex Compiler Shell, собственно его и использует FDT для компиляции, что сильно увеличивает скорость последующих сборок, но подключить его через ant у меня так и не получилось.
    Если говорить о параметрах mxmlc задаваемых в arguments, то наиболее удобным способом для меня является передача одного параметра -load-config с конфигурационным файлом, таким образом конфигурацию сборки можно хранить в отдельном файле и при желании в SVN.
    И напоследок насчет FDT, к сожалению среда очень сырая, к тому же не поддерживающая многих особенностей языка: очень сырой парсинг регулярок, динамически сменяемые неймспейсы приводят к появлению ошибок, ну а например использование условной компиляции когда константы определяются только на этапе компиляции вообще создает много массу ошибок в FDT. Конечно в работе можно при желание не использовать выше приведенные возможности, но по-моему это не правильно когда из-за IDE приходиться отказываться от каких-то возможностей языка. Так что пока сам пользуюсь бетой третьего билдера. И очень сильно жду что любимый FDT станет поддерживать все возможности языка...
    Вот такой вот коммент получился =)

    И да, совсем забыл: С почином! =)

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

    Что касается ущербности FDT, то к тому времени, как я дорасту до условной компиляции, либо FDT доделают, либо релиз Flex Builder 3 выйдет. А пока мне комфортно и в FDT.

    ОтветитьУдалить
  7. Не стоит преувеличивать, если нужно просто забилдить SWF, используй ант, ничего сложного в этом нет. FDT поддерживает ант, посмотри в мануале к нему все предельно просто. Тоже самое с SVN/CVS. Эклипс конечно хранит версии модификаций, но с любой системой контроля версий работать природнее и надежнее. Когда привыкаешь к этим преимуществам, то используешь их даже в одиночку. Т.е. не стоит бояться, технологии проверенные и простые. Будут вопросы - пиши (mrjazz).

    ОтветитьУдалить
  8. Чего все на меня там навалились с этим антом? Чтобы его использовать, мне пришлось бы притянуть его за уши, а потом еще и разобраться в нем.

    ОтветитьУдалить
  9. > Чего все на меня там навалились с этим антом?

    Да это мы от доброты душевной =)

    ОтветитьУдалить