這個(gè)例子包括了應(yīng)用中使用RSL的完整流程。使用命令行進(jìn)行編譯,但是你可以使用FlexBuilder用相同的過程來創(chuàng)建使用RSL。
記住SWC文件是一個(gè)包含SWF文件的二進(jìn)制文件,而SWF文件包含運(yùn)行時(shí)的定義和附屬元數(shù)據(jù)。你可以用壓縮工具比如WinZip來打開SWC文件。
在使用RSL之前,首先需要了解如何靜態(tài)鏈接一個(gè)SWC文件。
在這個(gè)例子中,應(yīng)用有一個(gè)app.mxml文件,使用ProductConfigurator.as和ProductView.as。文件目錄如下:
project/src/app.mxml
project/libsrc/ProductConfigurator.as
project/libsrc/ProductView.as
project/lib/
project/bin/
編譯這個(gè)應(yīng)用時(shí),可以使用source-path選項(xiàng)將/libsrc目錄下的類鏈接進(jìn)來,方法如下:
cd project/src
mxmlc -o=../bin/app.swf -source-path+=../libsrc app.mxml
這個(gè)命令添加ProductConfigurator和ProductView類到SWF文件中。
如果要?jiǎng)?chuàng)建庫(kù),可以用compc來創(chuàng)建SWC文件,用下面的命令:
cd project
compc -source-path+=libsrc -debug=false -o=lib/mylib.swc
ProductConfigurator ProductView
注意要將debug選項(xiàng)設(shè)置為false. 生成結(jié)果是project/lib/mylib.swc文件,包含ProductConfigurator和ProductView兩個(gè)類。
現(xiàn)在可以使用新創(chuàng)建的庫(kù)來重新編譯應(yīng)用,用library-path選項(xiàng)來指定庫(kù),方法如下:
cd project/src
mxmlc -o=../bin/app.swf -library-path+=../lib/mylib.swc app.mxml
創(chuàng)建庫(kù)以后,你可以用RSL來重新編譯生成應(yīng)用。完整的步驟如下:
?? 1. 指示編譯器不要將庫(kù)鏈接到應(yīng)用中。
?? 2. 準(zhǔn)備RSL,以便于在運(yùn)行時(shí)使用。
?? 3. 指示編譯器生成附加元數(shù)據(jù)用于加載RSL。
第一步是指定編譯生成應(yīng)用時(shí)庫(kù)中的哪些類需要排除在外。主要是使用external-library-path選項(xiàng),如下面的例子所示:
cd project/src
mxmlc -o=../bin/app.swf -external-library-path+=../lib/mylib.swc app.mxml
如果你嘗試運(yùn)行app.swf,F(xiàn)lash Player會(huì)拋出一個(gè)運(yùn)行時(shí)異常。因?yàn)镻roductConfigurator和ProductView類還未定義。external-library-path配置選項(xiàng)告訴編譯器編譯這些庫(kù),但是忽略了定義。你也可以使用externs選項(xiàng),但是一般來說,使用external-library-path更方便。
下一步是準(zhǔn)備RSL以便于能在運(yùn)行時(shí)找到它。首先從SWC文件中將library.swf解壓出來。
下面是如何解壓的例子:
cd project/lib
unzip mylib.swc library.swf
mv library.swf ../bin/myrsl.swf
此例子中將library.swf更名為myrsl.swf,并把它移動(dòng)到應(yīng)用SWF文件所在的目錄。
最后一步是使用RSL重新編譯應(yīng)用。主要是使用runtime-shared-libraries選項(xiàng),方法如下:
cd project/src
mxmlc -o=../bin/app.swf -external-library-path+=../lib/mylib.swc
-runtime-shared-libraries=myrsl.swf app.mxml
現(xiàn)在新的SWF文件會(huì)在運(yùn)行應(yīng)用前動(dòng)態(tài)加載RSL了。