使用命令行MXML编译器(amxmlc)编译ActionScript和MXML 资源:
amxmlc [compiler options] -- MyAIRApp.mxml
这里的[compiler options] 指定编译器选项。
Amxmlc命令调用mxmlc,再加上额外的参数,+configname=air,它指示编译器使用air-config.xml代替flex_config.xml文件。
编译器根据air-config.xml配置文件编译AIR程序,你也可以使用本地的,工程级别的配置文件来代替全局配置文件,比如你可以先复制全局文件进行修改,然后通过-load-config选项载入:
-load-config=project-config.xml 替换全局文件
-load-config+=project-config.xml 增加额外的参数值到全局变量中,比如-library-path 选项
你也可以使用指定的命名约定,让编译器自动载入配置文件,例如如果你的程序主MXML文件名为RunningMan.mxml,那么配置文件名为RunningMan-config.xml。编译程序只需要输入:
amxmlc RunningMan.mxml
示例
下面的例子演示了如何使用amxmlc编译器
编译一个AIR MXML文件:
amxmlc myApp.mxml
编译并设置输出:
amxmlc -output anApp.swf -- myApp.mxml
编译一个AIR ActionScript 文件:
amxmlc myApp.as
指定编译器配置文件:
amxmlc -load-config config.xml -- myApp.mxml
从其他配置文件读取额外参数:
amxmlc -load-config+=moreConfig.xml -- myApp.mxml
添加外部库:
amxmlc -library-path+=/libs/libOne.swc,/libs/libTwo.swc? -- myApp.mxml
不使用配置文件编译AIR MXML文件:
-
mxmlc?-library-path?[AIR?SDK]/frameworks/libs/air/airframework.swc,?^??
-
??
-
[AIR?SDK]/frameworks/libs/air/airframework.swc,?^??
-
??
-
-library-path?[Flex?2?SDK]/frameworks/libs/framework.swc?^??
-
??
-
--?myApp.mxml??
使用runtime-shared library(RSL)编译AIR MXML文件:
amxmlc -external-library-path+=../lib/myLib.swc -runtime-shared-libraries=myrsl.swf -- myApp.mxml
使用Java版本的编译器:
java flex2.tools.Compiler +flexlib [Flex SDK 2]/frameworks +configname=air [additional compiler options] -- myApp.mxml
Flexlib选项指定Flex SDK frameworks目录,使编译器找到flex_config.xml文件。
java -jar [Flex SDK 2]/lib/mxmlc.jar +flexlib [Flex SDK 2]/frameworks +configname=air [additional compiler options] -- myApp.mxml?
使用acompc编译器编译AIR组件或库
使用组件编译器acompc编译AIR库或独立组件。组件编译器很类似amxmlc编译器,只是需要注意以下事项:
1. 你必须指定哪些类将被编译进库或组件。
2. Acompc不会自己去寻找本地配置文件,你必须手动使用-load-config选项加载。
Acompc和compc一样,除了载入配置文件air-config.xml文件代替flex_config.xml文件。
组件编译器配置文件
下面的例子演示建立用两个类所建立的库:ParticleManager和Particle,都在com.adobe.samples.particles包中,存放在source/com/adobe/samples/particles目录下:
?
?
-
<flex-config>??
-
??
-
????<compiler>??
-
??
-
????????<source-path>??
-
??
-
????????????<path-element>source</path-element>??
-
??
-
????????</source-path>??
-
??
-
????</compiler>??
-
??
-
????<include-classes>??
-
??
-
????????<class >com.adobe.samples.particles.ParticleManager</ class >??
-
??
-
????????<class >com.adobe.samples.particles.Particle</ class >??
-
??
-
????</include-classes>??
-
??
-
</flex-config>??
然后输入下面的命令:
代码
compc -source-path source -include-classes com.adobe.samples.particles.Particle?
com.adobe.samples.particles.ParticleManager
示例 编译AIR组件或库:
acompc -load-config myLib-config.xml -output lib/myLib.swc
编译runtime-shared library:
acompc -load-config myLib-config.xml -directory -output lib
注意,在运行此命令之前lib目录必须存在且空的
使用AIR Debug Launcher进行调试
在开发过程中可使用AIR Debug Launcher (ADL)来调试基于flex或HTML的AIR程序。使用ADL,你可不必先对程序打包和安装,使用ADL也不需要安装运行时。
ADL所支持的调试只限于trace语句的输出,如果你开发基于Flex的程序,可使用Flash Debugger (或Flex Builder) 调试复杂问题。
用ADL运行程序
使用下面的语法:
adl [-runtime <runtime-directory>] <application.xml> [<root-directory>] [-- arguments]
-runtime <runtime-directory> 指定要使用的运行时,如果没指定,则默认为ADL所在的SDK目录(如果ADL被移动到SDK目录外,则需要手动指定)
<application.xml> 应用程序描述文件
<root-directory> 应用程序运行所在的根目录,如果没有指定,则该目录就是程序描述文件所在目录。
-- arguments 任意字符串参数
注意:当你想运行的AIR程序已经在运行的话,新的实例将不能运行。
打印trace语句
要在ADL下输出trace 语句到控制台,可使用trace() 函数:
trace("debug message");
ADL示例
在当前目录下运行程序:
adl myApp-app.xml
在当前目录的子目录下运行程序:
adl source/myApp-app.xml release
运行程序并传递两个命令行参数,"foo"和"bar":
adl myApp-app.xml -- foo bar
用指定的运行时运行程序:
adl -runtime /AIR/XYZ/AIRSDK/bin myApp-app.xml
在Flash Debugger中设置断点
要在Flash Debugger中调试基于SWF的AIR程序,需要启动一个FDB会话,且运行debug版本的应用程序。Debug版本的SWF文件会自动连接到FDB会话。
1. 启动FDB,FDB命令在Flex 2 SDK的bin目录中。
在控制台中会显示FDB提示:<fdb>
2. 执行Run命令:<fdb>run 【回车】
3. 运行debug版本的程序:
adl myApp-debug.xml
4. 使用FDB命令设置断点。
输入:continue 【回车】
设置断点
输入:continue 【回车】
使用AIR开发工具打包程序
用AIR Developer Tool(ADT)打包程序为AIR文件。ADT创建基于SWF或HTML的安装文件(如果你使用Flex Builder,可用导出功能)
ADT是java程序,类似与Ant需要在命令行下运行。SDK中包含了命令行脚本用于执行该命令。
最简单的AIR程序至少需要一个程序描述文件和主SWF或HTML文件。任何其他用到的资源都会被打包进AIR文件。
ADT用法
使用下面的语法:
adt -package air_file app_xml [ file_or_dir | -C dir file_or_dir ... ] ...
air_file :即将创建的AIR文件名。
app_xml :程序描述文件路径,不管该文件名是什么,最后打包后都改为"application.xml",该路径可以是相对也可以是绝对路径。
file_or_dir :将被打包的文件和目录,可以指定任意数量的文件和目录,用空格符分隔开。如果是目录,则该目录下的所有文件和子目录,除了隐藏文件都被添加到安装包中。指定的文件和目录必须在当前目录下或是当前目录的子目录,可使用-C选项改变当前目录。
ADT 示例
在当前目录中打包指定的程序文件:
adt -package myApp.air myApp.xml myApp.swf components.swc
打包当前目录中的所有文件和子目录:
adt -package myApp.air myApp.xml .
只打包主文件和images 子目录:
adt -package myApp.air myApp.xml myApp.swf images
打包和(release/bin)目录下的程序描述文件和SWF文件:
adt -package myApp.air release/bin/myApp.xml -C release/bin myApp.swf
下面的例子演示如何打包多个目录下的文件:
-
/devRoot??
-
??
-
????/myApp??
-
??
-
????????/release??
-
??
-
????????????/bin??
-
??
-
????????????????myApp.xml??
-
??
-
????????????????myApp.swf??
-
??
-
????/artwork??
-
??
-
????????/myApp??
-
??
-
????????????/images??
-
??
-
????????????????image-1.png??
-
??
-
????????????????image-n.png??
-
??
-
????/libraries??
-
??
-
????????/release??
-
??
-
????????????/libs??
-
??
-
????????????????lib-1.swf??
-
??
-
????????????????lib-n.swf??
下面的ADT命令在/devRoot/myApp目录下运行:
-
adt?-package?myApp.air?release/bin/myApp.xml?-C?release/bin?myApp.swf???
-
??
-
????-C?../artwork/myApp?images?-C?../audio??
该命令执行结果:
-
/myAppRoot??
-
??
-
????/META-INF??
-
??
-
????????/AIR??
-
??
-
????????????application.xml??
-
??
-
????????????hash??
-
??
-
????myApp.swf??
-
??
-
????mimetype??
-
??
-
????/images??
-
??
-
????????image-1.png??
-
??
-
????????image-n.png??
-
??
-
????/libs??
-
??
-
????????lib-1.swf??
-
??
-
????????lib-n.swf????????AIRAlias.js??
运行ADT命令(没有设置classpath) :
java -jar {AIRSDK}/lib/ADT.jar -package myApp.air myApp.xml myApp.swf
运行ADT命令(把ADT.jar包加入到classpath变量中) :
java com.adobe.air.ADT -package -package myApp.air myApp.xml myApp.swf?
在简单的工程项目中使用Ant
这个例子展示如何用Ant构建AIR程序,一个非常简单的工程,所有文件都放在一个目录里。
注意:这个例子使用的是AIR SDK而不是Flex Builder,Flex Builder中的工具和配置文件的目录结构有所不同。
为了使用更简单些,例子中定义了一些变量属性,这一组属性定义了命令行工具的所在路径:
-
<property?name= "SDK_HOME" ?value= "C:/FlexSDK" />??
-
??
-
<property?name="MXMLC.JAR" ?value= "${SDK_HOME}/lib/mxmlc.jar" />??
-
??
-
<property?name="ADL" ?value= "${SDK_HOME}/bin/adl.exe" />??
-
??
-
<property?name="ADT.JAR" ?value= "${SDK_HOME}/lib/adt.jar" />??
这一组定义了工程的一些属性,这些变量将被转换为应用程序描述文件。这里还定义了程序根目录,还有MXMLC debug参数为true :
?
-
<property?name= "APP_NAME" ?value= "ExampleApplication" />??
-
??
-
?<property?name="APP_ROOT" ?value= "." />??
-
??
-
?<property?name="MAIN_SOURCE_FILE" ?value= "${APP_ROOT}/${APP_NAME}.mxml" />??
-
??
-
?<property?name="APP_DESCRIPTOR" ?value= "${APP_ROOT}/${APP_NAME}-app.xml" />??
-
??
-
?<property?name="AIR_NAME" ?value= "${APP_NAME}.air" />??
-
??
-
?<property?name="DEBUG" ?value= "true" />??
调用编译器
要调用编译,这个例子使用一个java任务来运行mxmlc.jar :
-
<target?name= "compile" >??
-
??
-
????<java?jar="${MXMLC.JAR}" ?fork= "true" ?failonerror= "true" >??
-
??
-
????????<arg?value="-debug=${DEBUG}" />??
-
??
-
????????<arg?value="+flexlib=${SDK_HOME}/frameworks" />??
-
??
-
????????<arg?value="+configname=air" />??
-
??
-
????????<arg?value="-file-specs=${MAIN_SOURCE_FILE}" />??
-
??
-
????</java>??
-
??
-
</target>??
当使用Java调用mxmlc时,必须指定+flexlib参数。+configname=air参数告诉mxmlc载入AIR配置文件来代替原来的Flex配置文件。
调用ADL来测试程序
要想用ADL运行程序,使用下面的任务:
-
<target?name= "test" ?depends= "compile" >??
-
??
-
????<exec?executable="${ADL}" >??
-
??
-
????????<arg?value="${APP_DESCRIPTOR}" />??
-
??
-
????</exec>???
-
??
-
</target>??
调用ADT打包程序
用下面的Java任务运行adt.jar工具:
-
<target?name= "package" ?depends= "compile" >??
-
??
-
????<java?jar="${ADT.JAR}" ?fork= "true" ?failonerror= "true" >??
-
??
-
????????<arg?value="-package" />??
-
??
-
????????<arg?value="${AIR_NAME}" />??
-
??
-
????????<arg?value="${APP_DESCRIPTOR}" />??
-
??
-
????????<arg?value="${APP_NAME}.swf" />??
-
??
-
????????<arg?value="*.png" />??
-
??
-
????</java>??
-
??
-
</target>??
如果你还想打包进更多的文件,可继续添加<arg> 元素。
在复杂的工程项目中使用Ant
因为有些程序会把所有的文件都放在一个目录中,下面的例子演示一个构建文件被用来编译,测试,打包AIR程序。
这个例子项目把源代码和图标都存在src目录,构建脚本创建了下面的工作目录 :
build
存储正式版的SWF文件
debug
存储调试版的SWF文件和资源文件
release
存储最终的AIR包
Compiling
Mxmlc编译器允许指定编译后的文件存放路径,通过-output 选项指定。
Testing
ADL的第二个参数指定AIR程序的根目录
Packaging
-
<?xml?version= "1.0" ??>??
-
<project>??
-
????<!--?SDK?properties?-->??
-
????<property?name="SDK_HOME" ?value= "C:/FlexSDK" />??
-
????<property?name="MXMLC.JAR" ?value= "${SDK_HOME}/lib/mxmlc.jar" />??
-
????<property?name="ADL" ?value= "${SDK_HOME}/bin/adl.exe" />??
-
????<property?name="ADT.JAR" ?value= "${SDK_HOME}/lib/adt.jar" />??
-
??
-
????<!--?Project?properties?-->??
-
????<property?name="APP_NAME" ?value= "ExampleApplication" />??
-
????<property?name="APP_ROOT_DIR" ?value= "." />??
-
????<property?name="MAIN_SOURCE_FILE" ?value= "${APP_ROOT_DIR}/src/${APP_NAME}.mxml" />??
-
????<property?name="APP_ROOT_FILE" ?value= "${APP_NAME}.swf" />??
-
????<property?name="APP_DESCRIPTOR" ?value= "${APP_ROOT_DIR}/${APP_NAME}-app.xml" />??
-
????<property?name="AIR_NAME" ?value= "${APP_NAME}.air" />??
-
????<property?name="build" ?location= "${APP_ROOT}/build" />??
-
????<property?name="debug" ??location= "${APP_ROOT_DIR}/debug" />??
-
????<property?name="release" ??location= "${APP_ROOT_DIR}/release" />??
-
????<property?name="assets" ??location= "${APP_ROOT_DIR}/src/assets" />??
-
??????
-
????<target?name="init" ?depends= "clean" >??
-
????????????<tstamp/>??
-
????????????<mkdir?dir="${build}" />??
-
????????<mkdir?dir="${debug}" />??
-
????????<mkdir?dir="${release}" />??
-
????</target>??
-
??
-
????<target?name="debugcompile" ?depends= "init" >??
-
????????<java?jar="${MXMLC.JAR}" ?fork= "true" ?failonerror= "true" >??
-
????????????<arg?value="-debug=true" />??
-
????????????<arg?value="+flexlib=${SDK_HOME}/frameworks" />??
-
????????????<arg?value="+configname=air" />??
-
????????????<arg?value="-file-specs=${MAIN_SOURCE}" />??
-
????????????<arg?value="-output=${debug}/${APP_ROOT_FILE}" />??
-
????????</java>??
-
????????<copy?todir="${debug}" >??
-
????????????????<fileset?dir="${assets}" />??
-
??????????</copy>??
-
????</target>??
-
??
-
????<target?name="releasecompile" ?depends= "init" >??
-
????????<java?jar="${MXMLC.JAR}" ?fork= "true" ?failonerror= "true" >??
-
????????????<arg?value="-debug=false" />??
-
????????????<arg?value="+flexlib=${SDK_HOME}/frameworks" />??
-
????????????<arg?value="+configname=air" />??
-
????????????<arg?value="-file-specs=${MAIN_SOURCE_FILE}" />??
-
????????????<arg?value="-output=${build}/${APP_ROOT_FILE}" />??
-
????????</java>??
-
????</target>??
-
??
-
????<target?name="test" ?depends= "debugcompile" >??
-
????????<exec?executable="${ADL}" >??
-
????????????????<arg?value="${APP_DESCRIPTOR}" />??
-
????????????<arg?value="${debug}" />??
-
??????????</exec>???
-
????</target>??
-
??
-
????<target?name="package" ?depends= "releasecompile" >??
-
????????<java?jar="${ADT.JAR}" ?fork= "true" ?failonerror= "true" >??
-
????????????<arg?value="-package" />??
-
????????????<arg?value="${release}/${AIR_NAME}" />??
-
????????????<arg?value="${APP_DESCRIPTOR}" />??
-
????????????<arg?value="-C" />??
-
????????????<arg?value="${build}" />??
-
????????????<arg?value="${APP_ROOT_FILE}" />??
-
????????????<arg?value="-C" />??
-
????????????<arg?value="${assets}" />??
-
????????????<arg?value="icons" />??
-
????????</java>??
-
????</target>??
-
??
-
????<target?name="clean" ?description= "clean?up" >??
-
????????<delete?dir="${build}" />??
-
????????<delete?dir="${debug}" />??
-
????????<delete?dir="${release}" />??
-
????</target>??
-
</project>?