使用 Adobe AIR 的原生擴充功能

Adobe AIR 原生擴充功能的 ActionScript API,可讓您存取以原生程式碼進行程式設計的特定裝置功能。原生擴充功能開發人員有時候會與裝置製造商合作,有時候則成為協力廠商開發人員。

如果您正在開發原生擴充功能,請參閱 Developing Native Extensions for Adobe AIR

原生擴充功能是以下的組合:

  • ActionScript 類別。

  • 原生程式碼。

但是,您身為使用原生擴充功能的 AIR 應用程式開發人員,僅能使用 ActionScript 類別。

下列情況中,原生擴充功能有用:

  • 原生程式碼實作可讓您存取平台特定的功能。內建 ActionScript 類別中沒有這些平台特定的功能,而且這些功能也無法在應用程式特定的 ActionScript 類別中實作。原生程式碼實作可提供這樣的功能,因為它可讓您存取特定裝置硬體和軟體。

  • 原生程式碼實作有時候可能會比只使用 ActionScript 的實作更快。

  • 原生程式碼實作可讓您存取舊版原生程式碼的 ActionScript。

Adobe 開發人員中心提供一些原生擴充功能的範例。例如,有一種原生擴充功能可讓 AIR 應用程式存取 Android 震動功能。請參閱 Native extensions for Adobe AIR

AIR 原生擴充功能 (ANE) 檔案

原生擴充功能開發人員會將原生擴充功能封裝成 ANE 檔案。ANE 檔案是包含原生擴充功能必要元件庫與資源的封存檔案。

請注意,在某些裝置中,ANE 檔案包含原生擴充功能使用的原生程式碼元件庫。但在其他裝置上,原生程式碼元件庫是安裝於裝置。在某些案例中,原生擴充功能完全沒有特定裝置的原生程式碼;僅以 ActionScript 來實作。

您身為 AIR 應用程式開發人員,應依照以下方式使用 ANE 檔案:

  • 使用相同於在元件庫路徑中包含 SWC 檔案的方式,在應用程式元件庫路徑中包含 ANE 檔案。此動作可讓應用程式參考擴充功能的 ActionScript 類別。

    備註: 編譯您的應用程式時,請務必使用 ANE 的動態連結。如果使用 Flash Builder,請在 ActionScript Builder 路徑屬性面板上指定「外部」;如果使用命令列,則指定 -external-library-path。
  • 以 AIR 應用程式封裝 ANE 檔案。

原生擴充功能與 NativeProcess ActionScript 類別的比較

ActionScript 3.0 提供 NativeProcess 類別。此類別可以讓 AIR 應用程式在主機作業系統上執行原生處理程序。此功能與原生擴充功能相似,可讓您存取特定平台功能與元件庫。比較並決定使用 NativeProcess 類別或原生擴充功能時,請考量以下幾點:

  • 僅有 extendedDesktop AIR 描述檔支援 NativeProcess 類別。因此,在 AIR 描述檔為 mobileDevice extendedMobileDevice 的應用程式中,原生功能擴充是唯一的選擇。

  • 原生擴充功能開發人員經常提供不同平台的原生實作,但是他們提供的 ActionScript API,通常是跨平台皆相同。使用 NativeProcess 類別時,視不同的平台而定,要啟動原生處理程序的 ActionScript 程式碼也可能有所差異。

  • NativeProcess 類別會啟動個別處理程序,而原生擴充功能會在與 AIR 應用程式相同的處理程序中執行。因此,如果您擔心程式碼當掉,使用 NativeProcess 類別比較保險。但是,將程序分開,表示您可能要實作內部程序通訊處理。

原生擴充功能與 ActionScript 類別元件庫 (SWC 檔案) 的比較

SWC 檔案是封存格式的 ActionScript 類別元件庫。SWC 檔案包含 SWF 檔案和其他資源檔案。SWC 檔案是共用 ActionScript 類別的便利方式,而不需要共用個別的 ActionScript 程式碼與資源檔案。

原生擴充功能套件是 ANE 檔案。正如 SWC 檔案,ANE 檔案也是 ActionScript 類別元件庫,包含 SWF 檔案和其他封存格式的資源檔案。但是,AME 檔案與 SWC 檔案間最重要的差異是,僅有 ANE 檔案可包含原生程式碼元件庫。

