構建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 文件達到三個目的:
- 編譯使用本機擴展的 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 文件移至某個安全的位置。否則,下一步操作會覆蓋該文件。
-
運行生成實用程序以生成實際擴展和您的模擬器擴展。