输出AIR 2.0 EXE文件(zt)

原文地址:
http://blog.everythingflex.com/2009/11/17/your-first-air-2-0-exe-file
在原文的基础上, 把AIR的配置也加上了.以Windows平台, Flash Builder beta 2为例.
首先下载AIR 2.0 SDK.
然后根据说明配置SDK:
1.复制现有的SDK文件夹到当前路径并重命名;

2.将下载的AIR 2.0 SDK解压, 并将里面的文件复制并覆盖到新SDK文件夹中.

3.打开Flash Builder,打开项目Properties对话框, 选择Flex Compiler
4.点击Configure Flex SDKs
5.添加刚刚合并的Flex 和 AIR 2 SDK文件夹
(也可打开Preferences窗口,Flash Builder->Installed Flex SDKs添加)

6.此时可以使用AIR 2 API了.
然后我们新建一个程序:

打开配置文件,版本已经变为2.0beta了:

程序代码:

之后发布AIR安装包, 安装运行, 界面如下:

接下来, 按照Rich Tretola的方法发布exe版:
运行(若提示找不到java, 可先配置环境变量):
adt -package -target native D:\Study\Adobe\Flash\10.1\Air2Test\Air2Test.exe D:\Study\Adobe\Flash\10.1\Air2Test\Air2Test.air
之后可以在项目文件夹下看到生成了Air2Test.exe程序.

运行:

还能输出dmg和rpm文件:
adt -package -target native D:\Study\Adobe\Flash\10.1\Air2Test\Air2Test.dmg D:\Study\Adobe\Flash\10.1\Air2Test\Air2Test.air
adt -package -target native D:\Study\Adobe\Flash\10.1\Air2Test\Air2Test.rpm D:\Study\Adobe\Flash\10.1\Air2Test\Air2Test.air
-target native只有三个选项:exe, dmg, rpm.
当然, Air2Test.exe的顺利安装仍然需要AIR运行时.
补充:
如果生成EXE文件, 那么一定要在WINDOWS操作系统下, 同理, 若为MAC生成安装文件, 则一定要在MAC操作系统下才可以

Flash Player 10.1 麦克录制测试

照着ADOBE的在线文档做了一个测试程序, 录制声音5秒再播放, 代码基本都是帮助文档中的.
许多人的愿望到今天终于实现了 :)
预览(需要flash player 10.1):
FirstApp
下载代码:
点击下载此文件
另外, 在jinni的文章中列出了很多AIR2的应用, 其中就包括录制并保存,还可以调用关联程序播放的例子:
http://blog.everythingflex.com/2009/11/17/air-2-0-sample-applications/

AIR 2.0 Beta and Flash Player 10.1 Prelease

详细如下:
http://swfever.com/?p=627

http://flash.9ria.com/thread-39581-1-1.html
http://blog.digitalbackcountry.com/2009/11/air-2-and-flash-player-10-1-betas-now-available/
http://www.senocular.com/?entry=785
http://blogs.adobe.com/air/2009/11/adobe_air_2_beta_now_available.html
http://www.insideria.com/2009/11/air-20-beta-now-available-on-a.html
http://www.gskinner.com/blog/archives/2009/11/flash_player_10.html
http://blogs.adobe.com/penguin.swf/2009/11/flash_player_101_beta.html
他们的速度真快, 我只赶上个消息尾巴~~
Flash Player 10.1 Beta 下载
AIR 2.0 Beta 下载

RSA Encryption for Flex 4 RSLs

