当您构建 AIR for TV 本机扩展时,您将构建两个版本的扩展:
- 设备绑定扩展。
- 存根或模拟器扩展。
设备绑定扩展包括:
- 通常使用 C 或 C++ 编写的本机实现。
- 调用该本机实现的函数的实际 ActionScript 实现。
- 存根或模拟器扩展是仅包含 ActionScript 的实现。
设备绑定扩展和存根扩展
当您为 Adobe® AIR® for TV 设备编写本机扩展时,您需要创建该扩展的两个变体:
- 设备绑定扩展,也称为实际扩展。
- 存根扩展。
此外,您还可以根据情况提供第三个变体:模拟器扩展。
设备绑定扩展
设备绑定扩展是设备上安装的变体。ActionScript 端调用本机实现的函数。您生成此实际 ActionScript 实现以及本机实现,并创建一个 ZIP 文件。设备制造商将此文件解压缩到设备上的特定目录中。
存根扩展
存根本机扩展具有与实际 ActionScript 实现相同的 ActionScript 接口,但是 ActionScript 方法不做任何事情。存根扩展是仅包含 ActionScript 的扩展;它没有本机实现。当您生成存根 ActionScript 实现时,您将创建一个 ANE 文件。
AIR 应用程序开发人员使用此 ANE 文件达到三个目的:
- 编译使用本机扩展的 AIR 应用程序。
- 在台式计算机而不是目标设备上运行 AIR 应用程序。
- 包括在 AIR 应用程序软件包中。
模拟器扩展
可选的第三种变体是模拟器扩展。此实现也具有与实际 ActionScript 实现相同的 ActionScript 接口。不过,它的 ActionScript 方法在 ActionScript 中模拟扩展的行为。像存根扩展一样,模拟器扩展是仅包含 ActionScript 的扩展;它没有本机实现。当您生成模拟器 ActionScript 实现时,您将创建一个 ANE 文件。
AIR 应用程序开发人员可以使用模拟器扩展 ANE 文件编译他们的应用程序。与使用存根扩展进行测试相比,他们可以使用此 ANE 文件在台式计算机上更加彻底地测试应用程序。他们还可以将模拟器扩展包括在 AIR 应用程序软件包中。
注: 您可以创建一个模拟器扩展,作为存根扩展的替代品或辅助品。
设备绑定扩展、存根扩展和模拟器扩展的使用
AIR 应用程序开发人员使用存根和模拟器扩展完成下列工作:
- 使用存根扩展或模拟器扩展编译 AIR 应用程序。
- 使用存根扩展或模拟器扩展在台式计算机上测试应用程序。
- 将存根扩展或模拟器扩展打包到它们的可分发 AIR 应用程序中。
注: 如果您为 AIR 应用程序开发人员同时提供了存根和模拟器扩展,请告诉他们将哪个扩展与他们的可分发应用程序一起打包。
当 AIR 应用程序在设备上运行时,AIR for TV 将执行下列操作:
- 在设备上寻找相应的设备绑定(实际)扩展。
- 如果该扩展存在,则 AIR for TV 会加载它以供 AIR 应用程序使用。
- 如果该扩展不存在,AIR for TV 将改为加载与应用程序一起打包的存根或模拟器扩展。
为扩展创建签名证书
您可以选择对本机扩展进行数字签名。对扩展签名是可选的。
默认情况下,AIR for TV 生成实用程序使用虚假证书。该虚假证书仅适用于测试.
编写本机实现
对于 AIR for TV 而言,您的扩展的本机实现是 AIR for TV 模块。
AIR for TV 分发包提供了扩展开发工具包 (EDK),用于编写和生成您的扩展的本机实现。
EDK 包括下列部分:
C 扩展 API 头文件:
- <AIR for TV installation directory>/products/stagecraft/include/ae/edk/FlashRuntimeExtensions.h
该头文件声明本机实现使用的 C 类型和函数。
一个位于以下源文件中的扩展模块实现:
- <AIR for TV installation directory>/products/stagecraft/source/ae/edk/ExtensionBridge.cpp
请不要修改此扩展模块实现。当您生成您的本机实现时,必须在您的内部版本中包括此源文件。
生成您的设备绑定扩展所需的生成文件支持。
注: AIR for TV EDK 要求将 FREInitializer() 方法命名为 Initializer(),将 FREFinalizer() 方法命名为 Finalizer()。
将 ActionScript 和本机代码放入目录结构中
设备绑定扩展是特定于硬件平台的。当您开发设备绑定扩展时,请将您的文件放入您的平台的子目录中。此子目录位于以下目录中:
<AIR for TV installation directory>/products/stagecraft/thirdparty-private/<yourCompany>/stagecraft-platforms/<yourPlatform>/edk |
例如,公司 A 使用以下子目录来进行面向其平台 B 的开发工作:
<AIR for TV installation directory>/products/stagecraft/thirdparty-private/CompanyA/stagecraft-platforms/PlatformB/edk |
请将您的 C 实现的头文件和源文件放入 <您的平台>/edk 目录或其子目录中。例如,将您的扩展 .cpp 和 .h 文件在放入以下目录中:
< |
类似地,将您的实际 ActionScript 实现的 .as 文件放入 <您的平台>/edk 目录或其子目录中。例如:
< |
另外,请将您的存根或模拟器 ActionScript 实现的 .as 文件放入 <您的平台>/edk 目录或其子目录中。例如:
<AIR for TV installation directory> |
注:pAIR for TV 提供的扩展示例位于目录 <AIR for TV 安装目录>/products/stagecraft/source/edk 中。请不要将您的扩展文件放入此目录中。
创建 .mk 文件
与其他 AIR for TV 模块一样,要生成您的扩展模块,您首先需要创建 .mk 文件。.mk 文件的主要用途是指定要生成的源文件。
要创建 .mk 文件,请执行下列操作:
复制以下目录中的 PlatformEDKExtension_HelloWorld.mk 文件或 PlatformEDKExtension_Process.mk 文件:
<AIR for TV installation directory>/products/stagecraft/source/ae/edk/helloworld/ |
或
<AIR for TV installation directory>/products/stagecraft/source/ae/edk/process/ |
将其复制到:
<AIR for TV installation directory>/products/stagecraft/thirdparty-private/<yourCompany>/stagecraft-platforms/<yourPlatform> |
-
此目录与包含您的平台的 Makefile.config 文件的目录相同。
-
将 .mk 文件重命名为 PlatformEDKExtension_<您的扩展名称>.mk。AIR for TV 生成实用程序自动通过此命名约定发现 .mk 文件。
请始终使用 PlatformEDKExtension_ 作为 .mk 文件名称的开头。
-
编辑 .mk 文件中标有“REQUIRED”的部分。
进行下列必要的修改:
-
将 SC_EDK_EXTENSION_NAME 设置为扩展名称。将该变量设置为 PlatformEDKExtension_<您的扩展名称>.mk 中 <您的扩展名称> 的值。
-
将 SC_EDK_EXTENSION_PACKAGE 设置为扩展软件包名称。将该值设置为在您的扩展的 ActionScript 端使用的软件包名称。
生成实用程序将该值用作扩展的扩展描述符文件中 <id> 元素的值。它还使用此值和 .ane 扩展文件名命名生成的 ANE 文件。
-
将 SC_EDK_EXTENSION_VERSION 设置为扩展的版本号。
生成实用程序将该值用作扩展的扩展描述符文件中 <versionNumber> 元素的值。
-
设置 SC_MODULE_SOURCE_DIR、SC_MODULE_SOURCE_FILES 和 SC_ADDITIONAL_MODULE_OBJ_SUBDIRS 以指定 AIR for TV 提供的本机实现文件。
注: 请不要从该列表中删除 ExtensionBridge.cpp。请删除 HelloWorld 或 Process 扩展实现文件。通常,不要将您的扩展的源文件添加到该列表中。例如:
SC_MODULE_SOURCE_DIR := $(SC_SOURCE_DIR_EDK) SC_MODULE_SOURCE_FILES := ExtensionBridge.cpp |
设置 SC_PLATFORM_SOURCE_DIR 和 SC_PLATFORM_SOURCE_FILES 以指定您的扩展的本机实现文件。例如:
SC_PLATFORM_SOURCE_DIR := $(SC_PLATFORM_MAKEFILE_DIR)/edk/myExtension/native SC_PLATFORM_SOURCE_FILES := \ MyExtension.cpp \ helper\MyHelperClass1.cpp \ helper\MyHelperClass2.cpp |
将 SC_EDK_AS_SOURCE_DIR 设置为包含您的扩展的实际(而非存根)实现的 ActionScript 文件的目录。例如:
SC_EDK_AS_SOURCE_DIR := $(SC_PLATFORM_MAKEFILE_DIR)/edk/myExtension/as/real |
注: 该目录是您的 ActionScript 软件包的基本目录。例如,假定有一个名为 tv.adobe.extension.example 的 ActionScript 软件包。目录 tv、adobe、extension 和 example 是 SC_EDK_AS_SOURCE_DIR 的后续子目录。
设置 SC_EDK_AS_CLASSES 以列出实际 ActionScript 实现定义的每个 ActionScript 类。例如:
SC_EDK_AS_CLASSES := MyExtension \ MyHelperClass1 \ MyHelperClass2 |
将 SC_EDK_AS_SOURCE_DIR_AUTHORING 设置为包含您的扩展的存根或模拟器实现的 ActionScript 文件的目录。例如:
SC_EDK_AS_SOURCE_DIR_AUTHORING := $(SC_PLATFORM_MAKEFILE_DIR)/edk/myExtension/as/stub |
注: 该目录是您的 ActionScript 软件包的基本目录。例如,假定有一个名为 tv.adobe.extension.example 的 ActionScript 软件包。目录 tv、adobe、extension 和 example 是 SC_EDK_AS_SOURCE_DIR_AUTHORING 的后续子目录。
设置 SC_EDK_AS_CLASSES_AUTHORING 以列出存根或模拟器 ActionScript 实现定义的每个 ActionScript 类。例如:
SC_EDK_AS_CLASSES_AUTHORING := MyExtension \ MyHelperClass1 \ MyHelperClass2 |
安装第三方库
生成 AIR for TV 需要某些第三方库。
如果您仅生成您的扩展模块,而不是生成所有 AIR for TV,则需要的库有:
AIR 3 SDK
从 http://www.adobe.com/products/air/sdk/ 中选择下载 Mac OS X。
创建一个目录以包含 .tbz2 文件的内容。例如:
/usr/AIRSDK |
将 .tbz2 文件的内容解压到此目录中。
tar jxf AdobeAIRSDK.tbz2 |
设置 PATH 环境变量以包括 AIR SDK bin 目录。在本示例中,该 bin 目录是 /usr/AIRSDK/bin。
Open Source Flex® SDK。
从 http://opensource.adobe.com/wiki/display/flexsdk/Downloads 下载 Open Source Flex SDK 最新发行版的 ZIP 文件。
创建一个目录以包含 ZIP 文件的内容。例如:
/usr/flexSDK |
将 ZIP 文件的内容解压到此目录中。
unzip flex_sdk_4.5.1.21328_mpl.zip |
设置 PATH 环境变量以包括 Flex SDK bin 目录。在本示例中,该 bin 目录是 /usr/flexSDK/bin。
Java运行时。Flex SDK 需要最新的 Java 运行时。如果您的开发系统还不具有 Java 运行时,请访问 http://www.java.com/en/download/manual.jsp 获取下载包和安装说明。
设置 PATH 环境变量以包括 Java bin 目录。
运行生成实用程序
具体说来,在生成扩展时,生成实用程序在 Makefile.config 中使用下列生成变量:
-
SC_ZIP
-
SC_UNZIP
-
SC_PLATFORM_NAME
-
SC_PLATFORM_ARCH
在创建您的平台的 Makefile.config 文件和您的扩展的 .mk 文件后,您可以使用生成实用程序执行下列操作:
-
生成 AIR for TV 的所有组件。
-
仅生成您的扩展模块。
-
确保已设置环境变量 SC_BUILD_MODE 和 SC_PLATFORM。
-
如果您使用自己创建的证书对您的扩展进行签名,请设置环境变量 SC_EDK_ANE_CERT_FILE 和 SC_EDK_ANE_CERT_PASSWD。
将 SC_EDK_ANE_CERT_FILE 设置为您的证书的相对或绝对路径。相对路径相对于生成目录 <AIR for TV 安装目录>/stagecraft/build/linux。
将 SC_EDK_ANE_CERT_PASSWD 设置为该证书的密码。
如果您不设置这些环境变量,生成实用程序将使用默认的虚假证书,并且显示警告消息。该虚假证书仅适用于测试。
-
更改到目录:
<AIR for TV installation directory>/products/stagecraft/build/linux
输入以下命令:
make |
要仅生成您的扩展模块,请执行下列操作:
-
确保已设置环境变量 SC_BUILD_MODE 和 SC_PLATFORM。
-
如果您使用自己创建的证书对您的扩展进行签名,请如前面的步骤所述,设置环境变量 SC_EDK_ANE_CERT_FILE 和 SC_EDK_ANE_CERT_PASSWD。
-
更改到目录 stagecraft/build/linux。
-
输入以下命令:
make PlatformEDKExtension_<your extension name> |
您可以用以下命令删除以前为您的扩展生成的所有对象:
make clean-PlatformEDKExtension_<your extension name> |
您可以用以下命令删除以前为您的扩展生成的所有对象,然后重新生成这些对象:
make rebuild-PlatformEDKExtension_<your extension name> |
重要说明: 如果您的生成计算机使用了防火墙,则生成实用程序有时会失败。防火墙可能禁止访问 ADT 在将本机扩展打包为 ANE 文件时使用的时间戳服务器。这一失败会产生以下错误输出:
Could not generate timestamp: Connection timed out |
要避免该失败,请修改生成实用程序使用的 ADT 命令。编辑以下目录中的文件 extension.mk:
<AIR for TV installation directory>/stagecraft/source/ae/edk/ |
查找以下行:
$(SC_EXEC_CMD) $(SC_ADT) -package \ |
将参数 -tsa none 添加至该命令,如下所示:
$(SC_EXEC_CMD) $(SC_ADT) -package-tsa none\ |
生成实用程序扩展输出
生成实用程序为您的扩展创建两个文件。它将这些文件放入下列目录之一,具体取决于您为 SC_BUILD_MODE 指定了 debug 还是 release:
<AIR for TV installation directory>/build/stagecraft/linux/<yourPlatform>/debug/bin <AIR for TV installation directory>/build/stagecraft/linux/<yourPlatform>/release/bin |
生成实用程序为您的扩展创建的文件有:
-
一个 ZIP 文件,包含要在设备上部署的设备绑定扩展。
-
一个 ANE 文件,包含存根或模拟器扩展。AIR 应用程序开发人员使用该 ANE 文件来生成他们的应用程序。他们还使用它在使用 ADL 的台式计算机上测试他们的应用程序。他们还将该 ANE 文件与他们的应用程序一起打包为 AIRN 软件包。
同时生成存根和模拟器扩展
有时,除了实际扩展以外,您还想同时生成存根和模拟器扩展。通常,您指示 AIR 应用程序开发人员执行以下操作:
-
使用模拟器扩展在台式计算机上进行测试。
-
将存根扩展与他们的应用程序一起打包为 AIRN 软件包。
要同时生成存根和模拟器扩展,请执行以下操作:
-
创建存根扩展及其 .mk 文件。确保您可以生成存根扩展和实际扩展。
-
为您的模拟器实现创建一个目录,该目录需要是您的存根实现目录的兄弟目录。例如:
<AIR for TV installation directory>/products/stagecraft/thirdparty-private/CompanyA/stagecraft-platforms/PlatformB/edk/myExtension/as/stub
<AIR for TV installation directory>/products/stagecraft/thirdparty-private/CompanyA/stagecraft-platforms/PlatformB/edk/myExtension/as/simulator
-
制作您的扩展的 .mk 文件的副本。
-
在该副本中,编辑 SC_EDK_AS_SOURCE_DIR_AUTHORING 和 SC_EDK_AS_CLASSES_AUTHORING 的值。对这些值进行适当的设置,以反映您的模拟器实现目录和类。
-
重命名您的扩展的原始 .mk 文件,以保证它的安全。然后,将该副本重命名为您的扩展的 .mk 文件名:PlatformEDKExtension_<您的扩展名称>.mk。
-
将您的平台的 bin 目录中的存根 ANE 文件移至某个安全的位置。否则,下一步操作会覆盖该文件。
-
运行生成实用程序以生成实际扩展和您的模拟器扩展。