构建本机库

要构建您的扩展的本机库,请使用适用于目标设备的开发环境。例如:

  • 在使用 Android SDK 开发时,请使用针对 Eclipse 集成开发环境 (IDE) 的 Android 开发工具插件。

  • 在为 iOS 设备和 Mac OS X 设备开发时,请使用 Apple 的 Xcode IDE。

  • 在为 Windows 设备开发时,可以使用 Microsoft Visual Studio。

有关使用这些开发环境的本机扩展示例,请参阅 Adobe AIR 的本机扩展

将扩展的本机端构建到库而非应用程序中。在将您的本机扩展打包到 ANE 文件时,需要指定本机库。

Android 本机库

在使用 Android SDK 时,请作为 JAR 文件提供库。

在使用 Android NDK 时,请提供具有如下文件名的共享库:

lib<yourlibraryname>.so 

需要此共享库命名约定才能正确安装应用程序 APK 包。

创建包含共享库的 ANE 包时,共享库必须存储在以下目录结构中:

<Android platform directory>/ 
                        libs/ 
                        armeabi/ 
                        <Android emulator native libraries> 
                        armeabi-v7a/ 
                        <Android device native libraries>

iOS 本机库

提供文件扩展名为 .a 的静态库。您可以使用 Xcode IDE 中的 Cocoa Touch 静态库模板构建 .a 文件。使用目标类型 device 创建在设备上运行的本机库;使用目标类型 simulator 创建在 iOS Simulator 上运行的本机库(AIR 3.3 和更高版本支持 iOS Simulator)。

每个版本的 AIR 绑定一个版本的 iOS SDK。在目标为相应 AIR 版本的本机扩展中,您可以链接到该版本 iOS SDK 中提供的任何公共框架。下表列出了 AIR SDK 版本及其绑定的 iOS 版本,以及对其他功能的支持:

AIR SDK

包含的 iOS SDK

链接到其他库

绑定第三方库

3.0 - 3.2

4.2

3.3 - 3.4

5.1

3.5

6.0

将特定 AIR SDK 版本作为扩展的目标时,不应使用在相应 iOS 版本之后引入的任何 iOS 框架。除了作为目标的 AIR SDK,不应使用任何其他的共享库或第三方框架。

如果不使用与 AIR SDK 绑定的 iOS SDK,一种替代方法是,在 AIR 3.3 及更高版本中您可以链接到外部 iOS SDK。使用 ADT -platformsdk 开关,指定指向外部 iOS SDK 的路径。

默认情况下,AIR 链接到以下 iOS 框架库:

AudioToolbox

CoreLocation

OpenGLES

AVFoundation

CoreMedia

QuartzCore

CFNetwork

CoreVideo

Security

CoreFoundation

Foundation

SystemConfiguration

CoreGraphics

MobileCoreServices

UIKit

GameController

AssetsLibrary

当链接到其他框架和库时,请在平台选项 XML 文件中指定链接选项。

注: 在 AIR 3.4 和更高版本中,您可以使用 ADT ‑hideAneSymbols yes 选项来消除潜在符号冲突。有关详细信息,请参阅 本机扩展选项

iOS 平台选项 (platform.xml) 文件

您可以使用平台选项 (platform.xml) 文件来指定特定于 iOS 的选项以链接到其他框架和库,或者在您的本机扩展中绑定第三方框架或库。当您在 -platform 标志之后为 iOS 指定 -platformoptions 标志,以此来打包扩展时,平台选项文件即添加到 ANE。稍后,当开发人员创建使用您的扩展的应用程序 IPA 文件时,ADT 会使用 platform.xml 文件中的选项链接到其他库并包含绑定的依赖项。

注: 平台选项文件的名称可以任意,不要求将其命名为“platform.xml”。

您可以将 iOS 平台选项文件用于 iPhone-ARM(设备)和 iPhone-x86(iOS 模拟器)平台。

platform 选项文件需要 AIR 3.1 或更高版本。

使用 packagedDependencies 功能打包用于 iOS 的 ANE 时,添加

<option>-rpath @executable_path/Frameworks</option>

linkerOptions 标签内( platformoptions.xml 中)。

iOS 链接器选项

iOS 链接器选项为您提供一种将任意选项传递给链接器的方式。指定选项在传递给链接器时会保持原样。您可以使用这种方式链接到其他框架和库,例如其他 iOS 框架。要指定链接器选项,请在平台选项 xml 文件中使用 <linkerOptions> 标签。在 <linkerOptions> 标签内,指定包含在 <options> 标签对中的每个链接选项,如下例所示:

<linkerOptions> 
                                <option>-ios_version_min 5.0</option> 
                                <option>-framework Accelerate</option> 
                                <option>-liconv</option> 
                                </linkerOptions>

任何以此方式链接的依赖项必须分发给使用您的本机扩展从本机扩展本身分离的开发人员。这对于 iOS 包含的而非 AIR 默认链接的其他库最为有用。您还可以使用此选项让开发人员链接到单独提供给他们的静态库。

