自从2008年发布了第一个版本,Adobe AIR已经走过了很长的一段路。在此期间,我们为AIR增加了几十个较大的特性,上百个较小的特性,性能优化和错误修复,并且我们支持3个额外的平台:iOS (iPhone和iPad),Android, 和Adobe AIR for TV.
AIR 3将是我们在不到两年半的时间里的第11个发行版本。虽然我们每次的发行版都代表了很大的进步,但我个人觉得这次是非比寻常的。AIR 3包括以下新的API和特性:
Stage3D(桌面特性)。Stage3D是一个底层的,具备硬件加速的二维和三维渲染的API。对于AIR 3,目前这些API只能在AIR的桌面版本中使用,然而,未来这些特性也将进入移动设备。Stage3D是一个非常重要的特性,它的意义之大让我们感到言语都难以描述,您可以从这里得到更加详细的信息, 请参阅Stage 3D页面。
本地扩展 (所有平台)。这又是一个重要的特性。从AIR 3的版本开始,开发者可以通过绑定本地扩展和应用程序,来增强AIR运行时的功能,然后他们就可以在ActionScript中调用那些扩展(这个特性原先只在Adobe AIR 2.5 for TV中存在,但是基于AIR 3,这个特性在所有的平台可用)。您可以认为Adobe AIR本地扩展(简称ANEs)就是ActionScript库(SWCs),只不过是包含了本机代码实现。ANEs的适用场合,包括让您的应用程序访问AIR所不支持的原生API(见下面的例子),并授权在某些情况下访问本机代码,以达到更好的性能。关于更多AIR 3本地扩展的信息,请参阅奥利弗.高盛的这篇文章:扩展Adobe AIR。
Android Market的授权集成 (显然只支持Android)。使用ANE文件,开发人员可以访问Android Market的授权服务,让发布者执行许可政策。这是一个能体现ANE强大特性的很好的例子:因为这个特性(授权服务)在iOS中是不可用的,所以我们不会把它作为AIR的直接支持的功能;但是,ANE可以保证我们运行于Android设备的AIR应用可以很轻松的访问这些API。
运行时捆绑 (Android和桌面)。在之前的版本中,需要您的最终用户在安装您的应用之前,已经安装了AIR的运行时(如果没有,则必须先安装AIR运行时),如果您想改变这个过程(让您的应用程序安装过程和其它本地安装的应用程序没有区别),或者您是想控制您的应用程序运行所需的AIR版本,AIR 3允许您捆绑AIR运行时和您的应用程序。捆绑运行时非常容易,当您构建一个Android应用时可以设置apk-captive-runtime变量,如果是构建桌面应用,则可以设置bundle变量。(注意在iOS上AIR一直使用一个捆绑的运行时,虽然其机制不太相同。)
背景音频播放 (对于iOS是新特性;在Android上之前就被支持了)。由于iOS独特的多任务模式,在之前如果我们想在AIR应用处于非活动状态的时候继续播放音频,是不可能的。在AIR 3中,您所需要做的只是修改您的应用程序描述文件,声明您需要播放背景音乐,然后它会自动工作。(基本上,当应用程序被放置到后台程序中,它将继续运行。但是,所有的屏幕更新将被禁用,以保持电池寿命,并符合iOS的多任务要求。)
在iPad对CameraRoll的支持。虽然CameraRoll在技术上已经被iPad支持,但是我们在AIR 3中增加了很多更好的支持。在iPad上,图片选择器不再占用整个屏幕,在iPhone和iPod touch上也是如此。相反,它会在调用它的UI组件的相对位置上,出现一个浮动的面板。使用额外的CameraRollBrowseOptions类,开发人员可以选择图像选择器的大小和位置,并指定调用它的UI组件的位置。欲了解更多信息和代码示例,请参阅我的博客文章, 如何正确使用iPad上的CameraRoll API 。
视频硬件加速 (移动设备):AIR 2.5通过StageVideo为TV带来了视频硬件加速;现在AIR 3则为移动设备也提供了StageVideo。
本机文本字段(移动设备) 。之前版本的AIR提供给开发者访问底层渲染的能力,比如StageVideo (视频硬件加速)和StageWebView (本地的HTML渲染)。AIR 3提供了StageText的API,它允许开发人员将系统原生的文本字段放置在移动应用程序中。虽然您仍然可以使用Flash文本字段,但是StageText文本字段可以使用所有操作系统底层支持的特性,比如放大镜,文本选择,自动更正等等。
前置摄像头支持 (iOS和Android)。现在ActionScript的摄像头API可以访问iOS和Android设备的前置摄像头和后置摄像头(如果是Android设备,至少需要2.3的版本)。您可以使用新的Camera.position属性以及新CameraPosition类中的常量(背部,正面,和UNKNOWN)来确定摄像机的位置。欲了解更多信息和代码示例,请参阅我的博客文章, AIR 3前置摄像头支持 。
移动设备的加密本地存储(带来了台式机和移动设备之间的等价实现)。EncryptedLocalStore的API曾经只在桌面上可用,现在则进入了iOS和Android。这个API用于安全地存储用户凭据,加密密钥,私密信息,和类似的重要信息。
设备扬声器控制 (移动设备)。使用新的SoundMixer audioPlaybackMode属性,和新的AudioPlaybackMode类中的常量(媒体和语音),开发人员可以控制是否是通过电话的听筒或扬声器播放音频。
原生JSON支持 (移动和台式机)。原先只能使用ActionScript来解析JSON,现在则是由运行时提供更有效的原生JSON支持。相对于ActionScript实现,原生的JSON API的速度更快,使用更少的内存。欲了解更多信息和代码示例,请参阅我的博客文章, AIR 3中的原生JSON支持 。
套接字(Socket)改进(移动和桌面)。曾经我们认为应该很容易的通过ProgressEvent.SOCKET_DATA来读取从网络传到ActionScript套接字缓冲区的数据,并确定有多少个字节可供读取(Socket.bytesAvailable)。然而,事实尚非如此。换句话说,在AIR 3之前,没有办法知道有多少数据从ActionScript套接字成功地写入了网络的缓冲区,也不可能知道有多少数据正在等待被写入。这导致开发者不确定调用套接字的关闭是否是安全的,或知道当用户想关闭应用程序的时候,是否有一个网络进程还在处理中。通过AIR 3,开发人员可以使用OutputProgressEvent.OUTPUT_PROGRESS事件和Socket新属性.bytesPending,以确定有多少数据被写入到网络,多少数据在ActionScript套接字中仍在等待写入。这些新的API可以帮助我们构建更强壮的依赖套接字网络访问的应用程序。欲了解更多信息和代码示例,请参阅我的博客文章, AIR 3中套接字的改进 。
H.264视频编码 (桌面)。您可以将摄像头捕获的视频基于H.264进行编码。
JPEG XR的支持 (移动和台式机)。AIR 3现在支持JPEG XR,一个新的文件格式,相比JPEG有几个优点。例如,JPEG XR提供了更好的压缩率,更小的压缩损失,更准确的色彩,和Alpha透明度。欲了解更多信息,请查阅Wikipedia上的JEPG XR文章。
更高分辨率的位图(移动和桌面) 。在之前的AIR中,位图被限制为16万像素(16777215像素)和8191的最大宽度/高度。在AIR 3中,所有的限制已被删除,这意味着现在的最大尺寸是由主机操作系统决定的,而不是AIR限制的。
多声道数字音频输出 (只支持AIR for TV)。现在电视上的Adobe AIR可以播放杜比数字+ 5.1环绕声和DTS 5.1音频流。新的CapabiPties.hasMultiChannelAudio属性,新的AudioDecoder类(其中包含代表几个不同的多声道音频类型的常量),和CapabiPties.serverString属性,都可以让开发者来检测设备的多声道音频功能,并从ActionScript中通过RTMP协议输出正确的音频比特流。
高级控制器支持 (只支持AIR for TV)。使用新的GameInput API,开发人员可以构建基于高级电视控制器的游戏。一些新的API允许枚举设备(可用控制器),枚举设备的控制功能(按钮,触发器,加速度等),并从设备中得到控制值。
更容易删除一个容器的所有的子元件 (所有平台)。DisplayObjectContainer现在已经具备了removeChildren()函数,它可以只用一个方法删除所有的子元件。这当然比下面的操作更有效:
(this.numChildren> 0)this.removeChildAt(0)更容易判断MovieCPp是否在播放 (所有平台)。通过使用新的isPlaying属性,可以很容易判断一个电影剪辑是否在播放。
GC建议的API(所有平台)。新的System.pauseForGCIfCollectionImminent功能,可以让AIR开发人员更好地控制运行时的自动垃圾回收机制。由于垃圾回收有可能造成动画或音频的暂停,开发者可以在用户难以察觉的时候,使用这个方法鼓励垃圾回收。
安全随机数生成 (移动和桌面)。Adobe AIR中一直有Math.random方法可用,返回“伪随机”的数字,也就是说,这似乎是随机的,但总是包含一些非随机性(比如时间戳)的数字。AIR 3提供了一个用于生成随机数的新方法,称为generateRandomBytes(),位于flash.crypto包。由于generateRandomBytes()函数使用操作系统API来产生随机数(在Windows上是CryptGenRandom ,在OSX上是/dev/random , 在Android上是/dev/urandom, 在iOS上则是SecRandomCopyBytes),由此产生的随机数更有效,更安全。
三次贝塞尔曲线 (所有平台) 。新的cubicCurveTo()方法是Graphics类的功能,允许您以编程方式绘制三次贝塞尔曲线,而且不使用第三方ActionScript代码。
Adobe AIR 3作为一个候选发布版可以在Adobe实验室中找到 。