備註: 編譯您的應用程式時,請務必使用 ANE 檔案的動態連結。如果使用 Flash Builder,請在 ActionScript Builder 路徑屬性面板上指定「外部」;如果使用命令列,則指定 -external-library-path。

支援的裝置

自 AIR 3 起,您可在下列裝置中使用應用程式的原生擴充功能:

  • Android 裝置 (Android 2.2 以上)

  • iOS 裝置 (iOS 4.0 以上)

  • iOS 模擬器 (AIR 3.3 以上)

  • Blackberry PlayBook

  • 支援 AIR 3.0 的 Windows 桌上型裝置

  • 支援 AIR 3.0 的 Mac OS X 桌上型裝置

通常,相同的原生擴充功能目標是多個平台。擴充功能的 ANE 檔案包含每個支援平台的 ActionScript 與原生元件庫。通常,在所有平台上,ActionScript 元件庫都有相同的公開介面。原生元件庫必須不同。

有時候原生擴充功能會支援預設平台。預設平台實作僅有 ActionScript 程式碼,但是沒有原生程式碼。如果您在擴充功能未特別支援的平台上封裝應用程式,則應用程式執行時會使用預設實作。例如,考量提供僅套用至行動裝置之功能的擴充功能。擴充功能也可提供桌上型應用程式可用於模擬功能的預設實作。

支援的裝置描述檔

下列 AIR 描述檔支援原生擴充功能:

  • extendedDesktop ,自 AIR 3.0 起

  • mobileDevice ,自 AIR 3.0 起

  • extendedMobileDevice ,自 AIR 3.0 起

使用原生擴充功能的工作清單

若要在您的應用程式中使用原生擴充功能,請執行下列工作:

  1. 在您的應用程式描述器檔案中宣告擴充功能。

  2. 在應用程式元件庫路徑中包含 ANE 檔案。

  3. 封裝應用程式。

在您的應用程式描述器檔案中宣告擴充功能

所有 AIR 應用程式都有應用程式描述器檔案。當應用程式使用原生擴充功能時,應用程式描述器檔案會包含 <extensions> 元素。例如:

<extensions> 
    <extensionID>com.example.Extension1</extensionID> 
    <extensionID>com.example.Extension2</extensionID> 
</extensions>

extensionID 元素的值與擴充功能描述器檔案中的 id 元素相同。擴充功能描述器檔案是一個名為 extension.xml 的 XML 檔。它是封裝於 ANE 檔案。您可使用封存解壓縮工具來查看 extension.xml 檔案。

在應用程式元件庫路徑中包含 ANE 檔案

若要編譯使用原生擴充功能的應用程式,請在元件庫路徑中包含 ANE 檔案。

與 Flash Builder 搭配使用的 ANE 檔案

如果應用程式使用原生擴充功能,請在元件庫路徑中包含原生擴充功能的 ANE 檔案。然後,您可以使用 Flash Builder 來編譯 ActionScript 程式碼。

請使用 Flash Builder 4.5.1 執行下列步驟:

  1. 將 ANE 檔案的副檔名 .ane 變更為 .swc。這是讓 Flash Builder 找到檔案的必要步驟。

  2. 在 Flash Builder 專案上選取「專案 > 屬性」。

  3. 選取「屬性」對話方塊中的「Flex 建置路徑」。

  4. 在「元件庫路徑」索引標籤中,選取「新增 SWC...」。

  5. 瀏覽至 SWC 檔並選取「開啟」。

  6. 選取「新增 SWC...」對話方塊中的「確定」。

    現在,ANE 檔案會出現在「屬性」對話方塊的「元件庫路徑」索引標籤中。

  7. 展開 SWC 檔項目。按兩下「連結類型」,以開啟「元件庫路徑項目選項」對話方塊。

  8. 在「元件庫路徑項目選項」對話方塊中,將「連結類型」變更為「外部」。

現在,您可以使用「專案 > 建置專案」來編譯應用程式 (舉例來說)。

與 Flash Professional 搭配使用 ANE 檔案

