Adobe AIR 用ネイティブ拡張の使用

Adobe AIR 用のネイティブ拡張では ActionScript API が提供され、ネイティブコードでプログラムされているデバイス固有の機能にアクセスできます。ネイティブ拡張の開発者は、デバイス製造元と共同作業することもあれば、サードパーティの開発者である場合もあります。

ネイティブ拡張を開発する場合は、『Adobe AIR 用ネイティブ拡張の開発』を参照してください。

ネイティブ拡張とは、次の 2 つを組み合わせたものです。

  • ActionScript クラス

  • ネイティブコード

ただし、ネイティブ拡張を使用している AIR アプリケーション開発者は、ActionScript クラスのみを利用して作業します。

ネイティブ拡張は、次のような状況で役立ちます。

  • ネイティブコード実装を使用すると、プラットフォーム固有の機能にアクセスできます。これらのプラットフォーム固有の機能は、ビルトイン ActionScript クラスでは利用できません。また、アプリケーション固有の ActionScript クラスで実装することもできません。ネイティブコード実装では、デバイス固有のハードウェアおよびソフトウェアにアクセスできるので、このような機能を提供できます。

  • ネイティブコード実装は ActionScript のみを使用する実装よりも速い場合があります。

  • ネイティブコード実装を使用すると、ActionScript から従来のネイティブコードにアクセスできます。

ネイティブ拡張に関するいくつかの例が、アドビデベロッパーセンターに掲載されています。その 1 つとして、あるネイティブ拡張を使用することで、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 と指定します。
  • ANE ファイルを AIR アプリケーションと共にパッケージ化します。

ネイティブ拡張と NativeProcess ActionScript クラスの比較

ActionScript 3.0 では、NativeProcess クラスが提供されます。このクラスを使用すると、AIR アプリケーションで、ホストオペレーティングシステム上でネイティブプロセスを実行できます。この機能はネイティブ拡張と類似しており、プラットフォーム固有の機能およびライブラリにアクセスできます。NativeProcess クラスを使用するかネイティブ拡張を使用するかを判断する際には、次の点を考慮してください。

  • NativeProcess クラスをサポートするのは extendedDesktop AIR プロファイルのみです。したがって、AIR プロファイル mobileDevice および extendedMobileDevice を使用しているアプリケーションの場合は、ネイティブ拡張が唯一の選択肢です。

  • ネイティブ拡張の開発者は、多くの場合、様々なプラットフォーム用のネイティブ実装を提供しますが、ネイティブ拡張の開発に伴って提供される ActionScript API は、通常、どのプラットフォームでも同じになります。NativeProcess クラスを使用する場合、ネイティブプロセスを開始するための ActionScript コードは、プラットフォームによって異なることがあります。

  • NativeProcess クラスは別プロセスを開始します。一方、ネイティブ拡張は AIR アプリケーションと同じプロセスで実行されます。そのため、コードの失敗が懸念される場合は、NativeProcess クラスを使用する方が安全です。ただし、別プロセスになると、通常はプロセス間通信処理を実装することになります。

ネイティブ拡張と ActionScript クラスライブラリ(SWC ファイル)の比較

SWC ファイルは、アーカイブ形式の ActionScript クラスライブラリです。SWC ファイルには、SWF ファイルおよびその他のリソースファイルが含まれています。SWC ファイルは、ActionScript コードとリソースファイルを個々に共有するのではなく、ActionScript クラスを共有する場合に便利です。

ネイティブ拡張パッケージは ANE ファイルです。SWC ファイルと同様に、ANE ファイルも ActionScript クラスライブラリであり、SWF ファイルとその他のリソースファイルがアーカイブ形式で含まれています。ただし、ANE ファイルと 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 の追加...」 ダイアログボックスで、「OK」を選択します。

    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 開発ツール(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 を使用して、ネイティブ拡張(ANE ファイル)を含むディレクトリを ADT に通知します。

このオプションについて詳しくは、ファイルとパスのオプションを参照してください。

ANE ファイルがアプリケーションのターゲットデバイスをサポートすることの確認

ANE ファイルが提供されるときに、ネイティブ拡張の開発者から、拡張でサポートされるプラットフォームが伝えられます。アーカイブ抽出ツールを使用して、ANE ファイルの内容を調べることもできます。抽出されたファイルには、サポートされているプラットフォームごとのディレクトリが含まれます。

拡張でサポートされているプラットフォームを把握しておくことは、ANE ファイルを使用するアプリケーションをパッケージ化する際に重要です。次の規則を考慮してください。

  • Android アプリケーションパッケージを作成するには、ANE ファイルに Android-ARM プラットフォームを含める必要があります。または、ANE ファイルに default プラットフォームとその他のプラットフォームを 1 つ以上含める必要があります。

  • iOS アプリケーションパッケージを作成するには、ANE ファイルに iPhone-ARM プラットフォームを含める必要があります。または、ANE ファイルに default プラットフォームとその他のプラットフォームを 1 つ以上含める必要があります。

  • iOS シミュレーターアプリケーションパッケージを作成するには、ANE ファイルに iPhone-x86 プラットフォームを含める必要があります。

  • Mac OS X アプリケーションパッケージを作成するには、ANE ファイルに MacOS-x86 プラットフォームを含める必要があります。または、ANE ファイルに default プラットフォームとその他のプラットフォームを 1 つ以上含める必要があります。

  • Windows アプリケーションパッケージを作成するには、ANE ファイルに Windows-x86 プラットフォームを含める必要があります。または、ANE ファイルに default プラットフォームとその他のプラットフォームを 1 つ以上含める必要があります。