构建 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. 运行生成实用程序以生成实际扩展和您的模拟器扩展。