如果應用程式使用原生擴充功能,請在元件庫路徑中包含原生擴充功能的 ANE 檔案。然後,您可以使用 Flash Professional CS5.5 來編譯 ActionScript 程式碼。請執行下列動作:

  1. 將 ANE 檔案的副檔名 .ane 變更為 .swc。這是讓 Flash Professional 找到檔案的必要步驟。

  2. 在 FLA 檔上選取「檔案 > ActionScript 設定」。

  3. 在「進階 ActionScript 3.0 設定」對話方塊中選取「元件庫路徑」索引標籤。

  4. 選取「瀏覽至 SWC 檔案」按鈕。

  5. 瀏覽至 SWC 檔並選取「開啟」。

    現在,SWC 檔出現在「進階 ActionScript 3.0 設定」對話方塊的「元件庫路徑」索引標籤中。

  6. 選取 SWC 檔後,選取「選取元件庫的連結選項」按鈕。

  7. 在「元件庫路徑項目選項」對話方塊中,將「連結類型」變更為「外部」。

封裝使用原生擴充功能的應用程式

使用 ADT 來封裝使用原生擴充功能的應用程式。您無法使用 Flash Professional CS5.5 或 Flash Builder 4.5.1 封裝應用程式。

使用 ADT 的詳細資訊在 AIR Developer Tool (ADT)

例如,下列 ADT 命令會建立使用原生擴充功能之應用程式適用的 DMG 檔案 (Mac OS X 的原生安裝程式檔案):

adt -package 
    -storetype pkcs12 
    -keystore myCert.pfx 
    -target native 
    myApp.dmg 
    application.xml 
    index.html resources 
    -extdir extensionsDir
下列命令會建立 Android 裝置的 APK 套件。
adt -package 
    -target apk 
    -storetype pkcs12 -keystore ../codesign.p12 
    myApp.apk 
    myApp-app.xml 
    myApp.swf icons 
    -extdir extensionsDir

下列命令會建立 iPhone 應用程式的 iOS 套件。

adt -package 
    -target ipa-ad-hoc 
    -storetype pkcs12 -keystore ../AppleDistribution.p12 
    -provisioning-profile AppleDistribution.mobileprofile 
    myApp.ipa 
    myApp-app.xml 
    myApp.swf icons Default.png 
    -extdir extensionsDir

請注意以下各點:

  • 使用原生安裝程式套件類型。

  • 指定擴充功能目錄。

  • 請確定 ANE 檔案支援應用程式的目標裝置。

使用原生安裝程式套件類型

應用程式套件必須是原生安裝程式。您無法在使用原生擴充功能的應用程式中,建立跨平台 AIR 套件 (一種 AIR 套件),因為原生擴充功能通常包含原生程式碼。但是,通常原生擴充功能會支援相同 ActionScript API 的多個原生平台。在這種案例中,您可在不同的原生安裝程式套件中,使用相同的 ANE 檔案。

下列表格摘述使用 ADT 命令 -target 選項的值。

應用程式的目標平台

-target

Mac OS X 或 Windows 桌上型裝置

-target native

-target bundle

Android

-target apk

或其他 Android 套件目標。

iOS

-target ipa-ad-hoc

或其他 iOS 套件目標

iOS 模擬器

-target ipa-test-interpreter-simulator

-target ipa-debug-interpreter-simulator

指定擴充功能目錄

使用 ADT 選項 -extdir 來告知 ADT 包含原生擴充功能 (ANE 檔案) 的目錄。

如需此選項的相關資訊,請參閱 檔案與路徑選項

請確定 ANE 檔案支援應用程式的目標裝置

提供 ANE 檔案時,原生擴充功能開發人員會通知您擴充功能支援哪些平台。您也可使用封存解壓縮工具來查看 ANE 檔案的內容。解壓縮的檔案包含每個支援平台的目錄。

封裝使用 ANE 檔案的應用程式時,瞭解哪些平台支援擴充功能,相當重要。請考慮下列規則:

  • 若要建立 Android 應用程式套件,ANE 檔案必須包含 Android-ARM 平台。或者,ANE 檔案必須包含預設平台和至少一個其他平台。

  • 若要建立 iOS 應用程式套件,ANE 檔案必須包含 iPhone-ARM 平台。或者,ANE 檔案必須包含預設平台和至少一個其他平台。

  • 若要建立 iOS 模擬器應用程式套件,ANE 檔案必須包含 iPhone-x86 平台。

  • 若要建立 MacOS X 應用程式套件,ANE 檔案必須包含 MacOS-x86 平台。或者,ANE 檔案必須包含預設平台和至少一個其他平台。

  • 若要建立 Windows 應用程式套件,ANE 檔案必須包含 Windows-x86 平台。或者,ANE 檔案必須包含預設平台和至少一個其他平台。