[备忘] swf swc swz RSLs ant

[本文原创链接: http://www.smithfox.com/?e=135 , 转载请保留此声明, 谢谢 ]

只要做Flex项目, 终有一天你要涉及到RSLs, 要和swf, swc, swz文件打交道. 希望这篇文章能帮助大家理清楚这些文件的用途和关系.

RSLs全称是Runtime Shared Libraries, 可见RSL就是"库", 它是Adobe flash平台的二进制模块化技术, 目的类似于动态链接库(DLL, so), 但实现技术的细节是完全不一样. 本文先介绍几种文件格式, 再介绍用Ant编译swc,swf文件时的要点和一些注意事项.

1. swz 文件

从flash player 9.0.115以后, adobe支持的一种RSLs,  称之为 "signed framework RSLs".

Adobe解释: 签名的RSLs(也就是swz) 会优先被缓存在Flash Player中, 而且可以被任何应用程序访问, 即使是和原先程序不同的domain也能. swz文件只需下载一次, 就算是浏览器缓存被清除, swz也可以从disk重新读出. 而未签名的RSLs(以swf以形式存在) 只能缓存在各个浏览器中, 如果浏览器的清除了缓存, 就需要再次下载, 而且被限定为只能在Application同一domain内被访问.

可以这样简单理解: 一台PC, 只需要下载一次swz文件, 就可以为本机的所有浏览器, 以及AIR, 共享. 为了做到这一点, adobe将swz文件cache在PC上的固定的目录下, 你可以去看看

MAC:  ~/Library/Caches/Adobe/Flash Player/AssetCache

Windows 7: C:\Users\${username}\AppData\Roaming\Adobe\Flash Player\AssetCache\

Windows XP: C:\Documents and Settings\${username}\Application Data\Adobe\Flash Player\AssetCache\.

只有Adobe公司自己才能创建swz文件, 尽管有人建议也开放给合作的第三方, 但迄今为至还没有.

swz文件是一种未知加密文件格式, Flash player内部会对swz文件进行签名认证.

当前只有Flex framework自带的几个库是swz形式, 以Flex SDK 4.1为例, 可以到下面的链接下载:

http://fpdownload.adobe.com/pub/swz/flex/4.1.0.16076/framework_4.1.0.16076.swz
http://fpdownload.adobe.com/pub/swz/flex/4.1.0.16076/textLayout_1.1.0.604.swz
http://fpdownload.adobe.com/pub/swz/flex/4.1.0.16076/osmf_flex.4.0.0.13495.swz
http://fpdownload.adobe.com/pub/swz/flex/4.1.0.16076/rpc_4.1.0.16076.swz
http://fpdownload.adobe.com/pub/swz/flex/4.1.0.16076/spark_4.1.0.16076.swz
http://fpdownload.adobe.com/pub/swz/flex/4.1.0.16076/sparkskins_4.1.0.16076.swz
http://fpdownload.adobe.com/pub/swz/flex/4.1.0.16076/datavisualization_4.1.0.16076.swz

(上面的链接信息可以在 D:\flex\flex_sdk_4.1.0.16076_mpl\frameworks\flex-config.xml中看到, 这个文件非常重要, 建议花点时间仔细看看这个文件)

值得注意的是 D:\flex\flex_sdk_4.1.0.16076_mpl\frameworks\libs\ 目录下有好几个swc(不是swz)文件, 和上面的链接对应, 你就会发现 playerglobal.swc,flex.swc,utilites.swc,flash-integration.swc 这几个文件Adobe并没有做成 swz库.

在引用swz文件时, 需要注意顺序, 否则会有莫名的错误, 上面links的顺序已经是调整过的了.

对framework的library, 建议尽量用swz, 而不是swf, 同时为了避免在运行时到上述的adobe官方网站去下载(有时会很慢), 你可以将这些swz文件先下载到自己的http server, 通过改变编译参数 runtime-shared-library-path 设定将swz rsl-url放在swf rs-url之前, 来调整下载优先级, 比如我的项目的ant脚本中对framework RSL的写法:

<!--声明将会使用 framework RSL -->
<runtime-shared-library-path path-element="${FLEX_HOME}/frameworks/libs/framework.swc">
	<!-- framework.swz 文件已经从adobe官方网站下载到自己Server的相对目录 ../frameworkrsls/ 下了 
	如果本 swf 文件 url是                      http://www.smithfox.com/app/modules/module1.swf  
	那么这个framework.swz在运行时的实际 url 是 http://www.smithfox.com/app/frameworkrsls/framework.swz  
	-->
	<url rsl-url="../frameworkrsls/framework.swz"/>
	
	<!-- swz下载的优先级比swf高, 只有上述swz url不存在时, 才会尝试 swf -->
	<url rsl-url="../frameworkrsls/framework.swf"/>
	
	<!-- 如果上面两个都下载不到, 就到adobe官方网站去下载, 为了避免这种情况, 所以将这个url放在最后 -->
	<url rsl-url="http://fpdownload.adobe.com/pub/swz/flex/4.1.0.16076/framework_4.1.0.16076.swz" 
                          policy-file-url="http://fpdownload.adobe.com/pub/swz/crossdomain.xml"/>
</runtime-shared-library-path>

你还可以参考Adobe官方有关文章: http://livedocs.adobe.com/flex/3/html/help.html?content=rsl_09.html

2. swc文件

swc文件和swz,swf最大的区别在于, 它是用在编译期, 而不是运行期. RSLs 指的是swf和swz, swc不算是RSLs, 尽管它和RSLs有间接关系.

swc文件是一个zip格式的文件, 用7z打开一个swc后, 如下图:

 

library.swf 和 catalog.xml名字是固定的, catalog.xml是对library.swf的描述.

在编译时, swc可以被静态链接, 也可以被动态链接, 这是由编译参数决定的.

需要对动态链接的情况做一点明: 只有带有摘要信息的swc文件才能被动态链接, 否则运行时会报错, 让你重新编译. swc文件中的catalog.xml中的信息会编译到app swf中, 而app swf运行时会找原swc中的library.swf文件(需要更名), 并且会校验RSL(原library.swf文件)的摘要信息.  下面是catalog.xml中摘要信息的xml片断:

      <digests>
        <digest type="SHA-256" signed="false" value="00fa9d407aa1bb364a369182736c022a372a9f721c7b625e2e93b2e5cda00eb7"   />
      </digests>

如果你遇到过 "Flex Error #1001: Digest mismatch with RSL ..."之类的错误, 这是因为:运行时的rsl swf不是编译时swc中的libray.swf.

如果你只拿到一个test.swc文件, 你需要将这个swc中的library.swf用unzip提取出来, 并且更名为test.swf

大部分同学不用做这个步骤, 是因为Flash Builder已经自动帮我们做过了,  如果你作手动编译, 就需要自己手动做.

3. swf文件

swf分为三种: app swf, library swf, module swf.

app swf是指可以直接在flash player中运行的, 而library swf是指swc文件中的library.swf文件, module swf指Flex Module产生的swf文件.

4. 有关RSL的编译参数

mxmlc和compc是Flex SDK自带的编译命令, 可以用下面的形式来查看其自带的帮助:

#mxmlc -help list advanced details

#compc -help list advanced details

compc默认debug是true, 所以当用compc编译时, 最终的release版本需要指定 debug 为 false,

相反mxmlc默认debug是false.

默认值还需要考虑{FLEX_HOME}/frameworks/flex_config.xml文件, 这个文件配置了很多的默认值.

因为很多的编译参数都有别名(alias), 所以在网上查找这些资料时, 为了不至于搞糊涂, 可以对应上面的两个命令的help来看.

static-link-runtime-shared-libraries:  是否用动态链接

runtime-shared-library-path: RSL配置, 可以有多个

external-library-path: 编译时不要将指定的swc中的类带入, 可以指定多个

optimize: 编译时是否优化

keep-as3-metadata: 通过指定metadata, 将未指定的metadata的相关代码清除, 以减少size. 可以指定多个

上面几个参数, 网上有许多资料, 在此就不多说.

5. 用Ant编译项目

IT妖怪 的文章 使用RSL发布flex项目需要的build.xml要诀详解, 是比较流行的一篇用中文中介绍Ant编译Flex项目的文章, 我也从这个文章中受益. 不过结合我自己项目, 他文中的Ant, 有几点需要注意:

1> createRSL这个task, 值得商榷, 出发点是好的: 想最大地优化swc, 但是通过optmize和digest两个命令去重新update原swc文件, 很容易出问题. 我就吃了这个亏!!

如果swc是自己的子项目, 完全可以在编译swc时, 用optimize, keep-as3-metadata两个参数来一次性达到优化.

如果swc是第三方的, 可以用ant createRSL中的思路和步骤, 一次性做好优化后的swc, 而不用每次编译都调用createRSL task, 反复 优化这些已经优化后的swc

createRSL可以改将优化功能去掉, 只做基本的从swc中抽取swf的功能, 做一个 extractRSL task:

<target name="extractRSL">
	<macrodef name="extract-rsl">
		<attribute name="rsl-dir" />
		<attribute name="swc-dir" />
		<attribute name="swc-name" />
		<sequential>
			<unzip src="@{swc-dir}/@{swc-name}.swc" dest="@{rsl-dir}">
				<patternset>
					<include name="library.swf" />
				</patternset>
			</unzip>
			<move file="@{rsl-dir}/library.swf" tofile="@{rsl-dir}/@{swc-name}.swf" />
		</sequential>
	</macrodef>

	<extract-rsl rsl-dir="${BIN_DIR}/rsls" swc-dir="${LIBS_DIR}" swc-name="sparktree" />
	<extract-rsl rsl-dir="${BIN_DIR}/rsls" swc-dir="${LIBS_DIR}" swc-name="SWFAddress" />
	<extract-rsl rsl-dir="${BIN_DIR}/rsls" swc-dir="${LIBS_DIR}" swc-name="flex4_ofc2" />
	<extract-rsl rsl-dir="${BIN_DIR}/rsls" swc-dir="${LIBS_DIR}" swc-name="smf" />
</target>

2> runtime-shared-library-path option应该将Server自己的swz url放在最前面, 见文章前面的例子

3> 根据情况可以再增加 额外的swc 的 external-library-path

6.  我的项目的例子

例子不太方便直接放出, 如果有同学想借鉴, 可以email我, 或是在此留言.

[本文原创链接: http://www.smithfox.com/?e=135 , 转载请保留此声明, 谢谢 ]

smithfox | Thursday 21 April 2011 at 9:58 pm | | UI        | Used tags: , , , ,

eight comments

zrong

很详细!
我最开始用RSL的时候碰到过很多稀奇古怪的问题,现在考虑RSL这个东东,是否真的需要。如果模块化做得够好的话,似乎不需要这个东东了。

zrong, (URL) - 06-05-’11 09:20
Darkness

您好,我在使用

Darkness, - 07-05-’11 23:13
haroel

你好,我在毕业设计时碰到一个问题,就是用FB4.5编译生成的一个swf文件就100多KB,放在服务器上,给别人测试时说是访问要很慢,而我自己访问是没问题的,觉得很邪门,看了你这篇文章才知道原来是flashplayer的缓存问题,关于这问题有没有比较好的解决方法,模块化能解决吗?

haroel, - 08-05-’11 21:59
smithfox

haroel, 总的来说Flex生成的swf就是比较大, FB默认应该是用RSLs的, 所以, 别人第一次访问你的程序时, 会下adobe下载swz文件, 所以比较慢.

如果别人访问你的Server比较快的话, 你可以将swz文件按文章中的访问放到你的server上.

如果你很在意用户的第一次访问的体验, 可以不用RSLs, 就用静态编译, 尽管swf会更大一点, 但第一次访问时, 总的下载size反而会更小.

如果这些方法还不能改善, 你可以看我之前写的一篇文章: http://www.smithfox.com/?e=83 http://www.smithfox.com/?e=99

如果这Preloader还不够, 你就需要考虑用 AS3来写, 而不是Flex.

smithfox, (URL) - 09-05-’11 09:37
liufubin

写得非常好

liufubin, - 12-11-’12 17:54
Dior iPhone 6 Cases

Other than its screen size, it sounds like the S6 Plus will essentially be a clone of the S6 Edge — it has the same screen resolution, the same camera, and it will likely have a design that’s very similar. Blog Sam Mobile, which has a strong record when it comes to reporting on unreleased Samsung devices, also reports that the phone will come with 32GB of storage space.

Dior iPhone 6 Cases, (URL) - 04-06-’15 15:10
Service de femme de menage montreal rive nord et rive sud

service de femme de ménage
Professionnelle de l’entretien, notre dynamique entreprise saura réaliser pour vous l’ensemble des travaux ménagers.

G.E.M. s’engage sur une prestation de qualité ! femme de menage
montreal
Notde équipe de spécialistes chevronnés accomplira un travail à la fokis
soigné, rapide et économique.
De plus, nous utilsons exclusivement des produits écologiques et hautement performants, issus
des toutes dernières technologies.
La viie moderne véhicule aussi dee lourdes menaces. D’apparence inoffensive, meubles, apoareils ménagers, matériaux
de construction, jouets ou objets familiers peuvent dégager des phtalates ou autres redoutables composés chimiques.

entretien ménager résidentiel.G.E.M votre unique intervenant qui poura assurer tot au long de
l’année la continuité d’un service de haujte
qualité et à la carte !
Entretien ménager résidentiel, Entretien ménager commercial, Grand
ménage résidentiel et commercial, Lavage de Vitres, Lavage de tapis, Décapage et Cirage de
planchers et Plus.

Franchise de Nettoyage Résidentiel et Commercial, service de femme de ménage
,entretien ménager commercial,entretien ménager commercial, ménage résidentiel, service
d’entretien ménager montréal
Nous aidons les personnes désireuses d’être propriétaires d’entreprises
prospères à devenir des professionnels du nettoyage commercial
et de la maintenance. En rejoignant notre réseau d’entreprises, vous bénéficierez d’un avantage concurrentiel ainsi que d’une aide apportée par unn modèle d’affaires éprouvé vous assurant dee travailler avec
un leader du domaine disposant de l’expérience et la stabilité.

Vous dijsiez augmentez vos revenus afin d’améliorer
votre quotidien ? Faites Appel a G.E.M Ménage! service de femme
de ménage ,entretien ménager commercial,entretien ménager commercial,
ménage résidentiel, service d’entretien ménager montréal,
servie de femme dde ménage ,entretien ménager commercial,entretien ménager commercial,
ménage résidentiel, service d’entretien ménager
montréal
Franchises de Nettoyage Résidentiel et Commercial disponible Partout A Montréal ,Rive Nord et Rive
Sud.

Financement Sans Intérêt par G.E.M .
Un dépôt est obligatoire

Un Investisement de 24 000$ Vous Rappore (4800$ et plus
de Revennus par Mois)!

Matériel et formation fouri

Nous aidons les personnes désireuses d’être propriétaires d’entreprises
prospères à devenir des professionnels du nettoyage
commercial et de lla maintenance. En rejoignant notr réseau d’entreprises, vous bénéficierez
d’un avantage concurrentiel ainsi que d’une aide apportée par un modèle d’affaires éprouvé vous assurant de
travailler avec un leade du domaine disposant de l’expérience et la stabilité.

G.E.M Ménage vous offre l’opportunité de travailler pendant la journée de lundi
a vendredi .

G.E.M Vous propose des contrats d’entretien ménager avec des horaires souples et uun revenu garanti.

Pour les personnes libres,les nouveaux arrivants ou les sans-emplois G.E.M peut favoriser votre accès au marché du travail
!

G.E.M vous propose des contrats stables et rémunérateurs!

Dans le secteur résidentiel idéal pour un couple, ou un homme seul dans
le secteur commercial
Vouss débuter des maintenant

Dess techniques et méthodes de travail éprouvées.

Une aidxe à laa constitution ou à l’enregistrement de lsur entreprise.

Des territoires d’exercice protégés.
Entreprise clés en main.
Un garantie qui protège votre investissement

Exigences de l’entrée de notre réseau :
Les demandes sont examinées attntivement et une enquête relative
à la candidature est menée.
Les candidats doivent passer une entrevue de sélection.
Avant tout début d’activité, les candidats doivent assistrr à
des sessions de formation.

Au G.E.M. nous nous assurons que nos franchisés
puissent offrir à leurs clienmts un service professionnel d’une qualité supérieure à cslle de la concurrence.

Franchise disponible au résidentiel et commercial

N’hésitez pas à nous contacter
469 Jean-Talon Ouest Suite # 222
Montreeal QC
gemmenage.net
gemmenage.com

Service de femme de menage montreal rive nord et rive sud, (URL) - 25-08-’17 02:07
Service de femme de menage montreal rive nord et rive sud

service dde femme de ménage
Professionnelle de l’entretien, notre dynamique entreprise saura réaliser
pour vous l’ensemble des travaux ménagers.
G.E.M. s’engage sur une prestation de qualité ! femme de menage montreal
Notre équipe de spécialistes chevronnés accomplira un travail à
la fois soigné, rapide et économique.
De plus, nous utilisons exclusivement des produits écologiques ett hautement performants, issus des toutes
dernières technologies.
La vie moderne véhicule aussi de lourddes menaces. D’apparence inoffensive, meubles, appareils ménagers, matériaux
de construction, jouets ou objets familiers peuvent
dégager des phtalates ou autres redoutables composés chimiques.

entretien ménager résidentiel.G.E.M votre unique intervenant
qui pourra assurer toutt au long de l’année la continuité d’un service de
haute qualité et à la carte !
Entretien ménager résidentiel, Entretien ménager commercial, Grand ménage résidentiel et commercial,
Lavage de Vitres, Lavage de tapis, Décapage eet Cirage de planchers et Plus.

Franchise de Nettoyage Résidentiel et Commercial, service de femme de ménage ,entretien ménager commercial,entretien ménager commercial, ménage résidentiel,
service d’entretien ménager montréal
Nous akdons les personnes désireuses d’être propriétaires d’entreprises prospères à
devenir des professionnels du nettoyage commercial ett de la maintenance.
En rejoignant notre réseau d’entreprises,
vous bénéficierez d’un avantage concurrentiel aiinsi qque d’une aide apportée par un modèle d’affaires éprouvé vous ssurant de travailler avec un leader du domaine disposant de l’expérience
et la stabilité.
Vous disiez augmentez vos revenus afin d’améliorer votre quotidien ?

Faites Apppel a G.E.M Ménage! service de femme de ménage ,entretien ménager commercial,entretien ménager commercial, ménage résidentiel, service d’entretien ménager montréal, service dee femmme de ménage ,entretien ménager commercial,entretien ménager commercial, ménage résidentiel, service d’entretien ménager montréal
Franchises de Nettoyage Résidentiel et Commercial disponible Partout A Montréal ,Rive
Nord et Rive Sud.

Financement Sans Intérêt paar G.E.M .
Un dépôt est obligatoire

Un Investissement de 24 000$ Vous Rappporte (4800$ et plus de Revenus
par Mois)!

Matériel et formation fourni

Nous aidons les personnes désireuses d’être propriétairesd’entreprises prospères à devenir des professionnels du
nnettoyage commercial et de la maintenance. En rejoignant notre réseau d’entreprises, vous bénéficierez
d’un avamtage concurrentiel aainsi qque d’une
aie apportée par unn modèle d’affaires éprouvé vous assurant de travailler avec un lleader du domaine disposant de l’expérience et la stabilité.

G.E.M Ménage vous offree l’opportunité dde travailler pendant la
journée de lundi a vendredi .

G.E.M Vous propose des contrats d’entretien ménager avec des horaires souples et un revenu garanti.

Pour les personnes libres,les nouveaux arrivants oou les sans-emplois G.E.M
peut favoriser votre accès au marché du travail !

G.E.M vous propose ddes contrats stables et rémunérateurs!

Dans le secteur résidentiel idéal pour un couple, ou
un homme seul dans le secteur commjercial
Vouus débuter des maintenant

Des techniques et méthodes de travail éprouvées.

Une aide à la constitution ou à l’enregistrement de leur entreprise.

Des territoires d’exercice protégés.
Entreprise clés en main.
Un gartantie qui protège votre investissement

Exigences de l’entrée de nootre réseau :
Les demandes sonbt examinées attentivement et une enquête relative à la candidature
est menée.
Les candidats doivent passer une entrevue de sélection.

Avant tout début d’activité, les candidats doivent
assister à des sessions de formation.

Au G.E.M. nous nous assuron que nos franchisés puissent offrir à leurs clients un service professionnel d’une qualité supérieure à celle de la concurrence.

Franchise disponible au résidentiel et commercial

N’hésitez pas à nous contacter
469 Jean-Talon Ouest Suite # 222
Montreal QC
gemmenage.net
gemmenage.com

Service de femme de menage montreal rive nord et rive sud, (URL) - 12-09-’17 13:36
(optional field)
(optional field)
为阻止垃圾广告, 请在提交评论前, 回答一个简单问题(Please answer an simple question)
Remember personal info?
Notify
Small print: All html tags except <b> and <i> will be removed from your comment. You can make links by just typing the url or mail-address.