ANE 跨平台 as3 转 object-c android desktop

引用: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项目的打包和部署。

posted @ 2012-08-17 17:40  镇水古月  阅读(488)  评论(0编辑  收藏  举报