ネイティブ拡張パッケージの作成

ネイティブ拡張をアプリケーション開発者に提供するには、関連するすべてのファイルを 1 つの ANE ファイルにパッケージ化します。ANE ファイルは、以下を含むアーカイブファイルです。

  • 拡張の ActionScript ライブラリ

  • 拡張のネイティブコードライブラリ

  • 拡張記述ファイル

  • 拡張の証明書

  • 拡張のリソース(画像など)

ANE ファイルを作成するには AIR 開発ツール(ADT)を使用します。ADT の詳細なドキュメントは、「AIR 開発ツール」にあります。

ADT による拡張のパッケージ化の例

以下の例では、ADT を使用して ANE ファイルをパッケージ化する方法を説明します。この例では、次のデバイス上で動作するアプリケーションで使用するための ANE ファイルをパッケージ化します。

  • Android デバイス

  • Android x86 デバイス

  • iOS デバイス

  • iOS シミュレーター

  • デフォルトの ActionScript 専用の実装を使用しているその他のデバイス

adt -package <signing options> -target ane MyExtension.ane MyExt.xml -swc MyExtension.swc     -platform Android-ARM -C platform/Android . 
    -platform Android-x86 -C platform/Android-x86 . 
    -platform iPhone-ARM -platformoptions platform.xml 
        abc/x.framework lib.o -C platform/ios . 
    -platform iPhone-x86 -C platform/iosSimulator 
    -platform default -C platform/default library.swf

この例では、次のコマンドラインオプションを使用して ANE パッケージを作成します。

  • <signing options>

    オプションで、ANE ファイルに署名することもできます。詳しくは、ネイティブ拡張の署名済み証明書の作成を参照してください。

  • -target ane

    -target フラグでは、作成するパッケージのタイプを指定します。ane ターゲットを使用すると、ネイティブ拡張がパッケージ化されます。

  • MyExtension.ane

    作成するパッケージファイルの名前を指定します。ファイル名拡張子は .ane を使用します。

  • MyExt.xml

    拡張記述ファイルを指定します。このファイルでは、拡張 ID とサポートされているプラットフォームを指定します。AIR では、この情報を使用して、アプリケーションに対応する拡張を特定し、ロードします。この例では、拡張記述ファイルは次のようになります。

    <extension xmlns="http://ns.adobe.com/air/extension/3.1"> 
        <id>com.sample.ext.MyExtension</id> 
        <versionNumber>0.0.1</versionNumber> 
        <platforms> 
            <platform name="Android-ARM"> 
                <applicationDeployment> 
                    <nativeLibrary>MyExtension.jar</nativeLibrary> 
                    <initializer>com.sample.ext.MyExtension</initializer> 
                </applicationDeployment> 
            </platform> 
     <platform name="Android-x86"> 
                <applicationDeployment> 
                    <nativeLibrary>MyExtension.jar</nativeLibrary> 
                    <initializer>com.sample.ext.MyExtension</initializer> 
                </applicationDeployment> 
            </platform>  
            <platform name="iPhone-ARM"> 
                <applicationDeployment> 
                    <nativeLibrary>MyExtension.a</nativeLibrary> 
                    <initializer>InitMyExtension></initializer> 
                </applicationDeployment> 
            </platform> 
            <platform name="iPhone-x86"> 
                <applicationDeployment> 
                    <nativeLibrary>MyExtension.a</nativeLibrary> 
                    <initializer>InitMyExtension></initializer> 
                </applicationDeployment> 
            </platform> 
            <platform name="default"> 
                <applicationDeployment/> 
            </platform> 
        </platforms> 
    </extension>

    詳しくは、ネイティブ拡張記述ファイルを参照してください。

  • MyExtension.swc

    拡張の ActionScript 側を含む SWC ファイルを指定します。

  • -platform Android-ARM -C platform/Android . -platform Android-x86 -C platform/Android-x86 .-platform iPhone-ARM -platformoptions platform.xml-Cplatform/iOS.

    -platform フラグでは、この ANE ファイルがサポートするプラットフォームの名前を指定します。名前の後のオプションでは、プラットフォーム固有のライブラリとリソースの場所を指定します。この場合、Android-ARM プラットフォームの -C オプションは、相対ディレクトリ platform/Android を作業ディレクトリにすることを示します。プラットフォーム固有のディレクトリとファイルは、新しい作業ディレクトリに対して相対的な位置に存在することになります。

    つまり、この例では、相対ディレクトリ platform/Android には、Android のネイティブコードライブラリとリソースがすべて含まれます。また、Android プラットフォーム固有の library.swf ファイルおよびその他の Android プラットフォーム固有の SWF ファイルも含まれます。

    iPhone-ARM プラットフォーム用の -platformoptions フラグは、プラットフォーム固有のオプションを指定する場合に使用するオプションの項目です。これらのオプションは、iOS フレームワーク(デフォルトのフレームワーク以外)へのリンクや、サードパーティの静的ライブラリとネイティブ拡張のバンドルに関するオプションを含みます。iOS ネイティブライブラリ を参照してください。

  • -platform default -C platform/default library.swf

    -platform オプションで default プラットフォームを指定するときは、ネイティブコードファイルは指定しないでください。library.swf ファイルと、その他の SWF ファイル(存在する場合)のみを指定してください。

ANE パッケージ内の SWC ファイルと SWF ファイル

SWC ファイルは、ADT パッケージコマンドの -swc オプションで指定します。この SWC ファイルは ActionScript ライブラリです。これには library.swf というファイルが含まれています。ADT では、library.swf を SWC ファイルから ANE ファイルに配置します。ネイティブ拡張を使用している AIR アプリケーションでは、コンパイルが可能なように、拡張の ANE ファイルがライブラリパスに含まれています。実際には、アプリケーションでは、library.swf 内のパブリックインターフェイスに対するコンパイルが行われます。

