使用RSL(Runtime Shared Libraries)来减小Flex生成的SWF文件的大小(VI) -- 使用RSL的完整示例

这个例子包括了应用中使用RSL的完整流程。使用命令行进行编译,但是你可以使用FlexBuilder用相同的过程来创建使用RSL。

记住SWC文件是一个包含SWF文件的二进制文件,而SWF文件包含运行时的定义和附属元数据。你可以用压缩工具比如WinZip来打开SWC文件。
在使用RSL之前,首先需要了解如何静态链接一个SWC文件。

在这个例子中,应用有一个app.mxml文件,使用ProductConfigurator.as和ProductView.as。文件目录如下:

project/src/app.mxml
project/libsrc/ProductConfigurator.as
project/libsrc/ProductView.as
project/lib/
project/bin/


编译这个应用时,可以使用source-path选项将/libsrc目录下的类链接进来,方法如下:

cd project/src
mxmlc -o=../bin/app.swf -source-path+=../libsrc app.mxml

这个命令添加ProductConfigurator和ProductView类到SWF文件中。


如果要创建库,可以用compc来创建SWC文件,用下面的命令:

cd project
compc -source-path+=libsrc -debug=false -o=lib/mylib.swc
ProductConfigurator ProductView

注意要将debug选项设置为false. 生成结果是project/lib/mylib.swc文件,包含ProductConfigurator和ProductView两个类。

现在可以使用新创建的库来重新编译应用,用library-path选项来指定库,方法如下:

cd project/src
mxmlc -o=../bin/app.swf -library-path+=../lib/mylib.swc app.mxml

创建库以后,你可以用RSL来重新编译生成应用。完整的步骤如下:

   1. 指示编译器不要将库链接到应用中。
   2. 准备RSL,以便于在运行时使用。
   3. 指示编译器生成附加元数据用于加载RSL。


第一步是指定编译生成应用时库中的哪些类需要排除在外。主要是使用external-library-path选项,如下面的例子所示:

cd project/src
mxmlc -o=../bin/app.swf -external-library-path+=../lib/mylib.swc app.mxml

如果你尝试运行app.swf,Flash Player会抛出一个运行时异常。因为ProductConfigurator和ProductView类还未定义。external-library-path配置选项告诉编译器编译这些库,但是忽略了定义。你也可以使用externs选项,但是一般来说,使用external-library-path更方便。

下一步是准备RSL以便于能在运行时找到它。首先从SWC文件中将library.swf解压出来。

下面是如何解压的例子:

cd project/lib
unzip mylib.swc library.swf
mv library.swf ../bin/myrsl.swf

此例子中将library.swf更名为myrsl.swf,并把它移动到应用SWF文件所在的目录。

最后一步是使用RSL重新编译应用。主要是使用runtime-shared-libraries选项,方法如下:

cd project/src
mxmlc -o=../bin/app.swf -external-library-path+=../lib/mylib.swc
-runtime-shared-libraries=myrsl.swf app.mxml

现在新的SWF文件会在运行应用前动态加载RSL了。



你可能感兴趣的:(使用RSL(Runtime Shared Libraries)来减小Flex生成的SWF文件的大小(VI) -- 使用RSL的完整示例)