使用 Adobe AIR 的本机扩展

Adobe AIR 的本机扩展提供 ActionScript API,该 API 提供对采用本机代码编程的特定于设备的功能的访问。本机扩展开发人员有时与设备制造商合作,有时为第三方开发人员。

如果要开发本机扩展,请参阅 针对 Adobe AIR 开发本机扩展

本机扩展是以下各项的组合:

  • ActionScript 类。

  • 本机代码。

不过,作为使用本机扩展的 AIR 应用程序开发人员,只使用 ActionScript 类。

在以下情况下,本机扩展非常有用:

  • 本机代码实现提供对特定于平台的功能的访问。这些特定于平台的功能在内置 ActionScript 类中不可用,也无法在特定于应用程序的 ActionScript 类中实现。本机代码实现可以提供此类功能,因为它可以访问特定于设备的硬件和软件。

  • 本机代码实现有时可能比仅使用 ActionScript 的实现速度更快。

  • 本机代码实现可以提供对旧本机代码的 ActionScript 访问。

Adobe 开发人员中心提供了一些本机扩展的示例。例如,一个本机扩展提供对 Android 振动功能的 AIR 应用程序访问。请参阅 Adobe AIR 的本机扩展

AIR 本机扩展 (ANE) 文件

本机扩展开发人员将本机扩展打包到 ANE 文件中。ANE 文件是一个归档文件,其中包含本机扩展所需的库和资源。

请注意,对于某些设备,ANE 文件包含本机扩展使用的本机代码库。但对于其他设备,设备上安装有本机代码库。在某些情况下,本机扩展对于某个特殊设备根本没有本机代码;其仅使用 ActionScript 实现。

作为 AIR 应用程序开发人员,采用如下方式使用 ANE 文件:

  • 在应用程序的库路径中包含 ANE 文件,方法与在库路径中包含 SWC 文件相同。此操作允许应用程序引用扩展的 ActionScript 类。

    注: 编译应用程序时,请确保针对 ANE 使用动态链接。如果使用 Flash Builder,请在 ActionScript Builder 路径属性面板中指定“外部”;如果使用命令行,请指定 -external-library-path。
  • 使用 AIR 应用程序打包 ANE 文件。

本机扩展与 NativeProcess ActionScript 类

ActionScript 3.0 提供了一个 NativeProcess 类。此类允许 AIR 应用程序在主机操作系统上执行本机进程。此功能与本机扩展的功能类似,后者提供对特定于平台的功能和库的访问。在决定使用 NativeProcess 类还是使用本机扩展时,请考虑以下因素:

  • 只有 extendedDesktop AIR 配置文件支持 NativeProcess 类。因此,对于使用 AIR 配置文件 mobileDevice extendedMobileDevice 的应用程序,本机扩展是唯一选择。

  • 本机扩展开发人员通常为各种平台提供本机实现,但其提供的 ActionScript API 在各平台上通常相同。使用 NativeProcess 类时,不同平台上启动本机进程的 ActionScript 代码可能会不同。

  • NativeProcess 类启动一个单独的进程,而本机扩展与 AIR 应用程序运行在同一进程中。因此,如果担心代码崩溃,则使用 NativeProcess 类比较安全。不过,单独的进程意味着可能需要实现进程间的通信处理。

本机扩展与 ActionScript 类库(SWC 文件)

SWC 文件是采用归档格式的 ActionScript 类库。SWC 文件包含 SWF 文件和其他资源文件。SWC 文件是共享 ActionScript 类(而不是共享各个 ActionScript 代码和资源文件)的简便方法。

本机扩展包是一个 ANE 文件。和 SWC 文件一样,ANE 文件也是一个 ActionScript 类库,包含归档格式的 SWF 文件和其他资源文件。不过,ANE 文件和 SWC 文件之间最重要的区别是只有 ANE 文件才能包含本机代码库。

注: 编译应用程序时,请确保针对 ANE 文件使用动态链接。如果使用 Flash Builder,请在 ActionScript Builder 路径属性面板中指定“外部”;如果使用命令行,请指定 -external-library-path。

