转载:http://sswilliam.blog.163.com/blog/static/189696383201191094227313/


简介

AIR3刚刚发布,带来的最令人激动的新特性莫过于Native Extension了。Native Extension就是让AIR可以调用各个平台上的本地代码(native code,ios上的object-candroid上的javadesktop上的c++c#),从而完成对AIRActionscript API的自定义扩展。即可以让开发者通过编写基于平台的本地代码扩展ActionScript。从而完成一些原有Actionscript无法完成的功能。

众所周知,AIRFlash平台的一个重要组成部分。其优势在于显示和渲染,开发者可以使用ActionScript或者Flex快速高效的开发出有良好用户体验的RIA应用。但是对于一些高性能的运算和对特定硬件设备的调用,AIR由于自身的限制而无法实现。

AIR 2中引入的NativeProcess的概念,从而让AIR可以再桌面平台可以启动一个本地进程以协助AIR实现更多功能,AIR程序和NativeProcess的进程之间使用标准输入输出流(stdin,stdout,stderr)进行通信。这里需要说明一点,NativeProcesswindows上只能启动exe,在mac上只能启动dmg。其他任何格式的文件都无法启动。官方文档里的范例启动了一个.py文件,经过实验是无法运行的,只能是启动python里的python.exe,然后参数跟上相应的.py文件的路径,才能正确的执行python脚本。NativeProcess大大扩展了AIR在桌面上的应用开发能力。

AIR 2.6开始,AIR开始支持移动平台,包括AndroidiOS。在移动设备上,由于设备和操作系统的种种限制,NativeProcess就无法工作了。由于移动设备的CPU普遍比桌面的CPU主频要低很多,因此对程序的性能要求更高。同时不同的移动设备的硬件设施各不相同(如陀螺仪,前后摄像头,GPS)AIR也无法完整及时的提供所有硬件设备的API,因此,为了让AIR能更好的适应移动平台的开发,急需要一种让AIR在移动设备上执行本地代码的解决方案。从而NativeExtension应运而生。

最初引入Native Extension的版本是AIR 2.5 for TV。引入的目的主要是由于TV有很多特性不可能被AIR原生API所支持,如操纵电视频道。因此adobeAIR 2.5 for TV中加入了NativeExtension这个特性,让AIRTV上可以执行TV的本地代码从而更好的适应TV的开发。

随着AIR在越来越多的平台上被支持,NativeExtension所带来的优势越来越明显,所以AdobeAIR3中将这个特性扩展到了所有的平台上。注意,是所有平台而不仅仅是移动平台,在桌面上也是可以使用NativeExtension的。

NativeExtension VS NativeProcess

NativeExtensionNativeProcess的主要区别在于,NativeProcess是新开一个进程完成相应的工作,而NativeExtensionAIR直接执行相应的本地代码,然后将结果返回给AIR。所有工作都在AIR本进程中完成。NativeExtension是让开发者自己扩展ActionScriptAPI,在ActionScript与底层代码之间建立了一个桥接,让开发基于系统的底层代码来扩展ActionScript

NativeExtension VS Alchemy

Alchemy也是flash平台扩展的一大利器,NativeExtensionAlchemy的主要区别在于,Alchemy是将C/C++代码编译为AVM可以执行的字节码,并生成一个相应的swc文件从而完成对Flash平台的扩展,由于是编译为AVM可执行的字节码,因此Alchemy适用于Flash PlayerAIRNativeExtension是将本地代码打包进ane文件,并且提供了从Actionscript到本地代码的桥接,真正执行本地代码的还是操作系统本身而非AVM。而且NativeExtension只适用于AIR而不适用于Flash Player

简单的来说,AIR NativeExtension就是一个带有本地代码实现的SWC库文件。

组织结构

本文首先介绍NativeExtension的结构和实现原理,然后以最简单的Hello World为例,介绍如何进行NativeExtension的开发,最后介绍如何使用AIR3SDK进行NativeExtension项目的打包和部署。

更多相关文章

  1. Android获得所有存储设备位置最佳方式
  2. android输入子设备类型
  3. 【Android Developers Training】 10. 序言:支持不同设备
  4. Berkeley DB 5.2 Android平台编译过程介绍
  5. 基于windows平台的Android原生(Native)C开发环境搭建
  6. Android系统移植与调试之------->如何修改Android设备添加重启、
  7. 获取Android设备的唯一识别码|设备号|序号|UUID
  8. 在android中利用多线程实现对控件的更新(动态修改文本框中的值)。

随机推荐

  1. 如何为$ wpdb-> insert创建一个包含colum
  2. 为什么cron工作不是从浏览器工作,但从终端
  3. php连接mysql的三种方法
  4. 如何递归将特色图像应用于Wordpress中的
  5. 将Ajax div内容存储在PHP变量中
  6. json_encode在数组上返回null
  7. 如何在发送之前更改SOAP请求中的名称空间
  8. 如何测试返回的json结果?
  9. 【php】php开发的前期准备
  10. PHP连接mysql模板