2012
03.13

В первой части описывались основы сборки SWC библиотек.

В этой части рассмотрим случай когда необходимо собрать множество изображений в один swc-файл. Для этого будем использовать так же Apache Ant. В качестве примера возьмём библиотеку флагов famfamfam включающую в себя почти 250 png-иконок.

Для этого понадобится:

  • Для каждого изображения создать AS-класс на основе шаблона (отличие будет только в названии файла, имени класса и включенном изображении);
  • Скомпилировать созданные классы в SWC;
  • Удалить все созданные AS-классы.

В скрипте использована библиотека ant-contrib, которая дает нам FOR для обработки файлов. Она включена в архив с исходниками в конце заметки.

buildIconsLib.properties

###  buildIconsLib.properties  ###

FLEX_HOME=D:\\SDKs\\4.6.0

dir.lib = ${basedir}\\lib

# source config
src.dir = ${basedir}\\src
#src.ASTemplate = ${src.dir}\\templates\\BitmapTemplate.tpl
src.ASTemplate = ${src.dir}\\templates\\BitmapDataTemplate.tpl
#src.ASTemplate = ${src.dir}\\templates\\SoundTemplate.tpl

# asset config
 # директория с иконками
assets.dir = ${src.dir}\\com\\assets\\icons
 # путь куда будут генерироваться классы (такой же как и package)
assets.classesDir = app\\icons
assets.package = app.icons
assets.classNamePrefix = Icon_
assets.relativeDir = ../../com/assets/icons
assets.extension = png

# library config
lib.swcPath = ${dir.lib}\\icons.swc

Билд-файл состоит из 4 целей (targets):

1. createTemporaryClasses — генерируем AS классы по шаблону.

<target name="createTemporaryClasses">
	<path id="assetList">
		<fileset dir="${assets.dir}" includes="*.${assets.extension}"/>
	</path>
	<pathconvert targetos="unix" property="assetList2" pathsep="," refid="assetList">
		<mapper>
			<!--http://ant.apache.org/manual/Types/mapper.html-->
			<chainedmapper>
				<flattenmapper/>
				<globmapper from="*.${assets.extension}" to="*"/>
			</chainedmapper>
		</mapper>
	</pathconvert>
	<for param="file" list="${assetList2}">
		<sequential>
			<copy filtering="true" file="${src.ASTemplate}" tofile="${src.dir}\\${assets.classesDir}\\${assets.classNamePrefix}@{file}.as" overwrite="true">
				<filterset>
					<filter token="ASSET_PACKAGE" value="${assets.package}"/>
					<filter token="ASSET_NAME" value="@{file}"/>
					<filter token="ASSET_PATH" value="${assets.relativeDir}"/>
					<filter token="ASSET_EXTENSION" value="${assets.extension}"/>
					<filter token="ASSET_CLASS_PREFIX" value="${assets.classNamePrefix}"/>
				</filterset>
			</copy>
		</sequential>
	</for>
</target>

Создаем список файлов с иконками, а затем, pathconvert’ом убираем расширения файлов.
В цикле для каждого png файла создаем свой класс — копируем файл шаблона и задаем ему новое имя и заменем параметры.

2. build SWC — сборка сгенерированных классов

<!-- build the swc -->
<target name="build SWC">
	<path id="classList">
		<fileset dir="${src.dir}">
			<include name="${assets.classesDir}\*.as"/>
		</fileset>
	</path>
	
	<pathconvert property="classList2" pathsep=" " dirsep="." refid="classList">
		<mapper>
			<chainedmapper>
				<flattenmapper/>
				<globmapper from="*.as" to="${assets.package}.*"/>
			</chainedmapper>
		</mapper>
	</pathconvert>
	
	<!-- компилируем классы из списка в swc -->
	<compc output="${lib.swcPath}" include-classes="${classList2}">
		<source-path path-element="${src.dir}"/>
	</compc>
</target>

Создаем список сгенерированных классов. Затем pathconvert’ом конвертируем имена файлов в названия классов (полный путь включая package) для передачи в include-classes компилятора.

3. deleteTemporaryClasses — удаляем созданные временные классы

<target name="deleteTemporaryClasses">
	<delete>
		<fileset dir="${src.dir}">
			<include name="${assets.classesDir}\\*.as"/>
		</fileset>
	</delete>
	<echo>Deleted temporary classes</echo>
</target>

4. buildAssetLibrary - стартовая (deafult) процедура — только запускает остальные в порядке очереди.

<target name="buildAssetLibrary">
	<tstamp><format property="StartInstTime" pattern="dd-MMM-yyyy  hh:mm:ss" locale="en,UK"/></tstamp>
	<echo>[${StartInstTime}] Starting build..</echo>
	<antcall target="createTemporaryClasses" />
	<antcall target="build SWC" />
	<antcall target="deleteTemporaryClasses" />
	<tstamp><format property="EndInstTime" pattern="dd-MMM-yyyy  hh:mm:ss" locale="en,UK"/></tstamp>
	<echo>[${EndInstTime}] Build finished.</echo>
	<echo>Asset library built to ${lib.swcPath}</echo>
</target>

В результате у нас будет готовая для использования библиотека всех флагов.

Исходные коды со скриптами: zip-архив (220Kb)
Пояснения:
buildIconsLib.xml — билд-файл собирающий swc из иконок.
buildSWCs.xml — билд-файл создающий swc со стилями, swc с переводами и обращается к buildIconsLib.xml для создания swc с иконками.

Полезные ссылки:
Часть 1: Сборка SWC библиотек при помощи Apache Ant
Using Flex Ant Tasks
Auto-generate SWC asset libraries with Apache Ant and the Flex SDK

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

1 comment so far

Add Your Comment
  1. C6QObx , [url=http://phuoyqxesbcd.com/]phuoyqxesbcd[/url], [link=http://ddkhannvwzch.com/]ddkhannvwzch[/link], http://tueojlabxxmo.com/

*