使用RSL(Runtime Shared Libraries)來減小Flex生成的SWF文件的大小(V) -- 使用RSL
Posted on 2007-02-01 19:17 云自無心水自閑 閱讀(1170) 評(píng)論(0) 編輯 收藏 所屬分類: Flex 、Flex2在編譯應(yīng)用時(shí)要使用RSL, 需要使用下列編譯選項(xiàng):
??? * runtime-shared-libraries 提供運(yùn)行運(yùn)行時(shí)共享庫的位置.
??? * external-library-path|externs|load-externs 提供編譯時(shí)庫的位置. 編譯器需要這個(gè)信息動(dòng)態(tài)鏈接.
使用runtime-shared-libraries選項(xiàng)來指定SWF文件的位置, 這樣應(yīng)用能夠在運(yùn)行時(shí)加載RSL. 需要指定SWF與部署位置的相對(duì)路徑. 比如: 如果把library.swf文件放在web_root/libraries目錄下, 而應(yīng)用在web_root目錄下, 那么文件的指定方法是: libraries/library.swf
可以用這個(gè)選項(xiàng)指定多個(gè)庫. 如果指定了多個(gè)庫, 需要用逗號(hào)分隔.
使用external-library-path選項(xiàng)來指定library在編譯時(shí)的SWC文件或者目錄的位置. 編譯器會(huì)在編譯時(shí)根據(jù)這個(gè)選項(xiàng)進(jìn)行鏈接的檢查. 你還可以使用externs或者load-externs選項(xiàng)來指定其他單獨(dú)的classes或者xml文件來定義庫的內(nèi)容.
下面是一個(gè)編譯MyApp應(yīng)用的命令行示例, 其中使用了2個(gè)庫:
mxmlc -runtime-shared-libraries=
../libraries/CustomCellRenderer/library.swf,
../libraries/CustomDataGrid/library.swf
-external-library-path=../libraries/CustomCellRenderer,
../libraries/CustomDataGrid MyApp.mxml
庫的順序非常重要, 因?yàn)榛A(chǔ)類必須先加載.
你先可以使用配置文件, 示例如下:
<compiler>
??? <external-library-path>
??????? <path-element>../libraries/CustomCellRenderer</path-element>
??????? <path-element>../libraries/CustomDataGrid</path-element>
??????? <path-element>../libs/playerglobal.swc</path-element>
??? </external-library-path>
</compiler>
<runtime-shared-libraries>
??? <url>../libraries/CustomCellRenderer/library.swf</url>
??? <url>../libraries/CustomDataGrid/library.swf</url>
</runtime-shared-libraries>
runtime-shared-libraries選項(xiàng)值是library.swf文件是相對(duì)部署目錄的路徑. external-library-path選項(xiàng)是編譯時(shí)SWC文件的路徑. 因此, 必須先知道庫的部署路徑.
?
示例中, 編譯時(shí)文件結(jié)構(gòu)如下:
c:/appfiles/MyApp.mxml
c:/libraries/CustomCellRenderer/CustomCellRenderer.swc
c:/libraries/CustomDataGrid/CustomDataGrid.swc
library.swf在編譯進(jìn)不是必需的. Flex編譯器不驗(yàn)證SWF文件的存在與否, 但會(huì)把路徑信息編譯進(jìn)行最后的應(yīng)用代碼中.
文件的部署結(jié)構(gòu)如下:
web_root/MyApp.swf
web_root/libraries/CustomCellRenderer/library.swf
web_root/libraries/CustomDataGrid/library.swf
?