实验:关于桌面部署AIR应用的一些探讨
现在使用Adobe AIR技术开发应用的朋友越来越多了,不知大家是否想过这个问题,就是如何部署和安装你的应用?我们来简单分析一下Adobe为我们提供的两种方式:
- WEB部署安装的机制(即AIR Install Badge):在网络普及率很高的情况下这样的方式是很好的,在部署(包括跨平台)和版本控制上都很方便,但是假如用户没有联网条件,就不可行。
- 桌面分发:即通过把你的AIR安装包(.air文件)发给用户安装,但如果用户没有安装AIR的运行时,就无法安装,当然你可以再发给用户一个AIR运行时的安装包,写个说明让用户先安装AIR运行时,再安装你的应用,问题是这种繁琐的操作是极其破坏用户体验的。
那么引入今日的问题,即:
如果是情况2,是否可以将运行时和应用整合到一个安装包?
至少要让用户点击一个安装文件就可以完成整个的安装过程。仔细分析之后,原理上应该是可行的,原因如下:
- 可以通过Adobe提供的API判断用户是否安装了运行时
- 可以通过EXEC来启动AIR运行时的安装
这样的话,我们就可以使用Flash创作一个EXE文件,来执行上述两个步骤的操作,当然这样的缺点就是牺牲了跨平台的特性,如果你的用户在Mac系统上,就要考虑Mac系统上如何实现。
实现方案
首先下载这个SWF文件(http://airdownload.adobe.com/air/browserapi/air.swf),这是Adobe提供的AIR API的接口,我们需要使用它来判断AIR运行时是否安装。
建立一个FLA文档,命名为“Setup.fla”。将air.swf保存到和这个FLA同级的目录下,并在这个目录下创建一个名为“fscommand”的目录,注意这是因为如果你使用EXEC的话,只能调取这个目录中的内容
到Adobe网站下载最新的AIR运行时安装包(AdobeAIRInstaller.exe),保存到“fscommand”目录中。将你的AIR应用安装包(比如Train.air),也放到这个目录中。
同样在“fscommand”目录中,建立一个“openApp.bat”的文件,写入你的AIR文件名,比如:Train.air。稍后给大家解释为什么要这样做。
目录截图
打开Setup.fla,在舞台上创建一个名为“info”的动态文本。打开动作面板,输入下面的代码(当然也可以使用文档类):
try { } catch (e:*) { showInfo(e.toString()); } airSWF=airSWFLoader.content; switch(airSWF.getStatus()) { case "available": showInfo("需要先安装AIR,请不要关闭窗口"); fscommand("exec","AdobeAIRInstaller.exe"); break; case "unavailable": showInfo("运行时无法安装在此计算机上"); break; case "installed": showInfo("请在应用安装完毕后关闭窗口"); fscommand("exec","1.bat"); //airSWF.installApplication(appURL,airVersion); fscommand("quit","true"); break; } } if(airSWF.getStatus() == "installed") { showInfo("请在应用安装完毕后关闭窗口"); fscommand("exec","1.bat"); //airSWF.installApplication(appURL,airVersion,null); fscommand("quit","true"); } } info.text = txt; }
代码比较简单,大家可以看到所做的操作就是载入包含AIR API的SWF文件,然后调用getStatus()方法判断AIR运行时的安装情况,再根据安装情况做相应的处理。
- 如果没有安装运行时,则调取安装文件进行安装
- 如果不支持安装运行时,则终止一切操作
- 如果已安装运行时,则调用批处理文件安装你的AIR应用
大家可以看到,因为额外调用了一个批处理文件,造成弹出多余的界面,其实并不友好,但之所以这样做是因为API中包含的方法无法支持调取本地AIR文件的安装,大家可以看到我注释掉的一句://airSWF.installApplication(appURL,airVersion);这个方法只支持网络全路径的AIR文件安装,而如果是本地则会报错,大家可以测试一下,或许这是API不够完善的地方。
最后修改发布设置,发布出EXE文件,就可以测试运行了。
这种方式的缺陷也有很多,并没有做到完全的集成安装,而且还有命令窗口弹出,如果大家有更好的方式,欢迎指正与讨论。

.gif)
.gif)




.gif)
更好的解决方案
实际上Adobe已经准备好了解决方案,步骤如下:
1.到Adobe AIR的下载页面,有个“分发...“的链接,点过去,出现分发的用户协议
2.签署协议,提交分发AIR运行时的申请,Adobe会在3个工作日之内回复
3.申请通过,Adobe会发送给你集成AIR安装文件的下载链接
4.按照说明,将你的应用和AIR安装包绑定在一起,即可实现硬盘上的无缝安装
牛
看到了,很牛,我也注册了,谢谢了!
发表新评论