支持的设备

从 AIR 3 开始,可以为以下设备在应用程序中使用本机扩展:

  • Android 设备,从 Android 2.2 开始

  • iOS 设备,从 iOS 4.0 开始

  • iOS Simulator,从 AIR 3.3 开始

  • Blackberry PlayBook

  • 支持 AIR 3.0 的 Windows 桌面设备

  • 支持 AIR 3.0 的 Mac OS X 桌面设备

通常,同一本机扩展以多个平台为目标。扩展的 ANE 文件为每个支持的平台包含 ActionScript 和本机库。通常,ActionScript 库针对所有平台都具有相同的公共接口。本机库必须不同。

有时,本机扩展支持默认平台。默认平台的实现仅具有 ActionScript 代码,但无本机代码。如果为扩展不专门支持的平台打包应用程序,则应用程序在执行时使用默认实现。例如,假设有一个扩展,提供仅适用于移动设备的功能。该扩展还可以提供桌面应用程序可用于模拟功能的默认实现。

支持的设备配置文件

以下 AIR 配置文件支持本机扩展:

  • extendedDesktop ,从 AIR 3.0 开始

  • mobileDevice ,从 AIR 3.0 开始

  • extendedMobileDevice ,从 AIR 3.0 开始

使用本机扩展的任务列表

要在应用程序中使用本机扩展,请执行以下任务:

  1. 在应用程序描述符文件中声明扩展。

  2. 在应用程序库路径中包含 ANE 文件。

  3. 打包应用程序.

在应用程序描述符文件中声明扩展

所有 AIR 应用程序都具有应用程序描述符文件。当应用程序使用本机扩展时,应用程序描述符文件包含一个 <extensions> 元素。例如:

<extensions> 
    <extensionID>com.example.Extension1</extensionID> 
    <extensionID>com.example.Extension2</extensionID> 
</extensions>

extensionID 元素的值与扩展描述符文件中的 id 元素的值相同。扩展描述符文件是一个名为 extension.xml 的 XML 文件。该文件打包在 ANE 文件中。您可使用归档提取器工具查看 extension.xml 文件。

在应用程序库路径中包含 ANE 文件

要编译使用本机扩展的应用程序,请在库路径中包含 ANE 文件。

使用带 Flash Builder 的 ANE 文件

如果应用程序使用本机扩展,请在库路径中包含本机扩展的 ANE 文件。然后可以使用 Flash Builder 来编译 ActionScript 代码。

使用 Flash Builder 4.5.1 执行下列步骤:

  1. 将 ANE 文件的文件扩展名从 .ane 更改为 .swc。必须执行此步骤,以便 Flash Builder 可以找到文件。

  2. 在 Flash Builder 项目中,选择“项目”>“属性”。

  3. 在“属性”对话框中选择“Flex 生成路径”。

  4. 在“库路径”选项卡中,选择“添加 SWC...”。

  5. 浏览到 SWC 文件,然后选择“打开”。

  6. 在“添加 SWC...”对话框中选择“确定”。

    现在,ANE 文件将会显示在“属性”对话框的“库路径”选项卡中。

  7. 展开 SWC 文件条目。双击“链接类型”以打开“库路径项目选项”对话框。

  8. 在“库路径项目选项”对话框中,将“链接类型”更改为“外部”。

现在,可以使用“项目”>“生成项目”来编译应用程序。

使用带 Flash Professional 的 ANE 文件

如果应用程序使用本机扩展,请在库路径中包含本机扩展的 ANE 文件。然后可以使用 Flash Professional CS5.5 来编译 ActionScript 代码。请执行以下操作:

  1. 将 ANE 文件的文件扩展名从 .ane 更改为 .swc。必须执行此步骤,以便 Flash Professional 可以找到文件。

  2. 在 FLA 文件中,选择“文件”>“ActionScript 设置”。

  3. 在“高级 ActionScript 3.0 设置”对话框中,选择“库路径”选项卡。

  4. 选择“浏览到 SWC 文件”按钮。

  5. 浏览到 SWC 文件,然后选择“打开”。

    现在,SWC 文件将会显示在“高级 ActionScript 3.0 设置”对话框的“库路径”选项卡中。

  6. 选择 SWC 文件后,再选择“为库设置链接选项”按钮。

  7. 在“库路径项目选项”对话框中,将“链接类型”更改为“外部”。

