ネイティブライブラリの構築

拡張のネイティブライブラリを構築するには、ターゲットデバイスに適した開発環境を使用します。次に、例を示します。

  • Android SDK を使用して開発する場合は、Eclipse 統合開発環境(IDE)用の Android 開発ツールプラグインを使用します。

  • iOS デバイスおよび Mac OS X デバイス用に開発する場合は、Apple の Xcode IDE を使用します。

  • Windows デバイス用に開発する場合は、Microsoft Visual Studio を使用できます。

これらの開発環境を使用したネイティブ拡張の例については、「Adobe AIR 用のネイティブ拡張」を参照してください。

拡張のネイティブ側を、アプリケーションではなくライブラリ内に構築します。ネイティブ拡張を ANE ファイルにパッケージ化するときは、ネイティブライブラリを指定します。

Android ネイティブライブラリ

Android SDK を使用する場合に、ライブラリを JAR ファイルとして指定します。

Android NDK を使用する場合に、次のようなファイル名で共有ライブラリを指定します。

lib<yourlibraryname>.so 

アプリケーション APK パッケージを正確にインストールするには、この共有ライブラリ命名規則に従う必要があります。

共有ライブラリを含む ANE パッケージを作成する場合は、共有ライブラリを次のディレクトリ構造で保存する必要があります。

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

iOS ネイティブライブラリ

.a ファイル名拡張子を付けて静的ライブラリを指定します。Xcode IDE の Cocoa Touch 静的ライブラリテンプレートを使用すると、.a ファイルを作成できます。デバイス上で実行されるネイティブライブラリを作成する場合、ターゲットタイプは「デバイス」を使用してください。iOS シミュレーター(AIR 3.3 以降でサポートされている iOS シミュレーター)上で実行されるネイティブライブラリを作成する場合、ターゲットタイプは「シミュレーター」を使用してください。

AIR の各バージョンは、iOS SDK のバージョンと共にバンドルします。対応する AIR バージョンをターゲットとするネイティブ拡張で、そのバージョンの iOS SDK で使用可能な公開されている任意のフレームワークにリンクすることができます。以下の表は、AIR SDK のバージョンとバンドルされる iOS のバージョン、および追加機能のサポートのリストです。

AIR SDK

含まれる iOS SDK

追加ライブラリへのリンク

サードパーティライブラリのバンドル

3.0 - 3.2

4.2

不可

不可

3.3 - 3.4

5.1

不可

3.5

6.0

拡張で特定の AIR SDK バージョンをターゲットにする場合、対応する iOS バージョンよりも後に導入された iOS フレームワークは使用できません。ターゲットにする AIR SDK 以外の、他の共有ライブラリやサードパーティのフレームワークを使用できません。

AIR SDK にバンドルされている iOS SDK を使用する代わりに、AIR 3.3 以降では外部の iOS SDK にリンクすることができます。ADT -platformsdk スイッチを使用して、外部 iOS SDK へのパスを指定します。

AIR はデフォルトで次の iOS フレームワークライブラリにリンクします。

AudioToolbox

CoreLocation

OpenGLES

AVFoundation

CoreMedia

QuartzCore

CFNetwork

CoreVideo

Security

CoreFoundation

Foundation

SystemConfiguration

CoreGraphics

MobileCoreServices

UIKit

他のフレームワークおよびライブラリにリンクするには、プラットフォームオプションの XML ファイルにリンケージオプションを指定します。

注意: AIR 3.4 以降では、ADT ‑hideAneSymbols yes オプションを使用してシンボルの競合が起こらないようにすることができます。詳しくは、「ネイティブ拡張オプション」を参照してください。

iOS プラットフォームオプション(platform.xml)ファイル

追加のフレームワークやライブラリにリンクするため、またはサードパーティのフレームワークやライブラリをバンドルするために、プラットフォームオプション(platform.xml)ファイルを使用して、ネイティブ拡張で iOS 固有のオプションを指定することができます。iOS の -platform フラグの後に -platformoptions フラグを指定して拡張をパッケージ化すると、プラットフォームオプションファイルは ANE に追加されます。後で開発者が拡張を使用するアプリケーションの IPA ファイルを作成すると、ADT は platform.xml ファイル内でこのオプションを使用して追加ライブラリにリンクしたり、バンドルされた依存関係を含めたりします。

注意: プラットフォームオプションファイルには任意の名前を付けることができます。「platform.xml」という名前を付ける必要はありません。

iOS プラットフォームオプションファイルは iPhone-ARM(デバイス)プラットフォームおよび iPhone-x86(iOS シミュレーター)プラットフォームの両方と共に使用できます。

プラットフォームオプションファイルには AIR 3.1 以降が必要です。

iOS 用の ANE のパッケージ化に packagedDependencies 機能を使用する場合は、次の項目を追加します。

<option>-rpath @executable_path/Frameworks</option>

platformoptions.xml ファイルの linkerOptions タグ内に追加してください。

iOS リンカーオプション

iOS リンカーオプションは、任意のオプションをリンカーに渡す方法を提供します。指定されたオプションは、変更されずにリンカーに渡されます。これを使用して、追加の iOS フレームワークなど、追加のフレームワークやライブラリにリンクできます。リンカーオプションを指定するには、プラットフォームの options xml ファイルで <linkerOptions> タグを使用します。以下の例で示すように、<linkerOptions> タグ内で、各リンケージオプションを <options> タグのペアでラップして指定します。

