构建Adobe AIR for TV本机扩展

移动开发
本教程向您使用简单的代码为构建Adobe AIR for TV本机扩展。除了向您展示在所有原生扩展(AIR、ActionScript 3和Flash Builder)中通用的代码和技能,本教程还介绍了Adobe AIR for TV原生代码。

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

  • 设备绑定扩展。
  • 存根或模拟器扩展。

设备绑定扩展包括:

  • 通常使用 C 或 C++ 编写的本机实现。
  • 调用该本机实现的函数的实际 ActionScript 实现。
  • 存根或模拟器扩展是仅包含 ActionScript 的实现。

设备绑定扩展和存根扩展

当您为 Adobe® AIR® for TV 设备编写本机扩展时,您需要创建该扩展的两个变体:

  • 设备绑定扩展,也称为实际扩展。
  • 存根扩展。

此外,您还可以根据情况提供第三个变体:模拟器扩展。

设备绑定扩展

设备绑定扩展是设备上安装的变体。ActionScript 端调用本机实现的函数。您生成此实际 ActionScript 实现以及本机实现,并创建一个 ZIP 文件。设备制造商将此文件解压缩到设备上的特定目录中。

存根扩展

存根本机扩展具有与实际 ActionScript 实现相同的 ActionScript 接口,但是 ActionScript 方法不做任何事情。存根扩展是仅包含 ActionScript 的扩展;它没有本机实现。当您生成存根 ActionScript 实现时,您将创建一个 ANE 文件。

AIR 应用程序开发人员使用此 ANE 文件达到三个目的:

  1. 编译使用本机扩展的 AIR 应用程序。
  2. 在台式计算机而不是目标设备上运行 AIR 应用程序。
  3. 包括在 AIR 应用程序软件包中。

模拟器扩展

可选的第三种变体是模拟器扩展。此实现也具有与实际 ActionScript 实现相同的 ActionScript 接口。不过,它的 ActionScript 方法在 ActionScript 中模拟扩展的行为。像存根扩展一样,模拟器扩展是仅包含 ActionScript 的扩展;它没有本机实现。当您生成模拟器 ActionScript 实现时,您将创建一个 ANE 文件。

AIR 应用程序开发人员可以使用模拟器扩展 ANE 文件编译他们的应用程序。与使用存根扩展进行测试相比,他们可以使用此 ANE 文件在台式计算机上更加彻底地测试应用程序。他们还可以将模拟器扩展包括在 AIR 应用程序软件包中。

注: 您可以创建一个模拟器扩展,作为存根扩展的替代品或辅助品。

设备绑定扩展、存根扩展和模拟器扩展的使用

AIR 应用程序开发人员使用存根和模拟器扩展完成下列工作:

  • 使用存根扩展或模拟器扩展编译 AIR 应用程序。
  • 使用存根扩展或模拟器扩展在台式计算机上测试应用程序。
  • 将存根扩展或模拟器扩展打包到它们的可分发 AIR 应用程序中。

注: 如果您为 AIR 应用程序开发人员同时提供了存根和模拟器扩展,请告诉他们将哪个扩展与他们的可分发应用程序一起打包。

当 AIR 应用程序在设备上运行时,AIR for TV 将执行下列操作:

  1. 在设备上寻找相应的设备绑定(实际)扩展。
  2. 如果该扩展存在,则 AIR for TV 会加载它以供 AIR 应用程序使用。
  3. 如果该扩展不存在,AIR for TV 将改为加载与应用程序一起打包的存根或模拟器扩展。

为扩展创建签名证书

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

默认情况下,AIR for TV 生成实用程序使用虚假证书。该虚假证书仅适用于测试.

编写本机实现

对于 AIR for TV 而言,您的扩展的本机实现是 AIR for TV 模块。

AIR for TV 分发包提供了扩展开发工具包 (EDK),用于编写和生成您的扩展的本机实现。

EDK 包括下列部分:

C 扩展 API 头文件:

  1. <AIR for TV installation directory>/products/stagecraft/include/ae/edk/FlashRuntimeExtensions.h 

该头文件声明本机实现使用的 C 类型和函数。

一个位于以下源文件中的扩展模块实现:

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

  <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

注: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>
  1. 此目录与包含您的平台的 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 需要某些第三方库。

如果您仅生成您的扩展模块,而不是生成所有 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 的所有组件。

  • 仅生成您的扩展模块。

要生成 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

 输入以下命令:

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

责任编辑:佚名 来源: Adobe
相关推荐

2011-11-16 16:21:09

AdobeAIR

2011-11-16 15:14:57

AdobeAIRiOS设备

2012-03-09 10:46:35

Adobe AIR是什Adobe AIRAIR

2009-06-25 10:46:22

Silverlight

2009-01-18 09:20:49

AIRAdobeFlex

2012-03-15 09:55:23

Adobe AIR安裝

2010-10-29 09:28:52

Adobe AirAdobe MAXflash

2010-08-18 08:21:49

Adobe AIRAndroid

2012-07-06 13:45:21

跨平台工具Adobe AirFlex

2011-11-17 15:31:12

AdobeAIR

2012-03-09 13:52:28

Adob​​e AIRiOS

2012-02-28 13:52:45

Adobe AIRAndroidFlash

2011-11-17 15:17:37

AdobeAIR调试性能

2012-03-09 13:26:53

2011-11-16 15:47:04

AdobeAIRiOS应用

2012-03-15 09:46:41

UbuntuLinux安装Adobe AIR

2010-10-27 14:03:11

Adobeair 2.5苹果

2011-11-17 15:01:37

AdobeAIR移动应用

2011-11-16 13:47:05

2011-11-16 14:20:43

Adobe AIR
点赞
收藏

51CTO技术栈公众号