打包使用本机扩展的应用程序

使用 ADT 可打包使用本机扩展的应用程序。无法打包使用 Flash Professional CS5.5 或 Flash Builder 4.5.1 的应用程序。

有关使用 ADT 的详细信息,请参阅 AIR 开发人员工具 (ADT)

例如,下面的 ADT 命令为使用本机扩展的应用程序创建一个 DMG 文件(用于 Mac OS X 的本机安装程序文件):

adt -package 
    -storetype pkcs12 
    -keystore myCert.pfx 
    -target native 
    myApp.dmg 
    application.xml 
    index.html resources 
    -extdir extensionsDir
下面的命令为 Android 设备创建一个 APK 包:
adt -package 
    -target apk 
    -storetype pkcs12 -keystore ../codesign.p12 
    myApp.apk 
    myApp-app.xml 
    myApp.swf icons 
    -extdir extensionsDir

下面的命令为 iPhone 应用程序创建一个 iOS 包:

adt -package 
    -target ipa-ad-hoc 
    -storetype pkcs12 -keystore ../AppleDistribution.p12 
    -provisioning-profile AppleDistribution.mobileprofile 
    myApp.ipa 
    myApp-app.xml 
    myApp.swf icons Default.png 
    -extdir extensionsDir

请注意以下事项:

  • 使用本机安装程序包类型。

  • 指定扩展目录。

  • 确保 ANE 文件支持应用程序的目标设备。

使用本机安装程序包类型

应用程序包必须是一个本机安装程序。您无法为使用本机扩展的应用程序创建跨平台 AIR 包(.air 包),因为本机扩展通常包含本机代码。不过,通常本机扩展支持多个具有相同 ActionScript API 的本机平台。在这些情况下,可以在不同的本机安装程序包中使用同一 ANE 文件。

下表概述了用于 ADT 命令的 -target 选项的值:

应用程序的目标平台

-target

Mac OS X 或 Windows 桌面设备

-target native

-target bundle

Android

-target apk

或其他 Android 包目标。

iOS

-target ipa-ad-hoc

或其他 iOS 包目标

iOS Simulator

-target ipa-test-interpreter-simulator

-target ipa-debug-interpreter-simulator

指定扩展目录

使用 ADT 选项 -extdir 告知 ADT 包含本机扩展(ANE 文件)的目录。

有关此选项的详细信息,请参阅 文件和路径选项

确保 ANE 文件支持应用程序的目标设备

提供 ANE 文件时,本机扩展开发人员会告知扩展所支持的平台。您也可使用归档提取器工具查看 ANE 文件的内容。所提取的文件包含每个支持的平台的目录。

打包使用 ANE 文件的应用程序时,了解扩展所支持的平台十分重要。请考虑以下规则:

  • 要创建 Android 应用程序包,ANE 文件必须包含 Android-ARM 平台。或者,ANE 文件必须包括默认平台和至少一个其他平台。

  • 要创建 iOS 应用程序包,ANE 文件必须包含 iPhone-ARM 平台。或者,ANE 文件必须包括默认平台和至少一个其他平台。

  • 要创建 iOS Simulator 应用程序包,ANE 文件必须包括 iPhone-x86 平台。

  • 要创建 Mac OS X 应用程序包,ANE 文件必须包含 MacOS-x86 平台。或者,ANE 文件必须包括默认平台和至少一个其他平台。

  • 要创建 Windows 应用程序包,ANE 文件必须包含 Windows-x86 平台。或者,ANE 文件必须包括默认平台和至少一个其他平台。