当前位置: 首页 > news >正文

使用ant编译flex的mxml application

在现实应用中,如果使用未购买license的(或破解版的)FlexBuidler去编译flash文件,是要付法律责任的,特别是企业开发。所以,你必须利用Flex SDK自己手工编译。

Adobe提供了一个FlexTasks这个Ant扩展来辅助进行编译操作,在我的另一篇博客中简要介绍了如何通过其来build swc文件,详细见:http://blog.csdn.net/james999/archive/2009/01/05/3715018.aspx。有关Adobe的FlexTasks这个扩展,可以参见:http://livedocs.adobe.com/flex/3/html/help.html?content=anttasks_3.html。

另外,使用ant来build还有一个好处,是比FlexBuilder本身提供的Merged into code模式编译方式,编译的swf文件要小很多,基本上能够小35%左右,这可不是一个小数目哦。但Ant build没有提供RSL模式,这是也是一个弊端。如果你希望能够实现RSL方式,来缓解客户端的加载数据量,那估计最好是购买正版的Flex Builder。

如果你直接按照参考文档中的<mxmlc>命令来编译mxml应用,如果你的应用中需要引用很多assets,那么很不幸,你将会得到如下之类的异常:
main: [mxmlc] Loading configuration file D:\IDE\Adobe\Flex Builder 3\sdks\3.0.0\frameworks\flex-config .xml [mxmlc] D:\WorkDir\Flex Projects\Walle\primeton.bps.modeler.flow\flex_src\flowdesigner3_362209.c ache (The system cannot find the file specified) [mxmlc] D:\WorkDir\Flex Projects\Walle\primeton.bps.modeler.flow\flex_src\com\primeton\flow\diag ram\editor\figures\ActivityIconFactory.as(16): col: 10: Error: unable to resolve 'assets/images/manu al_activity.gif' for transcoding [mxmlc] [mxmlc] [Embed(source='assets/images/manual_activity.gif')] [mxmlc] ^

这是因为你的这些assets资源无法被编译器找到。

在Shreyas Purohit的一篇博客中,介绍根本原因,以及可以解决这个问题的一种方式,可参考:

http://sacrosanctblood.blogspot.com/2008/12/flex-solution-to-error-unable-to.html

下面的样例代码,就是根据我的本机的情况,做的修改。大家也可以参考一下。整个思路就是:动态把assets文件,编译成一个swc包,然后在编译flex application的时候动态引用进来。

首先,你需要引入ant-contrib这个ant扩展组件,在http://ant-contrib.sourceforge.net/上有介绍及下载。然后添加进你的build.xml中。

我的目录结构如下:

|-project
|--flex_src
|
|-- flowdesigner.mxml
|-- assets
| |-- icons
| |-- images
| |-- css

在build.properties中,声明你的flex文件地址,及src地址:
###### Flex Properties ############################## # change this path to your flex sdk directory # Use "/" in your directory path e.g. C:/FlexSDK/3.0.0 FLEX_HOME=D:/IDE/Adobe/Flex Builder 3/sdks/3.0.0 ###### Project Properties ########################### src-dir=${basedir}/flex_src

下面是build.xml

