要将您的本机扩展提供给应用程序开发人员,需要将所有相关的文件打包到一个 ANE 文件中。ANE 文件是一个存档文件,它包含:
-
扩展的 ActionScript 库
-
扩展的本机代码库
-
扩展描述符文件
-
扩展的证书
-
扩展的资源,如图像。
使用 AIR 开发人员工具 (ADT) 创建 ANE 文件。ADT 的完整文档位于
AIR 开发人员工具
中。
打包扩展的 ADT 示例
下例说明如何使用 ADT 打包 ANE 文件。本示例打包 ANE 文件,以便与在以下设备上运行的应用程序一起使用:
adt -package <signing options> -target ane MyExtension.ane MyExt.xml -swc MyExtension.swc -platform Android-ARM -C platform/Android .
-platform Android-x86 -C platform/Android-x86 .
-platform iPhone-ARM -platformoptions platform.xml
abc/x.framework lib.o -C platform/ios .
-platform iPhone-x86 -C platform/iosSimulator
-platform default -C platform/default library.swf
在本示例中,使用以下命令行选项创建 ANE 包:
-
<signing options>
您可以选择对 ANE 文件签名。有关详细信息,请参阅
为本机扩展创建签名证书
。
-
-target ane
-target
标志指定要创建哪种类型的包。使用
ane
目标打包本机扩展。
-
MyExtension.ane
指定要创建的包文件的名称。使用 .ane 文件扩展名。
-
MyExt.xml
指定扩展描述符文件。该文件指定扩展 ID 和支持的平台。AIR 使用此信息定位并加载应用程序的扩展。在本示例中,扩展描述符是:
<extension xmlns="http://ns.adobe.com/air/extension/3.1">
<id>com.sample.ext.MyExtension</id>
<versionNumber>0.0.1</versionNumber>
<platforms>
<platform name="Android-ARM">
<applicationDeployment>
<nativeLibrary>MyExtension.jar</nativeLibrary>
<initializer>com.sample.ext.MyExtension</initializer>
</applicationDeployment>
</platform>
<platform name="Android-x86">
<applicationDeployment>
<nativeLibrary>MyExtension.jar</nativeLibrary>
<initializer>com.sample.ext.MyExtension</initializer>
</applicationDeployment>
</platform>
<platform name="iPhone-ARM">
<applicationDeployment>
<nativeLibrary>MyExtension.a</nativeLibrary>
<initializer>InitMyExtension></initializer>
</applicationDeployment>
</platform>
<platform name="iPhone-x86">
<applicationDeployment>
<nativeLibrary>MyExtension.a</nativeLibrary>
<initializer>InitMyExtension></initializer>
</applicationDeployment>
</platform>
<platform name="default">
<applicationDeployment/>
</platform>
</platforms>
</extension>
有关详细信息,请参阅
本机扩展描述符文件
。
-
MyExtension.swc
指定包含扩展的 ActionScript 端的 SWC 文件。
-
-platform Android-ARM -C platform/Android . -platform Android-x86 -C platform/Android-x86 .-platform iPhone-ARM -platformoptions platform.xml-Cplatform/iOS.
-platform
标志指定此 ANE 文件支持的平台。该名称后面的选项指定在何处查找特定于平台的库和资源。在本示例中,
Android-ARM
平台的
-C
选项指示将相对目录
platform/Android
作为工作目录。后面的目录和文件都是相对于新工作目录。
因此,在本示例中,相对目录
platform/Android
包含所有 Android 本机代码库和资源。它还包含特定于 Android 平台的 library.swf 文件和任何其他特定于 Android 平台的 SWF 文件。
iPhone-ARM 平台的
-platformoptions
标志是一个可选项,用于指定特定于平台的选项。这些选项包含用于链接到 iOS 框架(而不是默认项)以及将第三方静态库绑定到本机扩展的选项。请参阅
iOS 本机库
。
-
-platform default -C platform/default library.swf
当
-platform
选项指定
default
平台时,请不要指定任何本机代码文件。仅指定一个 library.swf 文件,和其他 SWF 文件(如果有)。
ANE 包中的 SWC 文件和 SWF 文件
您在 ADT 打包命令的
-swc
选项中指定一个 SWC 文件。此 SWC 文件是您的 ActionScript 库。它包含一个名为 library.swf 的文件。ADT 将 library.swf 从 SWC 文件放入 ANE 文件。当 AIR 应用程序使用本机扩展时,它在其库路径中包括该扩展的 ANE 文件,以便该应用程序可以编译。事实上,该应用程序根据 library.swf 中的公共接口进行编译。
有时,您需要为每个目标平台分别创建一个不同的 ActionScript 实现。在此情况下,应在使用 ADT 打包命令之前,为每个平台编译一个 SWC 文件并将每个 SWC 文件中的 library.swf 文件放在适当的平台目录中。您可以使用提取工具(如 WinZip)从 SWC 文件提取 library.swf。
考虑扩展的公共接口在所有平台上都相同的情况。这种情况下,在 ADT 命令的
-swc
选项中使用哪个平台特定 SWC 文件无关紧要。无关紧要的原因是 SWC 文件中的 SWF 文件只用于应用程序编译。您放入平台目录中的 SWF 文件是本机扩展在运行时使用的文件。
请注意有关 library.swf 文件的以下情况:
-
ADT 需要您为每个平台提供一个名为 library.swf 的主 SWF 文件。在创建 SWC 文件时,library.swf 就是 SWF 文件的名称。
-
每个平台的 library.swf 文件可以不相同。
-
如果 ActionScript 端没有平台依赖项,则每个平台的 library.swf 文件可以相同。
-
每个平台的 library.swf 可以加载您在特定于平台的目录中包括的其他 SWF 文件。这些其他 SWF 文件可以是任何名称。
应用程序打包的 ANE 文件规则
利用 ADT 打包使用本机扩展的应用程序。在打包使用扩展的应用程序时,ADT 会验证 ANE 文件中指定的平台与应用程序打包目标是否匹配。例如,平台
Android-ARM
匹配 Android apk 包。
此外,ADT 将
default
平台与
任何
目标包匹配。
default
平台指定扩展的仅 ActionScript 版本。假定有一个使用应用程序绑定扩展的 AIR 应用程序。如果扩展的任何指定平台都不与设备对应,AIR 仅加载
default
平台扩展的 ActionScript 库。
例如,假定有一个指定
iPhone-ARM
、
Android-ARM
和
default
平台的应用程序绑定扩展。当使用该扩展的应用程序运行于 Windows 平台时,它将使用该扩展的
default
平台库。
因此,当您创建用于应用程序绑定的 ANE 文件时,请在打包使用 ANE 文件的应用程序时,考虑 ADT 使用的以下规则:
-
要创建 Android 应用程序包,ANE 文件必须包括
Android-ARM
平台。或者,ANE 文件必须包括默认平台和至少一个其他平台。
-
要创建 iOS 应用程序包,ANE 文件必须包括
iPhone-ARM
平台。或者,ANE 文件必须包括默认平台和至少一个其他平台。
-
要创建 iOS Simulator 应用程序包,ANE 文件必须包括
iPhone-x86
平台。或者,ANE 文件必须包括默认平台和至少一个其他平台。
-
要创建 Mac OS X 应用程序包,ANE 文件必须包括
MacOS-x86-64
平台。或者,ANE 文件必须包括默认平台和至少一个其他平台。
-
要创建 Windows 应用程序包,ANE 文件必须包括
Windows-x86
平台。或者,ANE 文件必须包括默认平台和至少一个其他平台。
一个应用程序只能绑定一个平台实现。但是,如果使用 ADL 实用程序测试包含扩展的应用程序,则会在运行时选择实现。根据测试平台和 ANE 包的不同,这种在运行时进行的选择可能导致行为差异。例如,如果 ANE 包含
Android-ARM
、
Windows-x86
和
default
平台的实现,测试时使用的实现将有所不同,具体取决于测试计算机运行的是 Windows 还是 OS X。在 Windows 上,将使用
Windows-x86
平台实现(即使是使用移动配置文件进行测试);在 OS X 上,将使用
default
实现。
在 ANE 包中包括其他 Android 共享 .so 库
假定有一个面向平台
Android-ARM
的本机扩展。扩展本机端的主要库为以下任一项:
-
.so 库(如果使用 Android NDK)
-
JAR 文件(如果使用 Android SDK)
不过,本机端有时需要比扩展的主要 .so 库或 JAR 文件更多的本机库(.so 库)。
例如:
在创建 ANE 包时,请使用以下目录结构:
<Android platform directory>/
libs/
armeabi/
<Android emulator native libraries>
armeabi-v7a/
<Android device native libraries>
在使用 ADT 创建 ANE 包时,请设置
-platform
选项以指定 Android 平台目录内容:
-platform Android-ARM -C <Android platform directory> .
当应用程序开发人员使用 ADT 将 ANE 包包括在 APK 包中时,APK 包包括以下库:
注:
对于 iPhone-ARM 平台,不能在 ANE 文件中包括共享库。有关详细信息,请参阅
构建本机库
。
|
|
|