Блог от AS3Coder'a о JavaScript, HTML, CSS... и немного о Flash.

среда, 23 декабря 2009 г.

Компиляция и использование SWC-библиотек во FlashDevelop

Нижепредставленный материал является дополнением к статье Алексея «Vooparker» Аникутина: "Компиляция совместимых с Flash CS3 swc-библиотек с помощью Flex 3 SDK", за которую ему огромное спасибо. Автор настоятельно рекомендует ознакомится с данной статьей.

Что такое SWC-библиотека?

SWC-библиотека - это библиотека классов с закрытым исходным кодом, которая хранится в файлах с расширением .swc. Также .swc-файлы используются для хранения отдельных компонентов, которые используются во Flash IDE.

Файлы с расширением .swc являются .zip-файлами, упакованными с помощью формата PKZIP. Внутри архива находится .swf-файл с классами, и catalogue.xml c описанием классов. Также в архив могут быть включены дополнительный файлы: картинки, .css-файлы и другие. Подробнее о формате .swc-файлов смотрите на Adobe.

SWC-библиотеки в основном используются в коммерческих проектах. Пользоваться ими легко (об этом ниже), а вот компилировать свои немного сложнее. В данной статье я рассмотрю компиляцию .swc-библиотек, на основе FlashDevelop.


Как компилировать .swc-библиотеку во FlashDevelop.

Подготовим среду разработки.

1. Компилировать .swc-файлы мы будем с использованием Flex Ant Tasks. Подробнее об этом смотрите в справке.

Для этого нам необходимо установить java-утилиту Apache Ant, которую можно скачать на официальном сайте: http://ant.apache.org/. Утилита распространяется в архиве, поэтому инсталлировать её нужно самостоятельно. Распакуйте корневую папку архива в любой каталог на локальном диске, желательно в "Program Files". Например, у меня - это "C:\Program Files\Apache\ant\1.7.1".

2. Перейдем к настройке FlashDevelop. В верхнем меню выбираем пункт "Tools", далее "Custom Arguments".


В появившемся окне внесем два пользовательских аргумента "FlexSDKDir" и "AntDir", в значениях которых пропишем пути соответственно. У меня получилось следующее:



Эти два аргумента нужны для нового типа проекта, который мы сейчас добавим.

Для этого скачиваем архив шаблонов проекта. Полученный архив нужно распаковать в директорию "Projects", которая находится в папке с установленным FlashDevelop. Например, у меня - это "C:\Program Files\FlashDevelop\Projects". Теперь после рестарта FlashDevelop,


в проектах у вас появится новый тип проекта "AS3 SWC Builder".




Попробуем что-нибудь скомпилировать.

Создаем новый проект типа "AS3 SWC Builder". В окне "Project" увидим следующее содержимое проекта:

  • bin - директория, в которой будет находится скомпилированный.swc-файл.
  • build - здесь, находятся файлы с настройками компиляции.
  • src - из этой папки будут браться классы, которые мы будем зашивать в нашу .swc-библиотеку.
  • build.bat - файл который запускает сборку (компиляцию) библиотеки.
Перенесем в директорию "src" необходимые нам .as-файлы. Например, мои:


Теперь перейдем к настройкам. Откроем файл compc-config.xml, который находится в папке "build", и в нем в теге , пропишем классы которые хотим включить в библиотеку.

<include-classes>
  <class>ru.as3coder.AS3CoderLibclass>
  <class>ru.as3coder.geom.Lengthclass>
  <class>ru.as3coder.graph.Edgeclass>
  <class>ru.as3coder.graph.Graphclass>
  <class>ru.as3coder.graph.GraphMethodsclass>
  <class>ru.as3coder.graph.Vertexclass>
</include-classes>

Запускаем build.bat (нажатием F5), и в директории "bin" появится .swc-библиотека с классами, которые мы включили в неё.


Единственный вопрос остался у меня, на который я так и не нашел ответ: "Что за посторонний класс появляется при сборке .swc-файла?"


Может быть кто-то из читателей мне подскажет.



Дополнительная информация.

Возможно не всегда удобно использовать директорию "src", для хранения исходных классов. Вы можете изменить директорию с исходными классами в файле build.xml в свойстве output.dir




<property name="source.dir" value="${basedir}/src" />

Также если вы хотите чтобы ваша .swc-библиотека была совместима с Flash CS3, нужно прописать классы еще в одном файле manifest.xml, следующим образом:

<componentPackage>
  <component id="AS3CoderLib" class="ru.as3coder.AS3CoderLib" />
  <component id="Length" class="ru.as3coder.geom.Length" />
  <component id="Graph" class="ru.as3coder.graph.Graph" />
  <component id="Edge" class="ru.as3coder.graph.Edge" />
  <component id="Vertex" class="ru.as3coder.graph.Vertex" />
  <component id="GraphMethods" class="ru.as3coder.graph.GraphMethods" />
</componentPackage>

Более подробно о дополнительных возможностях вы можете узнать в официальной справке Adobe:
Как использовать .swc-библиотеку в AS3-проекте?

