構(gòu)建Adobe AIR for TV本機(jī)擴(kuò)展
當(dāng)您構(gòu)建 AIR for TV 本機(jī)擴(kuò)展時(shí),您將構(gòu)建兩個(gè)版本的擴(kuò)展:
- 設(shè)備綁定擴(kuò)展。
- 存根或模擬器擴(kuò)展。
設(shè)備綁定擴(kuò)展包括:
- 通常使用 C 或 C++ 編寫的本機(jī)實(shí)現(xiàn)。
- 調(diào)用該本機(jī)實(shí)現(xiàn)的函數(shù)的實(shí)際 ActionScript 實(shí)現(xiàn)。
- 存根或模擬器擴(kuò)展是僅包含 ActionScript 的實(shí)現(xiàn)。
設(shè)備綁定擴(kuò)展和存根擴(kuò)展
當(dāng)您為 Adobe® AIR® for TV 設(shè)備編寫本機(jī)擴(kuò)展時(shí),您需要?jiǎng)?chuàng)建該擴(kuò)展的兩個(gè)變體:
- 設(shè)備綁定擴(kuò)展,也稱為實(shí)際擴(kuò)展。
- 存根擴(kuò)展。
此外,您還可以根據(jù)情況提供第三個(gè)變體:模擬器擴(kuò)展。
設(shè)備綁定擴(kuò)展
設(shè)備綁定擴(kuò)展是設(shè)備上安裝的變體。ActionScript 端調(diào)用本機(jī)實(shí)現(xiàn)的函數(shù)。您生成此實(shí)際 ActionScript 實(shí)現(xiàn)以及本機(jī)實(shí)現(xiàn),并創(chuàng)建一個(gè) ZIP 文件。設(shè)備制造商將此文件解壓縮到設(shè)備上的特定目錄中。
存根擴(kuò)展
存根本機(jī)擴(kuò)展具有與實(shí)際 ActionScript 實(shí)現(xiàn)相同的 ActionScript 接口,但是 ActionScript 方法不做任何事情。存根擴(kuò)展是僅包含 ActionScript 的擴(kuò)展;它沒有本機(jī)實(shí)現(xiàn)。當(dāng)您生成存根 ActionScript 實(shí)現(xiàn)時(shí),您將創(chuàng)建一個(gè) ANE 文件。
AIR 應(yīng)用程序開發(fā)人員使用此 ANE 文件達(dá)到三個(gè)目的:
- 編譯使用本機(jī)擴(kuò)展的 AIR 應(yīng)用程序。
- 在臺式計(jì)算機(jī)而不是目標(biāo)設(shè)備上運(yùn)行 AIR 應(yīng)用程序。
- 包括在 AIR 應(yīng)用程序軟件包中。
模擬器擴(kuò)展
可選的第三種變體是模擬器擴(kuò)展。此實(shí)現(xiàn)也具有與實(shí)際 ActionScript 實(shí)現(xiàn)相同的 ActionScript 接口。不過,它的 ActionScript 方法在 ActionScript 中模擬擴(kuò)展的行為。像存根擴(kuò)展一樣,模擬器擴(kuò)展是僅包含 ActionScript 的擴(kuò)展;它沒有本機(jī)實(shí)現(xiàn)。當(dāng)您生成模擬器 ActionScript 實(shí)現(xiàn)時(shí),您將創(chuàng)建一個(gè) ANE 文件。
AIR 應(yīng)用程序開發(fā)人員可以使用模擬器擴(kuò)展 ANE 文件編譯他們的應(yīng)用程序。與使用存根擴(kuò)展進(jìn)行測試相比,他們可以使用此 ANE 文件在臺式計(jì)算機(jī)上更加徹底地測試應(yīng)用程序。他們還可以將模擬器擴(kuò)展包括在 AIR 應(yīng)用程序軟件包中。
注: 您可以創(chuàng)建一個(gè)模擬器擴(kuò)展,作為存根擴(kuò)展的替代品或輔助品。
設(shè)備綁定擴(kuò)展、存根擴(kuò)展和模擬器擴(kuò)展的使用
AIR 應(yīng)用程序開發(fā)人員使用存根和模擬器擴(kuò)展完成下列工作:
- 使用存根擴(kuò)展或模擬器擴(kuò)展編譯 AIR 應(yīng)用程序。
- 使用存根擴(kuò)展或模擬器擴(kuò)展在臺式計(jì)算機(jī)上測試應(yīng)用程序。
- 將存根擴(kuò)展或模擬器擴(kuò)展打包到它們的可分發(fā) AIR 應(yīng)用程序中。
注: 如果您為 AIR 應(yīng)用程序開發(fā)人員同時(shí)提供了存根和模擬器擴(kuò)展,請告訴他們將哪個(gè)擴(kuò)展與他們的可分發(fā)應(yīng)用程序一起打包。
當(dāng) AIR 應(yīng)用程序在設(shè)備上運(yùn)行時(shí),AIR for TV 將執(zhí)行下列操作:
- 在設(shè)備上尋找相應(yīng)的設(shè)備綁定(實(shí)際)擴(kuò)展。
- 如果該擴(kuò)展存在,則 AIR for TV 會加載它以供 AIR 應(yīng)用程序使用。
- 如果該擴(kuò)展不存在,AIR for TV 將改為加載與應(yīng)用程序一起打包的存根或模擬器擴(kuò)展。
為擴(kuò)展創(chuàng)建簽名證書
您可以選擇對本機(jī)擴(kuò)展進(jìn)行數(shù)字簽名。對擴(kuò)展簽名是可選的。
默認(rèn)情況下,AIR for TV 生成實(shí)用程序使用虛假證書。該虛假證書僅適用于測試.
編寫本機(jī)實(shí)現(xiàn)
對于 AIR for TV 而言,您的擴(kuò)展的本機(jī)實(shí)現(xiàn)是 AIR for TV 模塊。
AIR for TV 分發(fā)包提供了擴(kuò)展開發(fā)工具包 (EDK),用于編寫和生成您的擴(kuò)展的本機(jī)實(shí)現(xiàn)。
EDK 包括下列部分:
C 擴(kuò)展 API 頭文件:
- <AIR for TV installation directory>/products/stagecraft/include/ae/edk/FlashRuntimeExtensions.h
該頭文件聲明本機(jī)實(shí)現(xiàn)使用的 C 類型和函數(shù)。
一個(gè)位于以下源文件中的擴(kuò)展模塊實(shí)現(xiàn):
- <AIR for TV installation directory>/products/stagecraft/source/ae/edk/ExtensionBridge.cpp
請不要修改此擴(kuò)展模塊實(shí)現(xiàn)。當(dāng)您生成您的本機(jī)實(shí)現(xiàn)時(shí),必須在您的內(nèi)部版本中包括此源文件。
生成您的設(shè)備綁定擴(kuò)展所需的生成文件支持。
注: AIR for TV EDK 要求將 FREInitializer() 方法命名為 Initializer(),將 FREFinalizer() 方法命名為 Finalizer()。
將 ActionScript 和本機(jī)代碼放入目錄結(jié)構(gòu)中
設(shè)備綁定擴(kuò)展是特定于硬件平臺的。當(dāng)您開發(fā)設(shè)備綁定擴(kuò)展時(shí),請將您的文件放入您的平臺的子目錄中。此子目錄位于以下目錄中:
<AIR for TV installation directory>/products/stagecraft/thirdparty-private/<yourCompany>/stagecraft-platforms/<yourPlatform>/edk |
例如,公司 A 使用以下子目錄來進(jìn)行面向其平臺 B 的開發(fā)工作:
<AIR for TV installation directory>/products/stagecraft/thirdparty-private/CompanyA/stagecraft-platforms/PlatformB/edk |
請將您的 C 實(shí)現(xiàn)的頭文件和源文件放入 <您的平臺>/edk 目錄或其子目錄中。例如,將您的擴(kuò)展 .cpp 和 .h 文件在放入以下目錄中:
< |
類似地,將您的實(shí)際 ActionScript 實(shí)現(xiàn)的 .as 文件放入 <您的平臺>/edk 目錄或其子目錄中。例如:
< |
另外,請將您的存根或模擬器 ActionScript 實(shí)現(xiàn)的 .as 文件放入 <您的平臺>/edk 目錄或其子目錄中。例如:
<AIR for TV installation directory> |
注:pAIR for TV 提供的擴(kuò)展示例位于目錄 <AIR for TV 安裝目錄>/products/stagecraft/source/edk 中。請不要將您的擴(kuò)展文件放入此目錄中。
創(chuàng)建 .mk 文件
與其他 AIR for TV 模塊一樣,要生成您的擴(kuò)展模塊,您首先需要?jiǎng)?chuàng)建 .mk 文件。.mk 文件的主要用途是指定要生成的源文件。
要?jiǎng)?chuàng)建 .mk 文件,請執(zhí)行下列操作:
復(fù)制以下目錄中的 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/ |
將其復(fù)制到:
<AIR for TV installation directory>/products/stagecraft/thirdparty-private/<yourCompany>/stagecraft-platforms/<yourPlatform> |
-
此目錄與包含您的平臺的 Makefile.config 文件的目錄相同。
-
將 .mk 文件重命名為 PlatformEDKExtension_<您的擴(kuò)展名稱>.mk。AIR for TV 生成實(shí)用程序自動(dòng)通過此命名約定發(fā)現(xiàn) .mk 文件。
請始終使用 PlatformEDKExtension_ 作為 .mk 文件名稱的開頭。
-
編輯 .mk 文件中標(biāo)有“REQUIRED”的部分。
進(jìn)行下列必要的修改:
-
將 SC_EDK_EXTENSION_NAME 設(shè)置為擴(kuò)展名稱。將該變量設(shè)置為 PlatformEDKExtension_<您的擴(kuò)展名稱>.mk 中 <您的擴(kuò)展名稱> 的值。
-
將 SC_EDK_EXTENSION_PACKAGE 設(shè)置為擴(kuò)展軟件包名稱。將該值設(shè)置為在您的擴(kuò)展的 ActionScript 端使用的軟件包名稱。
生成實(shí)用程序?qū)⒃撝涤米鲾U(kuò)展的擴(kuò)展描述符文件中 <id> 元素的值。它還使用此值和 .ane 擴(kuò)展文件名命名生成的 ANE 文件。
-
將 SC_EDK_EXTENSION_VERSION 設(shè)置為擴(kuò)展的版本號。
生成實(shí)用程序?qū)⒃撝涤米鲾U(kuò)展的擴(kuò)展描述符文件中 <versionNumber> 元素的值。
-
設(shè)置 SC_MODULE_SOURCE_DIR、SC_MODULE_SOURCE_FILES 和 SC_ADDITIONAL_MODULE_OBJ_SUBDIRS 以指定 AIR for TV 提供的本機(jī)實(shí)現(xiàn)文件。
注: 請不要從該列表中刪除 ExtensionBridge.cpp。請刪除 HelloWorld 或 Process 擴(kuò)展實(shí)現(xiàn)文件。通常,不要將您的擴(kuò)展的源文件添加到該列表中。例如:
SC_MODULE_SOURCE_DIR := $(SC_SOURCE_DIR_EDK) SC_MODULE_SOURCE_FILES := ExtensionBridge.cpp |
設(shè)置 SC_PLATFORM_SOURCE_DIR 和 SC_PLATFORM_SOURCE_FILES 以指定您的擴(kuò)展的本機(jī)實(shí)現(xiàn)文件。例如:
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 設(shè)置為包含您的擴(kuò)展的實(shí)際(而非存根)實(shí)現(xiàn)的 ActionScript 文件的目錄。例如:
SC_EDK_AS_SOURCE_DIR := $(SC_PLATFORM_MAKEFILE_DIR)/edk/myExtension/as/real |
注: 該目錄是您的 ActionScript 軟件包的基本目錄。例如,假定有一個(gè)名為 tv.adobe.extension.example 的 ActionScript 軟件包。目錄 tv、adobe、extension 和 example 是 SC_EDK_AS_SOURCE_DIR 的后續(xù)子目錄。
設(shè)置 SC_EDK_AS_CLASSES 以列出實(shí)際 ActionScript 實(shí)現(xiàn)定義的每個(gè) ActionScript 類。例如:
SC_EDK_AS_CLASSES := MyExtension \ MyHelperClass1 \ MyHelperClass2 |
將 SC_EDK_AS_SOURCE_DIR_AUTHORING 設(shè)置為包含您的擴(kuò)展的存根或模擬器實(shí)現(xiàn)的 ActionScript 文件的目錄。例如:
SC_EDK_AS_SOURCE_DIR_AUTHORING := $(SC_PLATFORM_MAKEFILE_DIR)/edk/myExtension/as/stub |
注: 該目錄是您的 ActionScript 軟件包的基本目錄。例如,假定有一個(gè)名為 tv.adobe.extension.example 的 ActionScript 軟件包。目錄 tv、adobe、extension 和 example 是 SC_EDK_AS_SOURCE_DIR_AUTHORING 的后續(xù)子目錄。
設(shè)置 SC_EDK_AS_CLASSES_AUTHORING 以列出存根或模擬器 ActionScript 實(shí)現(xiàn)定義的每個(gè) ActionScript 類。例如:
SC_EDK_AS_CLASSES_AUTHORING := MyExtension \ MyHelperClass1 \ MyHelperClass2 |
安裝第三方庫
生成 AIR for TV 需要某些第三方庫。
如果您僅生成您的擴(kuò)展模塊,而不是生成所有 AIR for TV,則需要的庫有:
AIR 3 SDK
從 http://www.adobe.com/products/air/sdk/ 中選擇下載 Mac OS X。
創(chuàng)建一個(gè)目錄以包含 .tbz2 文件的內(nèi)容。例如:
/usr/AIRSDK |
將 .tbz2 文件的內(nèi)容解壓到此目錄中。
tar jxf AdobeAIRSDK.tbz2 |
設(shè)置 PATH 環(huán)境變量以包括 AIR SDK bin 目錄。在本示例中,該 bin 目錄是 /usr/AIRSDK/bin。
Open Source Flex® SDK。
從 http://opensource.adobe.com/wiki/display/flexsdk/Downloads 下載 Open Source Flex SDK 最新發(fā)行版的 ZIP 文件。
創(chuàng)建一個(gè)目錄以包含 ZIP 文件的內(nèi)容。例如:
/usr/flexSDK |
將 ZIP 文件的內(nèi)容解壓到此目錄中。
unzip flex_sdk_4.5.1.21328_mpl.zip |
設(shè)置 PATH 環(huán)境變量以包括 Flex SDK bin 目錄。在本示例中,該 bin 目錄是 /usr/flexSDK/bin。
Java運(yùn)行時(shí)。Flex SDK 需要最新的 Java 運(yùn)行時(shí)。如果您的開發(fā)系統(tǒng)還不具有 Java 運(yùn)行時(shí),請?jiān)L問 http://www.java.com/en/download/manual.jsp 獲取下載包和安裝說明。
設(shè)置 PATH 環(huán)境變量以包括 Java bin 目錄。
運(yùn)行生成實(shí)用程序
具體說來,在生成擴(kuò)展時(shí),生成實(shí)用程序在 Makefile.config 中使用下列生成變量:
-
SC_ZIP
-
SC_UNZIP
-
SC_PLATFORM_NAME
-
SC_PLATFORM_ARCH
在創(chuàng)建您的平臺的 Makefile.config 文件和您的擴(kuò)展的 .mk 文件后,您可以使用生成實(shí)用程序執(zhí)行下列操作:
-
生成 AIR for TV 的所有組件。
-
僅生成您的擴(kuò)展模塊。
-
確保已設(shè)置環(huán)境變量 SC_BUILD_MODE 和 SC_PLATFORM。
-
如果您使用自己創(chuàng)建的證書對您的擴(kuò)展進(jìn)行簽名,請?jiān)O(shè)置環(huán)境變量 SC_EDK_ANE_CERT_FILE 和 SC_EDK_ANE_CERT_PASSWD。
將 SC_EDK_ANE_CERT_FILE 設(shè)置為您的證書的相對或絕對路徑。相對路徑相對于生成目錄 <AIR for TV 安裝目錄>/stagecraft/build/linux。
將 SC_EDK_ANE_CERT_PASSWD 設(shè)置為該證書的密碼。
如果您不設(shè)置這些環(huán)境變量,生成實(shí)用程序?qū)⑹褂媚J(rèn)的虛假證書,并且顯示警告消息。該虛假證書僅適用于測試。
-
更改到目錄:
<AIR for TV installation directory>/products/stagecraft/build/linux
輸入以下命令:
make |
要僅生成您的擴(kuò)展模塊,請執(zhí)行下列操作:
-
確保已設(shè)置環(huán)境變量 SC_BUILD_MODE 和 SC_PLATFORM。
-
如果您使用自己創(chuàng)建的證書對您的擴(kuò)展進(jìn)行簽名,請如前面的步驟所述,設(shè)置環(huán)境變量 SC_EDK_ANE_CERT_FILE 和 SC_EDK_ANE_CERT_PASSWD。
-
更改到目錄 stagecraft/build/linux。
-
輸入以下命令:
make PlatformEDKExtension_<your extension name> |
您可以用以下命令刪除以前為您的擴(kuò)展生成的所有對象:
make clean-PlatformEDKExtension_<your extension name> |
您可以用以下命令刪除以前為您的擴(kuò)展生成的所有對象,然后重新生成這些對象:
make rebuild-PlatformEDKExtension_<your extension name> |
重要說明: 如果您的生成計(jì)算機(jī)使用了防火墻,則生成實(shí)用程序有時(shí)會失敗。防火墻可能禁止訪問 ADT 在將本機(jī)擴(kuò)展打包為 ANE 文件時(shí)使用的時(shí)間戳服務(wù)器。這一失敗會產(chǎn)生以下錯(cuò)誤輸出:
Could not generate timestamp: Connection timed out |
要避免該失敗,請修改生成實(shí)用程序使用的 ADT 命令。編輯以下目錄中的文件 extension.mk:
<AIR for TV installation directory>/stagecraft/source/ae/edk/ |
查找以下行:
$(SC_EXEC_CMD) $(SC_ADT) -package \ |
將參數(shù) -tsa none 添加至該命令,如下所示:
$(SC_EXEC_CMD) $(SC_ADT) -package-tsa none\ |
生成實(shí)用程序擴(kuò)展輸出
生成實(shí)用程序?yàn)槟臄U(kuò)展創(chuàng)建兩個(gè)文件。它將這些文件放入下列目錄之一,具體取決于您為 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 |
生成實(shí)用程序?yàn)槟臄U(kuò)展創(chuàng)建的文件有:
-
一個(gè) ZIP 文件,包含要在設(shè)備上部署的設(shè)備綁定擴(kuò)展。
-
一個(gè) ANE 文件,包含存根或模擬器擴(kuò)展。AIR 應(yīng)用程序開發(fā)人員使用該 ANE 文件來生成他們的應(yīng)用程序。他們還使用它在使用 ADL 的臺式計(jì)算機(jī)上測試他們的應(yīng)用程序。他們還將該 ANE 文件與他們的應(yīng)用程序一起打包為 AIRN 軟件包。
同時(shí)生成存根和模擬器擴(kuò)展
有時(shí),除了實(shí)際擴(kuò)展以外,您還想同時(shí)生成存根和模擬器擴(kuò)展。通常,您指示 AIR 應(yīng)用程序開發(fā)人員執(zhí)行以下操作:
-
使用模擬器擴(kuò)展在臺式計(jì)算機(jī)上進(jìn)行測試。
-
將存根擴(kuò)展與他們的應(yīng)用程序一起打包為 AIRN 軟件包。
要同時(shí)生成存根和模擬器擴(kuò)展,請執(zhí)行以下操作:
-
創(chuàng)建存根擴(kuò)展及其 .mk 文件。確保您可以生成存根擴(kuò)展和實(shí)際擴(kuò)展。
-
為您的模擬器實(shí)現(xiàn)創(chuàng)建一個(gè)目錄,該目錄需要是您的存根實(shí)現(xiàn)目錄的兄弟目錄。例如:
<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
-
制作您的擴(kuò)展的 .mk 文件的副本。
-
在該副本中,編輯 SC_EDK_AS_SOURCE_DIR_AUTHORING 和 SC_EDK_AS_CLASSES_AUTHORING 的值。對這些值進(jìn)行適當(dāng)?shù)脑O(shè)置,以反映您的模擬器實(shí)現(xiàn)目錄和類。
-
重命名您的擴(kuò)展的原始 .mk 文件,以保證它的安全。然后,將該副本重命名為您的擴(kuò)展的 .mk 文件名:PlatformEDKExtension_<您的擴(kuò)展名稱>.mk。
-
將您的平臺的 bin 目錄中的存根 ANE 文件移至某個(gè)安全的位置。否則,下一步操作會覆蓋該文件。
-
運(yùn)行生成實(shí)用程序以生成實(shí)際擴(kuò)展和您的模擬器擴(kuò)展。