在OATOS开发中,有些模块用Adobe AIR实现,但有些功能仅仅依靠AIR还不能实现,比如:激活和前置浏览器,系统截屏,开启系统服务等等。这个时候我们需要调用本地程序来帮忙实现这些功能,那么必然就会涉及Adobe AIR与本地程序通讯问题:AIR怎么通知本地程序开始工作,要做什么事?做完后,本地程序怎么告诉AIR,并把AIR需要的数据发送过去。以下列举几种我们在OATOS开发过程中使用的方法供大家参考。
方法一:ExternalInterface
记得很早前接触的C与FLASH 之间的通讯就是通过它(注:它的很多例子都是与JS通讯),具体就不细说了,网上资料很多。
方法二:XMLSocket
利用socket机制与本地程序通讯,由于它们之间通过字符串来传递消息,需要自己定义一套消息格式来收发。另外AS底层机制是以零字节来判断是否消息接收完毕,所以本地程序端发送消息要以零字节来结尾。
方法三:NativeProcess
在AIR2时代,Adobe推出了这个:用外部进程的标准流实现交互。基本原理是:AIR另外启动一个本地进程,来执行任务,在此期间AIR进程监听本地进程的标准输入和输出 流以及进程的标准错误流。
这个具体实现网上也有例子。(注:在实际应用过程中,当启动另外一个进程,很容易被杀毒软件当作木马。)
方法四:ANE(AIR Native extensions )
AIR3来了,本地扩展是很让人振奋的一个突破。最初这是为 TV 设备设计的,后来过渡在手机上,PC上。如今已经很强悍了,网上讨论的比较多的是和移动设备通讯(android,ios)。现在来说说在Windows上的如何应用。
1.需要C,C++编译环境
我是在flash builder4.6上直接装了CDT插件,然后装了MinGW环境( 当然也可以装cygwin,具体的可以参考网上资料),配置环境变量
2.链接Flash Runtime到C或者C++工程
新建一个C/C++工程 选择Shared Library
导入FlashRuntimeExtensions.h 路径是Adobe Flash Builder 4.6\sdks\4.6.0\include\FlashRuntimeExtensions.h。
具体:导入–General–文件系统然后浏览此路径
在flash builder sdks里面找到FlashRuntimeExtensions.lib 路径是Adobe Flash Builder 4.6\sdks\4.6.0\lib\win\FlashRuntimeExtensions.lib
然后在c/c++ build– settings –mingw c linker–miscellaneous里 添加这个路径
3.编程
这里要注意的是,编写的源程序编码格式为ANSI,否则会显示中文乱码
4.生成ANE
这个过程与其它平台的差不多,这里就不细说了。(注:平台是Windows-x86)
5.创建AIR程序
Flex 构建路径–本机扩展 选择生成的ANE
Flex构建打包–本机扩展 右边的勾打上
现在可以运行和测试你的程序了
方法五.Alchemy
可以把C/C++代码转化成AVM2可以执行的字节码,这是个很有意思的功能,08年就出来了,目前还在不断完善中。目前大多数应用都是拿来做项目优化的,提高效率用的。
我觉得可以用来实现调用本地的一些功能,当然这肯定会有很多限制,这是出于安全方面的考虑。具体可以调用哪些,以后可以进行尝试。