Использовать .swc-библиотеку в AS3-проекте достаточно легко. Необходимо перенести .swc-файл в директорию "lib", нажать на файле правой кнопкой и в "Add To Library" поставить галочку.


Теперь вы можете использовать классы библиотеки, также как и классы, которые находятся в директории "src".


Смотрите также:

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

  1. Ещё был где-то к ФД плугин, который добавлял в панель инструментов кнопочку, по нажатии которой генерилась библиотека из файлов любого АС3 проекта. Весчь рабочая, только частенько сыпет ексепшены, чем изрядно мешает работать.

    ОтветитьУдалить
  2. Да, есть и плагин. Называется "ExportSWC". Hо пользоваться им у меня не получилось. Поэтому пришлось придумывать своё решение.
    Если кому-то интересно попробовать компилировать .swc-файл с помощью плагина, то ознакомиться с ним можно здесь и здесь.

    ОтветитьУдалить
  3. "Что за посторонний класс появляется при сборке .swc-файла?"
    Если собирать с помощью FlexSDK 3.3, этот класс не появится при сборке. При сборке версиями 3.4 и 3.5 то он появляется. Что это за класс я не нашел ответа (

    ОтветитьУдалить
  4. Понятно :) Спасибо за информацию.

    ОтветитьУдалить
  5. Почему-то проблемы с компиляцией если точки в названиях папок. И переменные среды удаляются, то ли из-за рестарта, а не закрытия, то ли из-за UAC. Полчаса мучений и первая библиотека готова, спс:)

    ОтветитьУдалить
  6. У меня вот такая ошибка, что это значит?

    D:\FLASH LAB\awaysintswc>"$(AntDir)\ant" -lib "$(FlexSDKDir)\ant\lib\flexTasks.jar" -buildfile "build\build.xml" main
    ‘Ёб⥬Ґ ­Ґ г¤ Ґвбп ­ ©вЁ гЄ § ­­л© Їгвм.
    Build halted with errors.
    Done (1)

    ОтветитьУдалить
  7. как добавить в swc библиотеку другие форматы файлов например: .jpg, .dae, .mp3?

    ОтветитьУдалить
  8. А вы кастомные аргументы FlexSDKDir и AntDir прописали?

    ОтветитьУдалить
  9. всё получилось, просто в новом FlexSDK путь к playerglobal.swc чуть-чуть другой
    в сcompc-config.xml в строке @flex.sdk.dir@/frameworks/libs/player/10/playerglobal.swc
    нужно было поменять название директории ../10/.. на /10.0/ и всё пошло.
    Но есть ещё вопрос, я слышал, что в SWC можно запихать файлы любого формата, как это сделать? Мне нужно встроить в swc несколько .jpg и .dae файлов...

    ОтветитьУдалить
  10. В официальной справке по Flex имеется соответствующий раздел «Adding utility classes», но прокомментировать я его не могу :( Никогда не зашивал в .swc-библиотеки что-то кроме .as-файлов

    ОтветитьУдалить
  11. %( не появляется swc файл, ругается так:
    compile.swc:
    [copy] Copying 1 file to C:\PROJECTS2010\chartSWC\bin
    [exec] Error loading: C:\Program Files\Java\jre6\bin\client\jvm.dll
    [exec] Result: 6
    [delete] Deleting: C:\PROJECTS2010\chartSWC\bin\compc-config.xml

    BUILD SUCCESSFUL

    ОтветитьУдалить
  12. Что-то не так с Java Virtual Machine.
    Проверьте наличие установленной Java Runtime Environment и утилиты Apache Ant.

    ОтветитьУдалить
  13. спасибо за статью, интересненько.Есть 1 просьба.Выложи свои файлы *.as, это потому что ты пишешь:"Перенесем в директорию "src" необходимые нам .as-файлы. Например, мои:", а файлов то нету.Спасибо.

    ОтветитьУдалить
  14. Спасибо очень полезная статья. Наконец смогу собрать все исходники в библиотеку.

    ОтветитьУдалить
  15. Единственный вопрос остался у меня, на который я так и не нашел ответ: "Что за посторонний класс появляется при сборке .swc-файла?"


    это очень похоже на класс, о котором идет речь вот здесь: http://www.flasher.ru/forum/blog.php?b=281

    ОтветитьУдалить
  16. Можно ли в библотеку .swc помещать компоненты Flex mxml?

    ОтветитьУдалить
  17. Не получается скомпилировать. Ошибка в файле compc-config.xml: При установке переменной "" произошло исключение "org.xml.sax.SAXParseException; lineNumber: 8; columnNumber: 38; Недопустимый байт 2 в 2-байтной последовательности UTF-8." Сама строчка выглядит таким образом: @source.dir@
    Ничего не менялось, просто создал новый проект.

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

Можно использовать некоторые HTML-теги, например <b>, <i>, <a>

Поиск по блогу

Обо мне



Farid Shamsutdinov (AS3Coder)
Russia, Tatarstan, Kazan
as3coder@gmail.com

Подробнее...

Постоянные читатели

© 2014 Farid Shamsutdinov. При копировании материалов, ссылка на источник обязательна. Технологии Blogger.