среда, 3 августа 2011 г.

Автоматизация сборки 1. ANT для Flash. FAQ


Вообще тема ANT + Flash очень неплохо раскрыта там, сям. Но тем не менее при личном освоении, некоторые проблемы были мной встречены, и так же героически преодолены. К тому же основная русскоязычная статья от Константинера http://constantiner.blogspot.com/2006/02/flash-apache-ant-new-media.html, на которую есть даже линк на Википедии, технически несколько усторела.

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



Настройка среды

  1. скачать, установить ant (http://ant.apache.org/);
  2. еще для запуска ANT понадобиться JDK http://www.oracle.com/technetwork/java/javase/downloads/index.html (который у вас уже есть если стоит Flash Builder);
  3. настроить путь к ANT, через PATH (добавляем переменную среды JAVA_HOME=<где находится javac>, компилятор Java. Как это делать в винде: http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/environment_variables.mspx?mfr=true );
  4. скачать Flex SDK (если нет) (http://opensource.adobe.com/wiki/display/flexsdk/Flex+SDK);
  5. добавляем в ANT возможность выполнения инструкций Flex SDK компилятора: в ant\lib сбросить \ant\lib\flexTasks.jar;

запуск первого билда

создаем проект

Структура проекта следующая:
\src
  Main.as
build.xml
local.properties
Main.as Основной файл проекта.
package
{
 import flash.display.Sprite;
 import flash.text.TextField;
 import flash.text.TextFieldAutoSize;
 
 /**
  * 
  * @project Experiment Simple Ant
  * 
  * @data Jul 27, 2011 / 7:30:12 AM
  * 
  * @author Eugene Krevents aka Hyzhak 
  * 
  */
 
 public class Main extends Sprite
 {
  //----------------------------------
  //  constructor 
  //----------------------------------
  
  public function Main()
  {
   var tf:TextField = new TextField();
   tf.text = "Hello World of ANT!";
   tf.autoSize = TextFieldAutoSize.RIGHT;
   addChild(tf);
  }
 }
}
build.xml Инструкции для ANT каким образом собрать проект
<!--?xml version="1.0" encoding="UTF-8"?-->
<project name="hello ant world!" default="build" basedir=".">
  
 <!-- Подключение локальных параметров среды -->
 <property file="local.properties"/>
  
 <!-- Рассказываем ANT о таких задачах как mxmlc, и др. -->
 <property name="flex.config" location="${FLEX_HOME}\frameworks\flex-config.xml"/>
 <property name="flex.frameworks" location="${FLEX_HOME}\frameworks"/>
  
 <taskdef file="${FLEX_HOME}/ant/flexTasks.tasks" classpath="${FLEX_HOME}/ant/lib/flexTasks.jar"/>
  
 <!-- Исходники тут -->
 <property name="src" location="src"/>
  
 <!-- Имя главного файла -->
 <property name="main.file" value="Main.as"/>
  
 <!-- И путь к нему -->
 <property name="full.src.path" location="${src}/${main.file}"/>
  
 <!-- Результирующий файл -->
 <property name="output.swf" location="main.swf"/>
  
 <!-- Главная задача, вызываемая при сборке "по-умолчанию" -->
 <target name="build">
  <mxmlc file="${full.src.path}" output="${output.swf}" keep-generated-actionscript="false">
   <static-link-runtime-shared-libraries>true</static-link-runtime-shared-libraries/>
  </mxmlc>
 </target>
</project>
local.properties Локальные настройки системы
#local.properties
FLEX_HOME=d:/Program Files (x86)/Adobe/Adobe Flash Builder 4.5/sdks/4.5.1
Все готово, чтобы запустить сборку необходимо вызвать в командной строке ant. Должно получиться приблизительно следующее:
и появиться скомпилированный файл: main.swf Возможно что-то может пойти не так, к примеру:

Исправить вопросики в mxmlc. Чтобы mxmlc говорил на английском

На этот счет в и-нете масса советов:
  1. http://onenterframe.ru/2011/03/24/как-исправить-вопросики-от-mxmlc/
    что-то мне не сильно помогло :(
  2. добавить -Duser.language=en -Duser.country=US в:
    * $FLEX_HOME/bin/jvm.config
    * $FLEX_HOME/bin/mxmlc
  3. добавить в в качестве параметра: -tools-locale=en — помогло отчасти, половину (!) error-ов mxmlc стал выдавать на английском;
  4. и лишь один способ мне помог, спасибо Ростику (flash-ripper.net):
    Панель управления / Язык и региональные стандарты / Формат, устанавливается: «Английский (Великобритания)» (можно и любой другой, главное Английский).
Как по мне, решение больше похожее на уклонение, однако оно единственное заработало на 100%.

Не срабатывает Embed файлов

Проблема была связана с тем? что среда Flash Builder достаточно лояльно относилась к декларации типа:
[Embed(source="assets/level.xml", mimeType="application/octet-stream")] 
private static const LevelsClass:Class;
в то время как при компиляции с помощью ant нужно было добавить перед assets еще один «/»:
[Embed(source="/assets/level.xml", mimeType="application/octet-stream")] 
private static const LevelsClass:Class;

Подключение папок с файлами проекта

Добавить в инструкцию:

Подключение swc

Добавить в инструкцию:
<library-path dir="/libs" append="true"> 
 <include name="*.swc"/> 
</library-path>

добавление автоинкримента билд версии

<!-- - - - - - - - - - - - - - - - - - 
 target: increment                      
 - - - - - - - - - - - - - - - - - -->
<target name="increment">
 <!-- увеличить номер версии (свойство build.number) в файле свойств build.properties -->
 <propertyfile file="${ant.src.dir}\build.properties">
  <entry key="build.number" type="int" operation="+" default="0"/>
 </propertyfile>
 
 <!-- подключить файл свойств build.properties, вместе со свойством build.number -->
 <property file="${ant.src.dir}\build.properties"/>
   
 <!-- получить номер версии продукта -->
 <property name="app.version" value="${major.version}.${minor.version}.${build.number}"/>
   
 <!-- известить о версии продукта -->
 <echo message="Build number is ${build.number}"/>
   
 <!-- взять файл из шаблонов с указанием версии продукта и поместить в подходящее место -->
 <copy file="${ant.src.dir}\VERSION.as" todir="${full.src.dir}" overwrite="true"/>
 
 <!-- заменить в файле текст VERSION на номер версии -->
 <replaceregexp file="${full.src.dir}\VERSION.as" match="version" replace="${app.version}" byline="true"/>
</target> 

имя файла должно совпадать с именем константы VERSION.as
package org.hyzhak.experiments.simpleant
{
  /**
  *  @private
  *  Version string for this project
  */
 
 public const VERSION:String = "version";
}

Links

http://constantiner.blogspot.com/2006/02/flash-apache-ant-new-media.html - Разработка Flash-проектов с использованием Apache Ant (доклад на семинаре New Media) http://ant.apache.org/manual/ - команды ANT (в терминах ANT это задачи - tasks). http://groups.google.com/group/ruFlash/browse_thread/thread/0934d04b736f4d4d# - общение в группе ruFlash на тему что такое ANT и Maven. http://livedocs.adobe.com/flex/3/html/compilers_14.html - About the application compiler options — список параметров mxmlc. http://livedocs.adobe.com/flex/3/html/compilers_01.html – Использование Flex компилятора. http://flash-ripper.com/archives/cat_apache_ant.php - Как компилировать FLA-файлы из-под Flex Builder?

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

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

Press Any Key...