AIR for TV 扩展示例

Adobe® AIR® for TV 提供了多个本机扩展示例。本机实现是使用 C++ 编写的,并且使用了 AIR for TV 扩展开发工具包 (EDK)。EDK 分发给在其产品中包括 AIR for TV 的设备制造商和单片机制造商。有关 AIR for TV EDK 和如何创建 AIR for TV 扩展的详细信息,请参阅 构建 AIR for TV 本机扩展

作为 AIR for TV 扩展开发人员,您可以:

  • 复制这些示例,将其作为您的扩展的起点。

  • 请参见这些示例中的代码样例,了解如何使用各种 C API 扩展函数以及 ActionScript ExtensionContext 类。

  • 复制其中一个示例的生成文件,作为创建您的扩展的生成文件的起点。

HelloWorld 示例

HelloWorld 示例位于 AIR for TV 分发包的下列目录:

<AIR for TV installation directory>/products/stagecraft/source/ae/edk/helloworld
HelloWorld 示例是一个简单的扩展,其目的是阐明基本扩展行为。它完成下列工作:
  • 使用 ExtensionContext.call() 方法将一个字符串从 ActionScript 端传递给本机实现。

  • 将一个字符串从本机实现返回给 ActionScript 端。

  • 在本机实现中启动一个线程,以便向 ActionScript 端发送异步事件。

下表介绍了每个文件及其相对于 helloworld/ 目录的位置:

文件

说明

HelloWorld.as

所在目录:

as/device/src/tv/adobe/extension/example/

定义 HelloWorld 类的实际(而非存根)扩展的 ActionScript 端。它完成下列工作:

  • 创建 ExtensionContext 实例。

  • 定义该扩展的 ActionScript API: Hello() StartCount()

  • 侦听 ExtensionContext 实例上的事件,并且将这些事件重新调度给 HelloWorld 实例的侦听器。

HelloWorld.as

所在目录:

as/distributable/src/tv/adobe/extension/example/

定义 HelloWorld 类的存根扩展的 ActionScript。这一仅包含 ActionScript 的存根定义了该扩展的 ActionScript API: Hello() StartCount() 。不过,存根实现不调用本机函数。

HelloWorldExtensionClient.as

所在目录:

client/src

使用该扩展的 AIR 应用程序。AIR 应用程序是扩展的客户端。它完成下列工作:

  • 创建 HelloWorld 类的实例。

  • 侦听 HelloWorld 实例上的事件。

  • 调用 HelloWorld 实例的 Hello() StartCount() API。

HelloWorldExtensionClient-app.xml

所在目录:

client/src

AIR 应用程序描述符文件。包括 extensionID 值为 tv.adobe.extension.example.HelloWorld <extensions> 元素。

HelloWorld.h

所在目录:

native/

HelloWorld 类的 C++ 头文件。

HelloWorld.cpp

所在目录:

native/

HelloWorld 类的 C++ 实现文件。该实现完成下列工作:

  • 定义 FREFunction Hello() ,该函数将它的字符串参数写入控制台。它还返回字符串“Hello from extensionland”。

  • 定义 FREFunction StartCount() ,该函数启动一个异步线程,以便每 500 毫秒向 ExtensionContext 实例发送一个事件。

HelloWorldExtension.cpp

所在目录:

native/

包含下列 C API 扩展函数的实现:

  • FREInitializer()

  • FREContextInitializer()

  • FREContextFinalizer()

  • FREFinalizer()

PlatformEDKExtension_HelloWorld.mk

HelloWorld 扩展的生成文件。

ExtensionUtil.h

所在目录:

<AIR for TV 安装目录> /products/stagecraft/source/ae/edk

包含便于编写 C 或 C++ 实现代码的宏。

ExtensionBridge.cpp

所在目录:

<AIR for TV 安装目录> /products/stagecraft/source/ae/edk

AIR for TV 扩展模块实现。当您生成您的本机实现时,必须在您的内部版本中包括此源文件。

phonyEdkAneCert.p12

所在目录:

<AIR for TV 安装目录> /products/stagecraft/source/ae/edk

一个虚假证书,生成实用程序使用该证书将 HelloWorld 扩展打包为 ANE 文件。

extension.mk

所在目录:

<AIR for TV 安装目录> /products/stagecraft/source/ae/edk

扩展模块的生成文件。请不要修改此文件。

Process 示例

Process 示例位于 AIR for TV 分发包的以下目录中:

<AIR for TV installation directory>/products/stagecraft/source/ae/edk/process

Process 扩展允许 AIR 应用程序操纵 Linux 进程,包括下列功能:

  • 衍生 Linux 进程。该进程执行 AIR 应用程序指定的 Linux 命令。

  • 获取该进程的进程标识符。

  • 检查该进程是否已完成。

  • 接收指示该进程已完成的事件。

  • 从已完成的进程获取返回码。

  • 接收指示该进程已经写入 stdout stderr 的事件。

  • stdout stderr 检索输出字符串。

  • 将字符串写入 stdin

  • 向进程发送中断信号。

  • 终止进程。

下表介绍了每个文件及其相对于 process/ 目录的位置:

文件

说明

Process.as

所在目录:

as/device/src/tv/adobe/extension/process/example/

定义 Process 类的实际(而非存根)扩展的 ActionScript 端。它完成下列工作:

  • 创建 ExtensionContext 实例。

  • 定义扩展的 ActionScript API。

  • 侦听 ExtensionContext 实例上的事件,并且将这些事件重新调度给 Process 实例的侦听器。

ProcessEvent.as

所在目录:

as/device/src/tv/adobe/extension/process/example/

定义 ProcessEvent 类,该类派生自 Event 类。

AIR 应用程序 ActionScript 侦听这些 ProcessEvent 通知。

Process.as

所在目录:

as/distributable/src/tv/adobe/extension/process/example/

定义 Process 类的存根扩展的 ActionScript。这一仅包含 ActionScript 的存根定义了该扩展的 ActionScript API。不过,存根实现不调用本机函数。

ProcessExtensionClient.as

所在目录:

client/simple/src

使用该扩展的 AIR 应用程序。AIR 应用程序是扩展的客户端。它提供了一个说明 AIR 应用程序如何使用 Process 扩展 API 的示例。

ProcessExtensionClient-app.xml

所在目录:

client/simple/src

AIR 应用程序描述符文件。包括 extensionID 值为 tv.adobe.extension.process.Process <extensions> 元素。

Process.h

所在目录:

native/

抽象 Process 类的 C++ 头文件。

ProcessLinux.h

所在目录:

native/

具体 ProcessLinux 类的 C++ 头文件。

ProcessLinux 类派生自 Process 类。它声明 Process 类的 Linux 实现的私有方法和数据。

ProcessLinux.cpp

所在目录:

native/

ProcessLinux 类的 C++ 实现文件。该实现包括下列功能:

  • 定义 FREFunction 函数。这些函数使用 Linux 系统调用执行某些操作(例如,创立和执行 Linux 进程)以及与 stdin stdout stderr 交互。

  • 监控衍生进程的状态。该实现创建一个线程以达到此目的。该线程使用 C 扩展 API FREDispatchStatusEventAsync() 来报告事件。

  • 定义帮助器函数,以便创建用于从 FREFunction 函数向 ActionScript 端返回信息的 FREObject 变量。这些帮助器函数使用 C API 扩展函数,如 FRENewObjectFromBool() FRENewObjectFromUTF8() FRENewObjectFromUint32()

ProcessExtension.cpp

所在目录:

native/

包含下列 C API 扩展函数的实现:

  • FREInitializer()

  • FREContextInitializer()

  • FREContextFinalizer()

  • FREFinalizer()

PlatformEDKExtension_Process.mk

Process 扩展的生成文件。

ExtensionUtil.h

所在目录:

<AIR for TV 安装目录> /products/stagecraft/source/ae/edk

包含便于编写 C 或 C++ 实现代码的宏。

ExtensionBridge.cpp

所在目录:

<AIR for TV 安装目录> /products/stagecraft/source/ae/edk

AIR for TV 扩展模块实现。当您生成您的本机实现时,必须在您的内部版本中包括此源文件。

phonyEdkAneCert

所在目录:

<AIR for TV 安装目录> /products/stagecraft/source/ae/edk

一个虚假证书,生成实用程序使用该证书将 Process 扩展打包为 ANE 文件。

extension.mk

所在目录:

<AIR for TV 安装目录> /products/stagecraft/source/ae/edk

扩展模块的生成文件。请不要修改此文件。

在 x86Desktop 平台上构建扩展示例

若要在 x86Desktop 平台上构建 Hello World 或 Process 扩展示例,请先为 x86Desktop 平台生成 AIR for TV 分发包。有关说明,请参阅 Adobe AIR for TV 快速入门 (PDF) 中的 Linux 快速入门

注: 确保已安装 AIR 3 SDK、开源 Flex® SDK 和 Java™ 运行时,并在 PATH 环境变量中包含 bin 目录。为 AIR for TV 构建本机扩展依赖这些库。

接下来,将构建 Hello World 或 Process 扩展示例添加到 x86Desktop 构建中。请执行以下操作:

  1. 更改到目录:

    <AIR for TV installation directory>/products/stagecraft/build/linux/platforms/x86Desktop
  2. 链接到要构建的扩展的 .mk 文件。例如:

    ln -s <AIR for TV installation directory>/products/stagecraft/source/ae/edk/helloworld/PlatformEDKExtension_HelloWorld.mk
  3. 更改到目录:

     <AIR for TV installation directory>/products/stagecraft/build/linux
  4. 生成分发包,其中包含扩展示例:

    make

    也可以只构建扩展示例。例如:

    make PlatformEDKExtension_HelloWorld.mk

生成实用程序为每个扩展示例创建两个文件。它将这些文件放入下列目录之一,具体取决于您为 SC_BUILD_MODE 指定了 debug 还是 release:

<AIR for TV installation directory>/build/stagecraft/linux/x86Desktop/debug/bin  
<AIR for TV installation directory>/build/stagecraft/linux/x86Desktop/release/bin

生成实用程序为扩展示例创建的文件包括:

  • 一个 ZIP 文件,包含设备捆绑扩展。

  • 一个 ANE 文件,包含存根或模拟器扩展。