<linkerOptions> 
        <option>-ios_version_min 5.0</option> 
        <option>-framework Accelerate</option> 
         <option>-liconv</option> 
</linkerOptions>

この方法でリンクされた依存関係は、ネイティブ拡張をネイティブ拡張自体とは別に使用する開発者に配布される必要があります。これは、iOS に含まれる追加のライブラリを使用する際に最も便利な方法ですが、AIR ではデフォルトではリンクされません。このオプションを使用して、別に提供する静的ライブラリに開発者がリンクできるようにすることもできます。

<linkerOptions> タグには、AIR 3.3 以降が必要です。

パッケージ化されたサードパティの依存関係

ライブラリのソースコードにアクセスせずに、または拡張とは別にライブラリにアクセスすることを開発者に強要せずに、ネイティブ拡張内で静的ライブラリ(ネイティブサードパーティライブラリなど)を使用する場合があります。静的ライブラリをパッケージ化された依存関係として指定することで、ネイティブ拡張と共にバンドルすることができます。プラットフォームの options xml ファイルで、<packagedDependencies> タグを使用します。以下の例に示すように、拡張パッケージに含める各依存関係に対して、その名前または相対パスを <packagedDependency> タグのペアで囲んで指定します。

<packagedDependencies> 
    <packagedDependency>foo.a</packagedDependency> 
    <packagedDependency>abc/x.framework</packagedDependency> 
    <packagedDependency>lib.o</packagedDependency> 
</packagedDependencies>

パッケージ化された依存関係は、.a.framework または .o のいずれかの拡張子を持つ静的ライブラリである必要があります。ライブラリをデバイス上で使用するには、ライブラリが ARMv7 アーキテクチャをサポートする必要があり、iOS シミュレーターと共に使用するには、i386 アーキテクチャをサポートする必要があります。

ネイティブ拡張をパッケージ化する場合は、依存関係の名前を -platformoptions フラグとして指定する必要があります。次の例に示すように、platform.xml ファイルのファイル名の後、続く -package フラグの前に、依存関係をリストします。

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

<packagedDependencies> タグには、AIR 3.5 以降が必要です。

プライベート埋め込みフレームワークの使用

Xcode6 以降でプライベートフレームワークを使用して iOS ANE を作成するには、次の手順を実行します。

  1. platform.xml を編集します。

    <option>-rpath @executable_path/Frameworks</option>

    上記の項目を linkerOptions タグ内に追加します。

    次に例を示します。

    </description> 
                <linkerOptions> 
                    <option>-ios_version_min 5.1.1</option> 
                    <option>-rpath @executable_path/Frameworks</option> 
                </linkerOptions> 
    <packagedDependencies> 
         <packagedDependency>SampleFramework.framework</packagedDependency> 
    </packagedDependencies>
  2. Frameworks という名前のフォルダーを既存の iPhone-ARM フォルダー内に作成します。

  3. プライベートフレームワークを Frameworks フォルダーにコピーして、フレームワークを ANE とともにパッケージ化します。

    プライベートフレームワークのコピー

プラットフォームオプション(platform.xml)ファイルの例

以下は、プラットフォームオプション(platform.xml)ファイルの構成の例です。

<platform xmlns="http://ns.adobe.com/air/extension/3.5"> 
    <description>An optional description.</description> 
    <copyright>2011 (optional)</copyright> 
    <sdkVersion>5.0.0</sdkVersion> 
    <linkerOptions> 
        <option>-ios_version_min 5.0</option> 
        <option>-framework Accelerate</option> 
         <option>-liconv</option> 
    </linkerOptions> 
    <packagedDependencies> 
        <packagedDependency>foo.a</packagedDependency> 
        <packagedDependency>abc/x.framework</packagedDependency> 
        <packagedDependency>lib.o</packagedDependency> 
    </packagedDependencies> 
</platform>

このプラットフォームオプションファイルをネイティブ拡張パッケージに含めるには、以下のような ADT コマンドを使用できます。

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

Mac OS X ネイティブライブラリ

Mac OS X デバイスの場合は、.framework ライブラリを指定します。ライブラリを構築するときは、ベース SDK の Xcode プロジェクトの設定が Mac OS X 10.5 SDK であることを確認します。

拡張として使用するために Mac OS X フレームワークをコンパイルする際には、すべてのシナリオで AIR フレームワークへの依存性を適切に解決できるように、次のオプションを設定します。

  • LD_RUNPATH_SEARCH_PATHS に、@executable_path/../runtimes/air/mac@executable_path/../Frameworks および /Library/Frameworks を追加します。

  • フレームワークへの弱いリンクとフラットな名前空間オプションを使用します。

これらのオプション設定を同時に使用することで、まずアプリケーションで AIR フレームワークの適切なコピーが読み込まれ、次に拡張でその読み込み済みのコピーが使用されるようになります。

Windows ネイティブライブラリ

Windows デバイスの場合は、ライブラリを DLL ファイルとして指定します。lib/windows ディレクトリ内の AIR SDK ディレクトリにあるライブラリ FlashExtensions.lib を、DLL に動的にリンクします。また、ネイティブコードライブラリで Microsoft の C ランタイムライブラリのいずれかを使用している場合は、マルチスレッドの静的バージョンの C ランタイムライブラリにリンクします。このタイプのリンクを指定するには、/MT コンパイラーオプションを使用します。