ターゲットプラットフォームごとに別々の ActionScript 実装を作成する場合もあります。その場合は、各プラットフォームの SWC ファイルをコンパイルし、各 SWC ファイルに含まれる library.swf ファイルを適切なプラットフォームディレクトリに配置してから、ADT パッケージ化コマンドを使用します。library.swf は、WinZip などの解凍ツールを使用して SWC ファイルから抽出できます。

例えば、作成する拡張のパブリックインターフェイスがどのプラットフォーム用もすべて同じであるとします。その場合、ADT コマンドの -swc オプションで指定する、プラットフォームに特有の SWC ファイルは、どのプラットフォーム用でもかまいません。SWC ファイルに含まれている SWF ファイルはアプリケーションのコンパイルにのみ使用されるものだからです。ネイティブ拡張の実行時に使用されるのは、プラットフォームディレクトリに配置した SWF ファイルです。

library.swf ファイルの注意事項は次のとおりです。

  • ADT では、プラットフォームごとに library.swf という名前のメインの SWF ファイルを指定する必要があります。SWC ファイルを作成すると、library.swf がその SWF ファイルの名前となります。

  • library.swf ファイルは、プラットフォームごとに異なる場合があります。

  • ActionScript 側にプラットフォームの依存関係がない場合は、各プラットフォームの library.swf を同じにすることもできます。

  • 各プラットフォームの library.swf では、プラットフォーム固有のディレクトリに含めた他の SWF ファイルをロードすることができます。この場合の他の SWF ファイルは、どのような名前でもかまいません。

アプリケーションのパッケージ化に関する ANE ファイルのルール

ネイティブ拡張を使用するアプリケーションをパッケージ化するには、ADT を使用します。拡張を使用するアプリケーションをパッケージ化する際に、アプリケーションのパッケージ化ターゲットと一致するプラットフォームが ANE ファイル内で指定されているかどうかが、ADT によって検証されます。例えば、プラットフォーム Android-ARM は、Android apk パッケージと照合されます。

また、ADT では、default プラットフォームが任意のターゲットパッケージと照合されます。default プラットフォームは、ActionScript 専用の拡張を指定します。アプリケーションバンドル拡張を使用する AIR アプリケーションについて考えてみます。AIR では、拡張で指定されているプラットフォームの中にデバイスと対応するものがない場合にのみ、default プラットフォーム拡張の ActionScript ライブラリをロードします。

例えば、iPhone-ARMAndroid-ARM および default の各プラットフォームを指定しているアプリケーションバンドル拡張について考えてみます。この拡張を使用しているアプリケーションを Windows プラットフォーム上で実行した場合、拡張の default プラットフォームライブラリが使用されます。

したがって、アプリケーションバンドル用に ANE ファイルを作成する場合は、ANE ファイルを使用するアプリケーションをパッケージ化するときに ADT で使用される次のルールを考慮してください。

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

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

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

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

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

アプリケーションには 1 つのプラットフォーム実装しかバンドルされませんが、ADL ユーティリティを使用して拡張を含むアプリケーションをテストする際には、実装が実行時に選択されます。このように実行時に選択されることから、テストプラットフォームおよび ANE パッケージによって動作が異なることがあります。例えば、ANE に Android-ARMWindows-x86 および default のプラットフォームの実装が含まれている場合、テストコンピューターが Windows を実行しているか Mac OS X を実行しているかによってテスト時に使用される実装が異なります。Windows では、Windows-x86 プラットフォーム実装が使用されます(これは、モバイルプロファイルでテストする場合も当てはまります)。Mac OS X では、default 実装が使用されます。

ANE パッケージに追加の Android .so 共有ライブラリを含める

プラットフォーム Android-ARM をターゲットとするネイティブ拡張について考えます。拡張のネイティブ側の主要ライブラリは次のいずれかになります。

  • .so ライブラリ(Android NDK を使用する場合)

  • JAR ファイル(Android SDK を使用する場合)

ただし、場合によっては、拡張用の主要な .so ライブラリまたは JAR ファイル以外にも、追加のネイティブライブラリ(.so ライブラリ)がネイティブ側に必要となることがあります。

次に、例を示します。

  • Java API を使用したネイティブ拡張の開発で、その Java コードから JNI(Java Native Interface)を使用して .so ネイティブライブラリにアクセスすることが必要な場合。

  • C API を使用したネイティブ拡張の開発で、コードを複数の共有ライブラリに分割することになり、拡張内のロジックに基づいて実行時に適切な .so 共有ライブラリを読み込むことが必要な場合。

この ANE パッケージを作成するときは、次のディレクトリ構造を使用します。

<Android platform directory>/ 
    libs/ 
        armeabi/ 
            <Android emulator native libraries> 
        armeabi-v7a/ 
            <Android device native libraries>

ADT を使用してこの ANE パッケージを作成するときは、Android プラットフォームディレクトリのコンテンツを指定するように -platform オプションを設定します。

-platform Android-ARM -C <Android platform directory> .

アプリケーション開発者が ADT を使用して ANE パッケージを APK パッケージに取り込むと、APK パッケージには次のライブラリが含まれます。

  • libs/armeabi-v7a 内のライブラリ(ADT のターゲットが apk または apk-captive-runtime の場合)。

  • libs/armeabi 内のライブラリ(ADT のターゲットが apk-emulatorapk-debug または apk-profile の場合)。

注意: iPhone-ARM プラットフォームの場合は、共有ライブラリを ANE ファイルに含めることはできません。詳しくは、ネイティブライブラリの構築を参照してください。