<linkerOptions> 标签需要 AIR 3.3 或更高版本。

打包的第三方依赖项

有时,您希望在本机扩展中使用静态库(例如,本机第三方库),而无需访问该库的源代码,或者无需开发人员访问从您的扩展分离的库。您可以通过将静态库指定为打包的依赖项,将其绑定到您的本机扩展。在 platform 选项 xml 文件中使用 <packagedDependencies> 标签。对于每个要包含在扩展包中的依赖项,指定以 <packagedDependency> 标签对括起的名称或相对路径,如下例所示:

<packagedDependencies> 
                                <packagedDependency>foo.a</packagedDependency> 
                                <packagedDependency>abc/x.framework</packagedDependency> 
                                <packagedDependency>lib.o</packagedDependency> 
                                </packagedDependencies>

打包的依赖项应当是具有以下扩展之一的静态库: .a .framework .o 。该库应支持在设备上使用 ARMv7 体系结构,在 iOS 模拟器上使用 i386 体系结构。

打包本机扩展时,您必须将依赖项的名称指定为 -platformoptions 标志的参数。在 platform.xml 文件的文件名之后、任何后续的 -package 标志之前列出依赖项,如下例所示:

adt -package <signing options> -target ane MyExtension.ane MyExt.xml -swc MyExtension.swc 
                                -platform iPhone-ARM -platformoptions platformiOSARM.xml 
                                foo.a abc/x.framework lib.o -C platform/ios . 
                                -platform iPhone-x86 -platformoptions platformiOSx86.xml 
                                -C platform/iosSimulator 
                                -platform default -C platform/default library.swf

<packagedDependencies> 标签需要 AIR 3.5 或更高版本。

使用专用的嵌入框架

要创建具有 Xcode6 或更高版本的 iOS ANE,可使用专用的框架:

  1. 编辑 platform.xml,添加

    <option>-rpath @executable_path/Frameworks</option>

    linkerOptions 标签内。

    例如:

    </description> 
                                            <linkerOptions> 
                                            <option>-ios_version_min 5.1.1</option> 
                                            <option>-rpath @executable_path/Frameworks</option> 
                                            </linkerOptions> 
                                            <packagedDependencies> 
                                            <packagedDependency>SampleFramework.framework</packagedDependency> 
                                            </packagedDependencies>
  2. 在现有的 iPhone-ARM 文件夹中创建一个名为 Frameworks 的文件夹。

  3. 将专用框架复制到 Frameworks 文件夹,并将该框架与 ANE 打包在一起。

    复制专用框架

platform 选项 (platform.xml) 文件示例

以下列表显示了一个平台选项 (platform.xml) 文件结构的示例:

<platform xmlns="http://ns.adobe.com/air/extension/3.5"> 
                                <description>An optional description.</description> 
                                <copyright>2011 (optional)</copyright> 
                                <sdkVersion>5.0.0</sdkVersion> 
                                <linkerOptions> 
                                <option>-ios_version_min 5.0</option> 
                                <option>-framework Accelerate</option> 
                                <option>-liconv</option> 
                                </linkerOptions> 
                                <packagedDependencies> 
                                <packagedDependency>foo.a</packagedDependency> 
                                <packagedDependency>abc/x.framework</packagedDependency> 
                                <packagedDependency>lib.o</packagedDependency> 
                                </packagedDependencies> 
                                </platform>

要在本机扩展包中包含此平台选项文件,您可以使用如下 ADT 命令:

adt -package <signing options> -target ane MyExtension.ane MyExt.xml -swc MyExtension.swc 
                                -platform iPhone-ARM -platformoptions platformiOSARM.xml 
                                foo.a abc/x.framework lib.o -C platform/ios . 
                                -platform iPhone-x86 -platformoptions platformiOSx86.xml 
                                -C platform/iosSimulator 
                                -platform default -C platform/default library.swf

Mac OS X 本机库

对于 Mac OS X 设备,请提供一个 .framework 库。在构建库时,确保 Xcode 项目的基本 SDK 设置为 Mac OS X 10.5 SDK。

在所有情况下,在编译 Mac OS X 框架以用作扩展时,均应设置以下选项以便正确解析 AIR 框架的依赖项:

  • 向 LD_RUNPATH_SEARCH_PATHS 中添加 @executable_path/../runtimes/air/mac @executable_path/../Frameworks /Library/Frameworks

  • 使用弱框架链接和平面命名空间选项。

这些选项设置加在一起将允许应用程序首先加载 AIR 框架的正确副本,然后扩展就可以依靠已加载的副本。

Windows 本机库

对于 Windows 设备,请作为 DLL 文件提供库。将 lib/windows 目录的 AIR SDK 目录中的库 FlashExtensions.lib 动态链接到您的 DLL。此外,如果您的本机代码库使用 Microsoft 的任何 C 运行时库,请链接到 C 运行时库的多线程、静态版本。要指定此类型的链接,请使用 /MT 编译器选项。