原文地址:
http://www.gridlinked.info/how-to-encrypt-flex-rsls/
这里截取并尝试翻译了一段FLEX程序初始化及此解密过程.
应用启动过程:
1. 首先, 为第1帧加载足够的数据.
2. Flash Player通过创建SystemManager实例执行加载数据.
3. SystemManager命令Flash Player停止在第一帧.
4. SystemManager创建Preloader,
通过它创建DownloadProgressBar控件并显示在客户界面上.
5. Preloader开始从FLEX SWF(或外部SWF)加载其余数据.
一旦FLEX框架及程序代码数据加载, System Manager跳到第2帧并初始化Application实例.
1) 所有的RSL及相关类现在已加载[到ApplicationDomain];
注意加载的顺序就是app编译时定义的顺序.
2) 所有应用程序使用的类定义(视图, 逻辑等)先加载到第2帧.
注意这里, 在第一帧的preloader代码甚至可以在FLEX框架类加载前, 安装补丁到其中.
3) 这种技术就被叫做”monkey-patching”, 会被用在后面提到的解密过程中.
6. 一旦Application实例创建, SystemManager设置
Application.systemManager指向自己,
之后你就可以访问SystemManager了.
7. Application在初始化处理开始前派发预初始化(preinitialize)事件.
8. Application继续创建内部实例.
application调用createChilden()方法.
这时每个应用的组件被构造并调用自己的createChilden()方法.
具体情况参考组件生命周期章节.
9. Application派发初始化(initialize)事件,
指明所有的组件已被初始化.当然, 此时所有的组件尚未布局.
10.最后,所有的子控件及容器被创建并设置大小及位置后,
Application就会派发creationComplete事件.
11.creationComplete事件派发后,
Preloader移除DownloadProgressBar 控件,
SystemManager将Application实例加到Flash Player的
显示列表中(Flash Player display list基本上是个树结构,
包含着可视及潜在可视对象,构成整个应用.
当向应用中添加或移除组件时,
基本上就是将它们从显示列表(display list)中添加或移除掉).
12.Application一旦添加到Flash Player显示列表中,
Application派发applicationComplete事件.
13.Application此时已被创建好并显示到屏幕上准备与用户交互了.
这种RSL的解密过程如下:
1.Flash Player加载已加密的RSL/SWF并同时派发RSLError事件;
这会停止预加载过程使程序”挂起”.
2.中断掉这个事件防止由于冒泡机制被其他监听器捕获;
这能有效的阻止加载序列中的其他RSL.
3.使用Nitro-LM,异步请求RSA解密密钥.
4.重新加载加密的RSL(清除已加载的SWF字节码).
5.解密数据.
6.将已经解密的数据加载到AVM中.
7.通知Preloade恢复加载其他等待的RSL.
很巧妙的一个方法 :)

Flash位图的处理限制

读了后, 做了一下测试.的确存在这样的问题.
文档(FlashPlayer10)中指出BitmapData的高或宽不能超过8191个像素, 总像素数不能超过16777215.
这里估计也是Flash的位图处理限制.即使是在Flash CS4这样的可视化的IDE中, 同样存在这个现象:
找来一张3200×1666的图片(尽量选择大尺寸图片便于测试极限情况).
将其宽度缩小至50, 在舞台中从最左拖至最右(舞台范围尽量调大),
X轴上总会有一个位置M,当图片经过M时, 图片内容会发生变化,
出现重复图像(导入的图片被打散[Ctrl+B操作])或出现纯色以及拉丝等现象.
而且在编辑状态,这个位置M和Flash舞台(0,0)位置无关,而是与编辑区的左上顶点有关.
可以这么理解, 编辑区其实是一个实时编译的”SWF”.
这点和Flex Builder有些相似, 有时我们会发现在进入CSS的预览面板时,
能够看到熟悉的FLEX程序加载进度条.
进一步测试可以发现这个M与图像高度无关(下图中第二组图片经过外面剪切后重新导入Flash中):

但是与图像原始宽度及缩放比例有密切关系:

放大2000倍的舞台:

在Y轴上,同样存在对应着图片的”极限”位置N:

这个点怎么确定呢? 不知道. 这里通过对点位置有影响的几个属性值做了简单推算, 以宽度计算为例, 图片原始宽度ow, 当前宽度w, 假设存在某个常量C,
那么公式可能是C=M*(ow/w), 这个C大概在35000~36000, 而对于高度测试中大概在18000左右浮动.
上面文章中指出2562宽度的图片,实际宽度为50,坐标不超过640, 按C=M*(ow/w)可以算出数值为(640+50)*(2562/50) = 35355.6
当然,真正的过程不得而知,也许和内存占用,位图渲染处理有关.这种计算结果不可能是一个”范围”, 上面的推算仅供参考,博君一笑.
希望有知道原理的兄弟指点一下 :)
扩展阅读:
Flash Player Bitmap Limits
Flash Player Bitmap Limits Again
BitmapData