AIR for TV 拡張の例

テレビ用 Adobe® AIR® では、ネイティブ拡張の例がいくつか提供されます。ネイティブ実装は C++ で記述されており、AIR for TV 拡張開発キット(EDK)を使用します。この EDK は、AIR for TV を自社製品に付属させているデバイス製造元や system-on-a-chip(SoC)製造元に配布されています。AIR for TV EDK および AIR for TV 拡張の作成について詳しくは、 AIR for TV ネイティブ拡張の構築 を参照してください。

AIR for TV 拡張の開発者は、次のことを実行できます。

  • これらの例をコピーし、拡張の出発点として使用します。

  • 様々な C API 拡張関数や ActionScript ExtensionContext クラスの使用方法を示すコードサンプルを確認するために、これらの例を参照します。

  • これらの例のいずれかの makefile をコピーし、自分の拡張用の makefile を作成するための出発点として使用します。

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 アプリケーション記述ファイル。 <extensions> エレメントが含まれ、 extensionID 値として tv.adobe.extension.example.HelloWorld が指定されています。

HelloWorld.h

ディレクトリ:

native/

HelloWorld クラスの C++ ヘッダーファイル。

HelloWorld.cpp

ディレクトリ:

native/

HelloWorld クラスの C++ 実装ファイル。この実装は、以下を実行します。

  • コンソールに文字列パラメーターを書き出す FREFunction Hello() を定義します。また、「Hello from extensionland」という文字列を返します。

  • ExtensionContext インスタンスに 500 ミリ秒おきにイベントを送信する非同期スレッドを開始する FREFunction StartCount() を定義します。

HelloWorldExtension.cpp

ディレクトリ:

native/

次の C API 拡張関数の実装が含まれます。

  • FREInitializer()

  • FREContextInitializer()

  • FREContextFinalizer()

  • FREFinalizer()

PlatformEDKExtension_HelloWorld.mk

HelloWorld 拡張の makefile。

ExtensionUtil.h

ディレクトリ:

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

C または C++ 実装のコーディングに便利なマクロが含まれます。

ExtensionBridge.cpp

ディレクトリ:

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

AIR for TV 拡張モジュール実装。ネイティブ実装を構築する際に、ビルド内にこのソースファイルを含めます。

phonyEdkAneCert.p12

ディレクトリ:

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

偽の証明書。make ユーティリティで ANE ファイル内に HelloWorld 拡張をパッケージ化するために使用します。

extension.mk

ディレクトリ:

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

拡張モジュールの makefile。このファイルは変更しないでください。

Process の例

Process の例は、AIR for TV の配布の次のディレクトリにあります。

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

Process 拡張では、AIR アプリケーションは Linux プロセスを操作できます。例えば次のような機能があります。

  • Linux プロセスをコマンド実行します(spawn)。プロセスは、AIR アプリケーションが指定する Linux コマンドを実行します。

  • プロセスのプロセス識別子を取得します。

  • プロセスが完了したかどうかを確認します。

  • プロセスが完了したイベントを受け取ります。

  • 完了したプロセスのリターンコードを取得します。

  • プロセスが stdout または stderr に書き出したことを示すイベントを受け取ります。

  • stdout および stderr の出力文字列を受け取ります。

  • stdin に文字列を書き込みます。

  • プロセスに中断シグナルを送信します。

  • プロセスを強制終了します(kill)。

次の表に、各ファイルと、その各ファイルの 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 アプリケーション記述ファイル。 <extensions> エレメントが含まれ、 extensionID 値として tv.adobe.extension.process.Process が指定されています。

Process.h

ディレクトリ:

native/

Process 抽象クラスの C++ ヘッダーファイル。

ProcessLinux.h

ディレクトリ:

native/

ProcessLinux 具象クラスの C++ ヘッダーファイル。

ProcessLinux クラスは、Process クラスの派生クラスです。Process クラスの Linux 実装向けの private メソッドおよびデータを宣言します。

ProcessLinux.cpp

ディレクトリ:

native/

ProcessLinux クラスの C++ 実装。この実装には次の機能が含まれます。

  • FREFunction 関数を定義します。これらの関数は Linux システムコールを使用して、例えば、Linux プロセスの分岐(fork)と実行(exec)、 stdin stdout および stderr の操作を行います。

  • コマンド実行(spawn)されたプロセスのステータスを監視します。実装はこの目的でスレッドを作成します。スレッドは、C 拡張 API の FREDispatchStatusEventAsync() を使用して、イベントをレポートします。

  • FREFunction 関数から ActionScript 側に情報を返すための FREObject 変数を作成する、ヘルパー関数を定義します。これらのヘルパー関数は、 FRENewObjectFromBool() FRENewObjectFromUTF8() FRENewObjectFromUint32() などの、C API 拡張関数を使用します。

ProcessExtension.cpp

ディレクトリ:

native/

次の C API 拡張関数の実装が含まれます。

  • FREInitializer()

  • FREContextInitializer()

  • FREContextFinalizer()

  • FREFinalizer()

PlatformEDKExtension_Process.mk

Process 拡張の makefile。

ExtensionUtil.h

ディレクトリ:

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

C または C++ 実装のコーディングに便利なマクロが含まれます。

ExtensionBridge.cpp

ディレクトリ:

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

AIR for TV 拡張モジュール実装。ネイティブ実装を構築する際に、ビルド内にこのソースファイルを含めます。

phonyEdkAneCert

ディレクトリ:

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

偽の証明書。make ユーティリティで ANE ファイル内に Process 拡張をパッケージ化するために使用します。

extension.mk

ディレクトリ:

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

拡張モジュールの makefile。このファイルは変更しないでください。

x86Desktop プラットフォーム上でのサンプル拡張のビルド

サンプル拡張の Hello World または Process を x86Desktop プラットフォーム上でビルドするには、まず、x86Desktop プラットフォーム用の AIR for TV ディストリビューションをビルドします。その手順については、『 Getting Started with Adobe AIR for TV 』(PDF)の「Quick Start on 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

make ユーティリティにより、1 つのサンプル拡張に対して 2 つのファイルが作成されます。それらのファイルは、 SC_BUILD_MODE にデバッグとリリースのどちらを指定したかに応じて、次のディレクトリのいずれかに配置されます。

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

サンプル拡張に対して make ユーティリティにより作成されるファイルは次のとおりです。

  • デバイスにバンドルされた拡張を含む ZIP ファイル。

  • スタブ拡張またはシミュレーター拡張を含む ANE ファイル。