<project name="Ant build SWC sample" basedir="." default="main"> <property file="build.properties" /> <taskdef resource="flexTasks.tasks" classpath="${FLEX_HOME}/ant/lib/flexTasks.jar" /> <taskdef resource="net/sf/antcontrib/antlib.xml"> <classpath> <pathelement location="D:/ant171/lib/ant-contrib-version.jar"/> </classpath> </taskdef> <target name="buildAssertsSWC"> <fileset id="assets.flex" dir="${src-dir-assets}" includes="**/*.gif,**/*.jpg,**/*.png,**/*.css,**/*.swf,**/*.TTF,**/*.jpeg,**/*.xml" /> <pathconvert pathsep=" " property="assets.flex.output" refid="assets.flex" dirsep="/"> <map from="${src-dir-assets}/" to=""/> </pathconvert> <echo message="...Resources being considered..."/> <var name="filelist" value=""/> <var name="prefixfilelist" value="-include-file"/> <for list="${assets.flex.output}" delimiter=" " param="asset"> <sequential> <echo>Asset: @{asset}</echo> <var name="filelist_tmp" value="${filelist}"/> <var name="filelist" unset="true"/> <var name="filelist" value="${filelist_tmp} ${prefixfilelist} @{asset} '${src-dir-assets}/@{asset}'"/> </sequential> </for> <echo message="-output '${basedir}/flex_libs/assets.swc' ${filelist}"/> <exec executable="${FLEX_HOME}/bin/compc.exe" failοnerrοr="true"> <arg line="-output '${basedir}/flex_libs/assets.swc' ${filelist}"/> </exec> </target> <target name="main" depends="buildAssertsSWC"> <path id="src.files"> <fileset dir="${src-dir}"> <include name="**/**"/> </fileset> </path> <mxmlc file="${APP_ROOT}/flowdesigner.mxml" output="build/flowdesigner.swf" actionscript-file-encoding="UTF-8" keep-generated-actionscript="true" incremental="true" > <load-config filename="${FLEX_HOME}/frameworks/flex-config.xml"/> <source-path path-element="${FLEX_HOME}/frameworks"/> <compiler.library-path dir="${FLEX_HOME}/frameworks" append="true"> <include name="libs" /> </compiler.library-path> <compiler.library-path dir="${basedir}" append="true"> <include name="flex_libs" /> </compiler.library-path> <compiler.source-path path-element="${src-dir}"/> </mxmlc> </target> </project>

然后运行ant命令,即可。

相关文章:

  • 与Windows 7 Beta1的亲密接触
  • 从Windows 7 beta版看微软的意图
  • vs2010 连接免费的TFS preview
  • 优化系统参数设置——下载提速三步走
  • 操作系统自我修复攻略
  • 使用两点经纬度计算距离
  • 装机必备 Windows Mobile系统最“牛”软件
  • 设置电脑信息不再让“秘密”曝光
  • 歌曲搜索,谁的功能更强大——三款网络音乐播放器测评
  • 各有各的神通 10款图片处理小工具应用
  • [IE技巧] IE8中HTTP连接数目的变化
  • how to delete tfspreview project
  • UltraWebGrid右键菜单在Excel上复制粘贴
  • WCF use json communicate data
  • 点击UltraWebGrid单元格中的链接,下载文件
  • 【css3】浏览器内核及其兼容性
  • CSS居中完全指南——构建CSS居中决策树
  • CSS相对定位
  • Invalidate和postInvalidate的区别
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • 动态规划入门(以爬楼梯为例)
  • 解析 Webpack中import、require、按需加载的执行过程
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 排序(1):冒泡排序
  • 首页查询功能的一次实现过程
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • 交换综合实验一
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • #14vue3生成表单并跳转到外部地址的方式
  • #NOIP 2014#Day.2 T3 解方程
  • (a /b)*c的值
  • (Java数据结构)ArrayList
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (力扣题库)跳跃游戏II(c++)
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (正则)提取页面里的img标签
  • .aanva
  • .Net IOC框架入门之一 Unity
  • .NET连接MongoDB数据库实例教程
  • @Autowired和@Resource装配
  • [ Linux ] Linux信号概述 信号的产生
  • [ vulhub漏洞复现篇 ] Grafana任意文件读取漏洞CVE-2021-43798
  • [ 手记 ] 关于tomcat开机启动设置问题
  • [20180312]进程管理其中的SQL Server进程占用内存远远大于SQL server内部统计出来的内存...
  • [BJDCTF2020]The mystery of ip
  • [BZOJ1060][ZJOI2007]时态同步 树形dp
  • [BZOJ4016][FJOI2014]最短路径树问题
  • [C语言]——函数递归
  • [DM复习]Apriori算法-国会投票记录关联规则挖掘(上)
  • [FT]chatglm2微调
  • [GYCTF2020]Ez_Express
  • [javaSE] 数据结构(二叉查找树-插入节点)