博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[AS3]使用RSL进行AS瘦身编程
阅读量:4079 次
发布时间:2019-05-25

本文共 2338 字,大约阅读时间需要 7 分钟。

ApplicationDomain

SWF 文件中的所有代码被定义为存在于应用程序域中。 主应用程序就在当前的应用程序域中运行。

系统域中包含所有应用程序域(包括当前域),这意味着它包含所有 Flash Player 类。

除系统域以外,每个应用程序域都有一个关联的父域。 主应用程序的应用程序域的父域是系统域。 已加载的类仅在其父级中没有相关定义时才进行定义。 不能用较新的定义覆盖已加载的类定义。

2009090414382929.jpg2009090414381857.jpg2009090414382418.jpg

[AS3]使用RSL进行AS瘦身编程

RSL是什么??RSL是 Runtime Shared Library的简称。我个人的理解时是在swf编译的时候,不把在该swf中使用的一些类库编译进swf中去,而是在该swf运行的时候动态加载,该swf是要使用的类库,从而达到减小swf体积的目的。
做as编程的人都知道,如果每个swf都引用了同一个类的话,那么你编译每个swf的时候,都会把那个类编译进去,也是就是说,无形中对整个应用而言,就多了几份类库而增大了内容
例如你有 a.swf,b.swf,c.swf,同时引用了sodaTest.as这个类,传统的做法是每个swf都把sodaTest编译进去。而使用RSL技术的话,则把sodaTest.as这个类编译进一个特殊的swf进去(lib.swf,该swf包含sodaTest),在a,b,c运行的时候,把lib.swf这个swf加载进去就可以了。三个swf共享一个,从而减小了体积
下面,看具体的设置步骤吧(下面提供的方法只是多种方法的其中之一:),使用工具是FlexBuilder,以asiwng代码库为例子
首先我们需要制作一个被多个swf需要加载swf代码库
1.把需要的代码打包进一个swf里去,该步骤前需要一个你需要打包进代码库的swc
(可以在FB中建立一个Flex Library Project,利用把你需要的代码生成swc)
新建个Flex Library Project为Aswing
2.新建一个AswingDll的ActionScript Project项目
新建个AswingDll
3.接着在AswingDll项目属性中,增加命令,在ActionScprit Compiler 增加下面的命令
-include-libraries 
E:\workspace\FlexProject\Aswing\bin
其中E:\workspace\FlexProject\Aswing\bin是你需要做加载的代码库的swc的目录位置
(我这里是用我自己设置的目录去生成,而不是在flex中刚建立的)
4.接着编译就行了.....看生成AswingDll,用破解软件看看,是不是多了你需要的代码了:),大小有400多K,包括了awing的代码了
5.接着新建一个AswingTest的ActionScript Project项目,用来使用这个AswingDll
在AswingTest这个项目属性还需要做一些设置的,在Library Path中,添加aswing代码库或者aswing的swc
看图片中蓝色的部分,双击它,弹出下面的界面,选择Exteral这个选项,再确定就可以了
做完这些步骤后,就可以去编译自己的程序啦
具体的我就先不写了,可以参考www.flashdll.org,里面有详细的例子
(明天我再出一个使用例子)
有什么问题,就到www.actionscript3.cn提问吧
呵呵
之前的代码修改了一下
 程序代码
package 
{
    import flash.display.Sprite;
    import flash.display.Loader;    
    import flash.events.Event;
    import flash.system.LoaderContext;
    import flash.net.URLRequest;
    import flash.system.ApplicationDomain;
    import flash.utils.getDefinitionByName;
    import org.aswing.AsWingManager;
    import org.aswing.JFrame;
    
    [SWF (width=800, height=600)]
    
    public class Main extends Sprite 
    {
        private var loader:Loader;
        public function Main() 
        {
            loader = new Loader();
            loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoader);
            loader.load(new URLRequest("dll/AsWingDLL_1_3_0.swf"), 
                    new LoaderContext(false, ApplicationDomain.currentDomain));
        }
        
        private function onLoader(event:Event):void
        {
            AsWingManager.initAsStandard(this);
            var frame:JFrame = new JFrame(this,"测试反射");
            frame.setSizeWH(400,300);
            frame.show();
        }
    }
}
效果图
22008424233123.jpg
很明显,可以看到体积非常小,
2009090414380737.jpg
2009090414381325.jpg

posted on 2009-09-04 14:36 阅读(...) 评论(...)

转载地址:http://iopni.baihongyu.com/

你可能感兴趣的文章
MongoDB 数据文件备份与恢复
查看>>
MongoDB数据库插入、更新和删除操作详解
查看>>
MongoDB文档(Document)全局唯一ID的设计思路
查看>>
mongoDB简介
查看>>
Redis持久化存储(AOF与RDB两种模式)
查看>>
memcached工作原理与优化建议
查看>>
Redis与Memcached的区别
查看>>
程序员最核心的竞争力是什么?
查看>>
linux CPU个数查看
查看>>
消息队列设计精要
查看>>
分布式存储系统设计(1)—— 系统架构
查看>>
MySQL数据库的高可用方案总结
查看>>
SSH原理与运用
查看>>
SIGN UP BEC2
查看>>
出现( linker command failed with exit code 1)错误总结
查看>>
iOS开发中一些常见的并行处理
查看>>
iOS获取手机的Mac地址
查看>>
ios7.1发布企业证书测试包的问题
查看>>
iOS 开发百问
查看>>
Mac环境下svn的使用
查看>>