21.02
2012

Это первая заметка из небольшой серии, посвященной сборке, подключению и использованию swc-библиотек. Особено актуально для тех, кто собирается разрабатывать мобильные приложения под iOS, но об этом позже :)

Азы и простые примеры.

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

SWC создается при помощи компилятора compc. Для автоматизации сборки SWC и приложений будем использовать Apache Ant.

Сборка SWC:

<target name="buildSWC">
	<compc output="${basedir}/swc/MyLib.swc" keep-generated-actionscript="false" incremental="false">
		<source-path path-element="${dir.src}" />
		<!-- Включить все .as файлы из данной директории -->
		<include-sources dir="${dir.src}/app/utils/" includes="*.as" />
		<!-- Включить все файлы из данной директории и поддиректорий -->
		<include-sources dir="${dir.src}/app/comps/" includes="*" />
		<!-- Включение класса -->
		<include-classes />
		<!-- Включить из конфиг-файла. По сути тоже самое, но в отдельном файле -->
		<load-config filename="${basedir}/build/classes-list.xml"/>
	</compc>
</target>

classes-list.xml

<?xml version="1.0" encoding="utf-8" ?>
<flex-config>
	<include-classes>
		<class>app.events.MyEvent</class>
		<class>app.comps.Button</class>
	</include-classes>
</flex-config>

SWC с файлами локализации:

<target name="buildSWC-locale">
	<compc output="${basedir}/swc/locale.swc">
		<locale>ru_RU</locale>
		<!-- Путь к директории с локалями -->
		<source-path path-element="${dir.src}/locale"/>
		<!-- Имя подключаемой локали (одной или более) -->
		<include-resource-bundles>Resources</include-resource-bundles>
	</compc>
</target>

Файл Resources.properties:

AppTitle = Заголовок
HelloMsg = Превед!

В случае если надо надо несколько языков иметь в одном файле:

<target name="buildSWC-locale"> 
	<compc output="${dir.lib}/locale.swc" allow-source-path-overlap="true">
		<locale>en_US</locale>
		<locale>ru_RU</locale>
		<source-path path-element="${dir.src}/locale/{locale}"/>
		<include-resource-bundles>Resources</include-resource-bundles>
	</compc>
</target>

Компилятор будет поочередно перебирать локали и подставлять их вместо {locale}.
И в данном случае надо будет добавить опцию allow-source-path-overlap=”true”.

SWC файл со стилями:

<target name="buildSWC-styles">
	<compc output="${basedir}/swc/style.swc">
		<include-file name="MyStyles.css" path="${dir.src}\css\MyStyles.css" />
	</compc>
</target>

Полезные ссылки:
Adobe: About SWC files
Adobe: Understanding SWC files
Adobe: Using the compc task
Adobe: Creating resources
Adobe: Using resource modules
Adobe: Easily compile resource bundles using Ant
Adobe: Compiling a theme SWC file
Делаем правильные swc библиотеки