构建 AIR for TV 本机扩展

当您构建 AIR for TV 本机扩展时,您将构建两个版本的扩展:

  • 设备绑定扩展。

  • 存根或模拟器扩展。

设备绑定扩展包括:

  • 通常使用 C 或 C++ 编写的本机实现。

  • 调用该本机实现的函数的实际 ActionScript 实现。

存根或模拟器扩展是仅包含 ActionScript 的实现。

有关实际、存根和模拟器 ActionScript 实现的详细信息,请参阅 设备绑定扩展和存根扩展

为扩展创建签名证书

您可以选择对本机扩展进行数字签名。对扩展签名是可选的。

默认情况下,AIR for TV 生成实用程序使用虚假证书。该虚假证书仅适用于测试。有关创建证书颁发机构证书的信息,请参阅 为本机扩展创建签名证书

编写本机实现

对于 AIR for TV 而言,您的扩展的本机实现是 AIR for TV 模块。有关 AIR for TV 模块的一般信息(包括有关生成模块的详细信息),请参阅 优化和集成 Adobe AIR for TV (PDF)

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

    请不要修改此扩展模块实现。当您生成您的本机实现时,必须在您的内部版本中包括此源文件。

  • 生成您的设备绑定扩展所需的生成文件支持。有关详细信息,请参阅 创建 .mk 文件 运行生成实用程序

注: 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 文件在放入以下目录中:

<AIR for TV installation directory>/products/stagecraft/thirdparty-private/CompanyA/stagecraft-platforms/PlatformB/edk/myExtension/native

类似地,将您的实际 ActionScript 实现的 .as 文件放入 <您的平台> /edk 目录或其子目录中。例如:

<AIR for TV installation directory>/products/stagecraft/thirdparty-private/CompanyA/stagecraft-platforms/PlatformB/edk/myExtension/as/real

另外,请将您的存根或模拟器 ActionScript 实现的 .as 文件放入 <您的平台> /edk 目录或其子目录中。例如:

<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 
注: AIR for TV 提供的扩展示例位于目录 <AIR for TV 安装目录> /products/stagecraft/source/edk 中。请不要将您的扩展文件放入此目录中。

创建 .mk 文件

与其他 AIR for TV 模块一样,要生成您的扩展模块,您首先需要创建 .mk 文件。.mk 文件的主要用途是指定要生成的源文件。

要创建 .mk 文件,请执行下列操作:

  1. 复制以下目录中的 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 文件的目录相同。请参阅 优化和集成 Adobe AIR for TV (PDF) 中“ 编码、生成和测试 ”一章中的“ 创建平台 Makefile.config ”。

  2. 将 .mk 文件重命名为 PlatformEDKExtension_ <您的扩展名称> .mk。AIR for TV 生成实用程序自动通过此命名约定发现 .mk 文件。

    请始终使用 PlatformEDKExtension_ 作为 .mk 文件名称的开头。

  3. 编辑 .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 需要某些第三方库。有关这些库的详细信息,请参阅 Adobe AIR for TV 快速入门 (PDF) 中的“ 安装第三方软件 ”。

如果您仅生成您的扩展模块,而不是生成所有 AIR for TV,则需要的库有:

  • AIR 3 SDK

    http://www.adobe.com/cn/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 目录。

运行生成实用程序

可在以下位置查看有关如何使用 AIR for TV 生成实用程序的详细信息:

具体说来,在生成扩展时,生成实用程序在 Makefile.config 中使用下列生成变量:

  • SC_ZIP

  • SC_UNZIP

  • SC_PLATFORM_NAME

  • SC_PLATFORM_ARCH

在创建您的平台的 Makefile.config 文件和您的扩展的 .mk 文件后,您可以使用生成实用程序执行下列操作:

  • 生成 AIR for TV 的所有组件。

  • 仅生成您的扩展模块。

要生成 AIR for TV 的所有组件,请执行下列操作:
  1. 确保已设置环境变量 SC_BUILD_MODE SC_PLATFORM

  2. 如果您使用自己创建的证书对您的扩展进行签名,请设置环境变量 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 设置为该证书的密码。

    如果您不设置这些环境变量,生成实用程序将使用默认的虚假证书,并且显示警告消息。该虚假证书仅适用于测试。

  3. 更改到目录:

    <AIR for TV installation directory>/products/stagecraft/build/linux
  4. 输入以下命令:

    make

要仅生成您的扩展模块,请执行下列操作:

  1. 确保已设置环境变量 SC_BUILD_MODE SC_PLATFORM

  2. 如果您使用自己创建的证书对您的扩展进行签名,请如前面的步骤所述,设置环境变量 SC_EDK_ANE_CERT_FILE SC_EDK_ANE_CERT_PASSWD

  3. 更改到目录 stagecraft/build/linux。

  4. 输入以下命令:

    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 软件包。

要同时生成存根和模拟器扩展,请执行以下操作:

  1. 创建存根扩展及其 .mk 文件。确保您可以生成存根扩展和实际扩展。

  2. 为您的模拟器实现创建一个目录,该目录需要是您的存根实现目录的兄弟目录。例如:

    <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
  3. 制作您的扩展的 .mk 文件的副本。

  4. 在该副本中,编辑 SC_EDK_AS_SOURCE_DIR_AUTHORING SC_EDK_AS_CLASSES_AUTHORING 的值。对这些值进行适当的设置,以反映您的模拟器实现目录和类。

  5. 重命名您的扩展的原始 .mk 文件,以保证它的安全。然后,将该副本重命名为您的扩展的 .mk 文件名:PlatformEDKExtension_ <您的扩展名称> .mk。

  6. 将您的平台的 bin 目录中的存根 ANE 文件移至某个安全的位置。否则,下一步操作会覆盖该文件。

  7. 运行生成实用程序以生成实际扩展和您的模拟器扩展。