swc内部构造探秘初步

SWC是flex的库文件,对应于Java的jar文件。

和jar文件一样,SWC文件也是一个简单的ZIP文件。我们可以用7zip等解压缩工具打开它。

 

SWC文件的构造如下所示

SWC

-------catalog.xml

-------libary.swf

-------locale目录(可选)

等等

 

其中catalog.xml描述了swf里的类信息。

 

一个简单的catalog.xml可能包含下列信息:

 

版本信息:

 

Xml代码 复制代码

Xml代码 复制代码  收藏代码 swc内部构造探秘初步 - chqj_163 - chqj_163 的博客
  1. <versions>  
  2.   <swc version="1.2" />    
  3.   <flex version="3.2.0" build="3958" />    
  4. </versions>  
<versions>   <swc version="1.2" />    <flex version="3.2.0" build="3958" />  </versions>

 

feature信息,尚未了解其中tag代表的含义

 

Xml代码 复制代码

 

Xml代码 复制代码  收藏代码 swc内部构造探秘初步 - chqj_163 - chqj_163 的博客
  1. <features>  
  2.   <feature-script-deps />    
  3.   <feature-components />    
  4.   <feature-files />    
  5. </features>  
<features>   <feature-script-deps />    <feature-components />    <feature-files />  </features>

 

 

libraries标签代表SWC中所包含的swf文件,典型的文件名是library.swf,script标签代表了用斜杠分割的类名。

 

<libraries>
<library path="library.swf">
<script name="mx/core/mx_internal" mod="1225427288988" signatureChecksum="2693670951">

 

 上述script的一个典型格式如下

Xml代码 复制代码

 

Xml代码 复制代码  收藏代码 swc内部构造探秘初步 - chqj_163 - chqj_163 的博客
  1. <script name="com/test/Employee" mod="1228811323437" signatureChecksum="185354909">  
  2.   <def id="com.test:Employee" />    
  3.   <dep id="com.test:Base" type="i" />    
  4.   <dep id="com.test:IEmployee" type="i" />    
  5.   <dep id="AS3" type="n" />    
  6.   <dep id="mx.collections:ArrayCollection" type="s" />    
  7.   <dep id="com.test:DynamicClass" type="s" />    
  8.   <dep id="mx.collections:ArrayCollection" type="e" />    
  9.   <dep id="trace" type="e" />    
  10.   <dep id="com.test:DynamicClass" type="e" />    
  11. </script>  
<script name="com/test/Employee" mod="1228811323437" signatureChecksum="185354909">   <def id="com.test:Employee" />    <dep id="com.test:Base" type="i" />    <dep id="com.test:IEmployee" type="i" />    <dep id="AS3" type="n" />    <dep id="mx.collections:ArrayCollection" type="s" />    <dep id="com.test:DynamicClass" type="s" />    <dep id="mx.collections:ArrayCollection" type="e" />    <dep id="trace" type="e" />    <dep id="com.test:DynamicClass" type="e" />  </script>

 

def标签代表了Actionscript3格式的类名,dep标签代表了这个类所依赖的其他类,我们看到有不同的type,很显然i代表inheritance, n代表namespace, s所指的class都是我在这个Employee类中所使用的其他类。 而e我还不是很了解所代表的意思。

 

 

keep-as3-metadata所指代的应该是类的默认的metadata

 

Xml代码 复制代码

 

Xml代码 复制代码  收藏代码 swc内部构造探秘初步 - chqj_163 - chqj_163 的博客
  1. <keep-as3-metadata>  
  2.   <metadata name="Managed" />    
  3.   <metadata name="ChangeEvent" />    
  4.   <metadata name="Transient" />    
  5.   <metadata name="NonCommittingChangeEvent" />    
  6.   <metadata name="Bindable" />    
  7. </keep-as3-metadata>  
<keep-as3-metadata>   <metadata name="Managed" />    <metadata name="ChangeEvent" />    <metadata name="Transient" />    <metadata name="NonCommittingChangeEvent" />    <metadata name="Bindable" />  </keep-as3-metadata>

 

digiests标签显然代表这个swf文件的SHA-256检验值。

 

Xml代码 复制代码

 

Xml代码 复制代码  收藏代码 swc内部构造探秘初步 - chqj_163 - chqj_163 的博客
  1. <digests>  
  2.   <digest type="SHA-256" signed="false" value="319d1e313b334928de34eb5c655fecf3a035d989fb8855c9c5c77780cfb7c26b" />    
  3. </digests>  
<digests>   <digest type="SHA-256" signed="false" value="319d1e313b334928de34eb5c655fecf3a035d989fb8855c9c5c77780cfb7c26b" />  </digests> 

 

files标签标示了在SWC中的一些资源文件。

Xml代码 复制代码

 

Xml代码 复制代码  收藏代码 swc内部构造探秘初步 - chqj_163 - chqj_163 的博客
  1. <files>  
  2.   <file path="locale/en_US/collections.properties" mod="1225427279566" />    
  3. </files>  
<files>   <file path="locale/en_US/collections.properties" mod="1225427279566" />  </files>

 

 

附录:

这个Employee.as的内容

 

Java代码 复制代码  收藏代码 swc内部构造探秘初步 - chqj_163 - chqj_163 的博客
  1. package com.test   
  2. {   
  3.     import mx.collections.ArrayCollection;   
  4.        
  5.     public class Employee extends Base implements IEmployee   
  6.     {   
  7.         public function read():void{   
  8.             var col:ArrayCollection = new ArrayCollection();   
  9.             trace("read");   
  10.         }   
  11.            
  12.         public function Employee()   
  13.         {   
  14.             var dc:DynamicClass = new DynamicClass();   
  15.         }   
  16.   
  17.     }   
  18. }  
package com.test {  import mx.collections.ArrayCollection;    public class Employee extends Base implements IEmployee  {   public function read():void{    var col:ArrayCollection = new ArrayCollection();    trace("read");   }      public function Employee()   {    var dc:DynamicClass = new DynamicClass();   }   } }

  转载http://flyinglife.javaeye.com/blog/510571

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值