转载:http://sswilliam.blog.163.com/blog/static/189696383201191094227313/
简介
AIR3刚刚发布,带来的最令人激动的新特性莫过于Native Extension了。Native Extension就是让AIR可以调用各个平台上的本地代码(native code, 如ios上的object-c,android上的java,desktop上的c++,c#等),从而完成对AIR中Actionscript API的自定义扩展。即可以让开发者通过编写基于平台的本地代码扩展ActionScript。从而完成一些原有Actionscript无法完成的功能。
众所周知,AIR是Flash平台的一个重要组成部分。其优势在于显示和渲染,开发者可以使用ActionScript或者Flex快速高效的开发出有良好用户体验的RIA应用。但是对于一些高性能的运算和对特定硬件设备的调用,AIR由于自身的限制而无法实现。
在AIR 2中引入的NativeProcess的概念,从而让AIR可以再桌面平台可以启动一个本地进程以协助AIR实现更多功能,AIR程序和NativeProcess的进程之间使用标准输入输出流(stdin,stdout,stderr)进行通信。这里需要说明一点,NativeProcess在windows上只能启动exe,在mac上只能启动dmg。其他任何格式的文件都无法启动。官方文档里的范例启动了一个.py文件,经过实验是无法运行的,只能是启动python里的python.exe,然后参数跟上相应的.py文件的路径,才能正确的执行python脚本。NativeProcess大大扩展了AIR在桌面上的应用开发能力。
从AIR 2.6开始,AIR开始支持移动平台,包括Android和iOS。在移动设备上,由于设备和操作系统的种种限制,NativeProcess就无法工作了。由于移动设备的CPU普遍比桌面的CPU主频要低很多,因此对程序的性能要求更高。同时不同的移动设备的硬件设施各不相同(如陀螺仪,前后摄像头,GPS等),AIR也无法完整及时的提供所有硬件设备的API,因此,为了让AIR能更好的适应移动平台的开发,急需要一种让AIR在移动设备上执行本地代码的解决方案。从而NativeExtension应运而生。
最初引入Native Extension的版本是AIR 2.5 for TV。引入的目的主要是由于TV有很多特性不可能被AIR原生API所支持,如操纵电视频道。因此adobe在AIR 2.5 for TV中加入了NativeExtension这个特性,让AIR在TV上可以执行TV的本地代码从而更好的适应TV的开发。
随着AIR在越来越多的平台上被支持,NativeExtension所带来的优势越来越明显,所以Adobe在AIR3中将这个特性扩展到了所有的平台上。注意,是所有平台而不仅仅是移动平台,在桌面上也是可以使用NativeExtension的。
NativeExtension与NativeProcess的主要区别在于,NativeProcess是新开一个进程完成相应的工作,而NativeExtension是AIR直接执行相应的本地代码,然后将结果返回给AIR。所有工作都在AIR本进程中完成。NativeExtension是让开发者自己扩展ActionScript的API,在ActionScript与底层代码之间建立了一个桥接,让开发基于系统的底层代码来扩展ActionScript。
Alchemy也是flash平台扩展的一大利器,NativeExtension与Alchemy的主要区别在于, Alchemy是将C/C++代码编译为AVM可以执行的字节码,并生成一个相应的swc文件从而完成对Flash 平台的扩展,由于是编译为AVM可执行的字节码,因此Alchemy适用于Flash Player和AIR。NativeExtension是将本地代码打包进ane文件,并且提供了从Actionscript到本地代码的桥接,真正执行本地代码的还是操作系统本身而非AVM。而且NativeExtension只适用于AIR而不适用于Flash Player。
简单的来说,AIR NativeExtension就是一个带有本地代码实现的SWC库文件。
本文首先介绍NativeExtension的结构和实现原理,然后以最简单的Hello World为例,介绍如何进行NativeExtension的开发,最后介绍如何使用AIR3的SDK进行NativeExtension项目的打包和部署。