当前位置: BOLT界面引擎 > 知识库文章 > XAR资源包使用指南

XAR资源包使用指南

作者:李亚星 2013-02-21

XAR的资源包为对应的XAR提供各种资源,每个XAR都有一个主资源包,资源包支持继承,一个XAR可以有多个资源包,这些资源包可以动态切换成主资源包;XAR可以动态添加资源包,以外挂资源包的形式,方便扩展。

 

一、  XAR的主资源包

一般来说,一个XAR都有一个对应的主资源包,而且最多同时存在一个主资源包;也可以没有任何资源包,如果XAR本身不需要依赖额外的资源

 

XAR包的配置在xarpackage.cfg文件里面,定义如下:

<mainres package="boltres"/>

 

那么boltres便是当前的XAR的主资源包,这样XAR在加载完毕之后,会自动加载该资源包,并且优先使用该资源包里面定义的资源

 

    主资源包和需要动态切换的资源包,都应该在XAR对应的res目录下面

   

二、  多资源包和动态切换

一个XAR可以同时存在多个资源包,并且可以动态切换

    如果存在多个XAR资源包的话,这些资源包需要并列的存放在对应的res目录下面,如下:

   

如上图所示,该XAR定义了三个资源包,名字分别是boltres,boltres1,boltres2,其中boltres是主资源包(在XAR的package.cfg里面指定的),而boltres1和boltres2是备用资源包,这三个资源包可以有继承关系,也可以没有任何关系,XAR在使用过程中,可以动态切换到某个资源包

(需要注意的是,资源包文件夹的名字就是该资源包的名字)

 

动态切换资源包,是调用XAR的SelectResPackage方法来实现的,比如想切换到boltres2资源包,那么只需要调用SelectResPackage(“boltres2”)即可,资源包切换成功后,界面会自动更新

 

三、  外挂资源包

XAR有两种模式,一种是UNION模式,也就是整个XAR都打包成一个目录,包括了layout和res目录;还有一种是PART模式,也就是layout和res下面的资源包分别打包

 

如果程序在运行过程中,需要动态切换一个资源包,而这个资源包之前并不存在,那么可以:

1.   对于PART模式,那么直接把这个资源包添加到对应的res目录下面就可以,正如上面我们所述的那样,只要保证名字不重合即可;如果该模式下的资源目录不可写(考虑UAC权限等因素),那么参考下面一条

2.   对于UNION模式,由于XAR在加载后中不可动态修改;在加载之前动态修改并且再打包的成本也太大,所以需要使用外挂资源包策略

 

外挂资源包,也就是动态的向XAR添加一个资源包,该资源包的路径可以是随意的,比如存在一个下载目录或者临时目录等,只要调用XAR的AddResPackage即可:

 

接口如下

bool AddResPackage(string packageName, string packageFile)

l  packageName就是资源包的名字这个可以使用xarSelectResPackage来加载

l  packageFile是外部资源包的完整路径支持zip和文件夹两种形式

 

需要注意的是如果指定名字的资源包已经在xar内置资源包里面存在那么SelectResPackage会优先使用内置资源包

 

外挂资源包一旦添加成功后就可以像内置资源包一样使用了直接调用SelectResPackage(packageName)就可以切换到该资源包;外挂资源包也可以继承内置资源包且内置资源包也可以继承外挂资源包

 

四、  资源包继承

资源包支持继承,一个资源包可以指定另一个资源包为自己的父资源包,配置方法如下:

在资源包的resource.cfg文件里面,根节点增加fathername属性,如下所示:

 

比如boltres资源包的配置里面,定义了

<xlue name="default" author="xxx" copyright="xxx" fathername=boltres1></xlue>

那么便指定了boltres1boltres的父资源包,当一个资源在boltres里面查找不到的时候,会继续往boltres1资源包里面查询,如此逐级向上,直到没有父资源包为止

 

父资源包必须是该XAR的几个内置资源包之一,或者动态添加的外挂资源包,不可以引用其它XAR里面定义的资源包

 

使用父资源包,有如下注意事项:

l  资源包不可以自我引用,也就是自己又是自己的父资源包,也不可引用和自己同名的资源包做为父资源包

l  资源包不可以循环引用,这个需要使用者自己保证

l  资源包不可跨XAR引用,也就是不能引用其它XAR里面定义的资源包

l  资源包必须是单继承的,也就是最多只能继承一个资源包,但是可以多层继承

l  加载一个资源包,那么该资源包的直接、间接父资源包也会被同时加载,这点需要考虑到,避免带来不必要的开销

 

五、  多资源包/外挂资源包/资源包继承的使用场合

 

一般来说,大部分的简单XAR都只有一个主XAR,便可满足需求,那么什么时候使用复杂的资源包策略呢?

 

l  多资源包

多资源包主要用来支持资源层面的换肤:换肤需求里面有一个策略,就是传统的更改界面素材,包括图片,纹理,颜色等,这种情况下就需要配置多个并列的资源包,并且在换肤时候进行切换

   

    另外还可以用以资源的按需加载,比如一个庞大的XAR,里面依赖的资源非常多,但是界面某一个时刻只显示一小部分内容,那么就可以把该XAR的资源包精确的分割成多个,并在适当的时机进行切换,减少内存占用,加快XAR的加载速度等

 

l  资源包继承

如果多个资源包里面有相同的内容,并不跟随资源包切换而改变,那么可以把这部分抽出来,放到一个单独的资源包Base里面,其它资源包继承Base资源包即可,减少资源包的体积,避免代码重复等问题

   

    也可以在形式上分割资源包,每层资源包定义一部分内容,比如有一部分会经常改变,而一部分很少改动,那么可以在形式上分割,每部分给予不同的权限控制等

 

l  外挂资源包

这个是在换肤中,用以动态加载一个资源包,该资源包可能是用户自己构造的,也可能是从网络上下载的,那么就可以用外挂资源包的形式来加载

迅雷公司 版权所有 Copyright 2003-2010 Thunder Inc.All Rights Reserved. 意见反馈:xl7doc@xunlei.com