Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

Flash Builder 4.6でAndroid/iOSデバイスのバイブレーター機能を実行するライブラリを作成!

各プラットフォームと連携できる AIR 3 新機能「ネイティブ拡張」の使い方

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2011/12/09 17:00
目次

ネイティブ拡張記述ファイルの作成

 ネイティブ拡張記述ファイルは、ネイティブ拡張を定義するためのXMLファイルです。このファイルは、ANEファイル作成時と、AIRアプリケーションに組み込む際に必要になります。

<extension xmlns="http://ns.adobe.com/air/extension/2.5"> 
    <id>拡張ID </id> 
    <versionNumber>バージョン番号</versionNumber> 
    <name> 
        <text lang="ロケール">名前</text> 
    </name> 
    <platforms> 
        <platform name="プラットフォーム"> 
            <applicationDeployment> 
                <nativeLibrary>ネイティブライブラリファイル名</nativeLibrary> 
                <initializer>初期化時に呼び出す関数名またはクラス名</initializer> 
                <finalizer>破棄時に呼び出すの関数名またはクラス名</finalizer> 
            </applicationDeployment> 
        </platform> 
        <platform name="default"> 
            <applicationDeployment/> 
        </platform> 
    </platforms> 
</extension>

 記述ファイルで使用するタグは、主に次のようなものがあります。

  • <id>:このIDは、ActionScriptからネイティブ拡張を指定する際に使います。拡張IDと呼びます。
  • <nativeLibrary>:ネイティブ拡張ライブラリのファイルを指定します。
  • <platform>:プラットフォームを指定します。

 Name要素には、下記のようなプラットフォームを示す値を入れます。

各プラットフォームのname要素の値
name要素の値 プラットフォーム デバイス
Windows-x86 Windows Windows デスクトップ
MacOS-x86 MacOS MacOS デスクトップ
Android-ARM Android Android デバイス
iPhone-ARM iOS iPad, iPhone
QNX-ARM BlackBerry BlackBerry PlayBook
default プラットフォームが指定されていない場合  

 また、AIR Debug Launcher(以下、ADL)を使用したシミュレーターでアプリケーションを実行した場合のプラットフォームは、defaultが選択されます。

  • <initializer>:

     Java APIの場合は、FREExtensionを実装したクラスの完全限定名を指定。C APIの場合は、初期関数名を指定

  • <finalizer>:

     Java APIの場合は、FREExtensionを実装したクラスの完全限定名を指定。C APIの場合は、破棄関数名を指定

作成例

 サンプルファイルでは、次のようなネイティブ拡張記述ファイルをextension.xmlとして作成します。ここでは、Android向けの設定とiOS向けの設定を行っています。プラットフォームがdefaultの場合は、ネイティブ拡張ライブラリの指定は必要ありません。

<?xml version="1.0" encoding="utf-8"?>
<extension xmlns="http://ns.adobe.com/air/extension/2.5">
   <id>example.ane.vibrator</id>
    <versionNumber>1.0.0</versionNumber>
    <platforms>
        <!-- Androidプラットフォーム向け -->
        <platform name="Android-ARM">
            <applicationDeployment>
                <nativeLibrary>VibratorANE.jar</nativeLibrary>
                <initializer>example.ane.ext.VibratorANEExtension</initializer>
                <finalizer>example.ane.ext.VibratorANEExtension</finalizer>
            </applicationDeployment>
        </platform>
        <!-- iPhoneプラットフォーム向け -->
        <platform name="iPhone-ARM">
            <applicationDeployment>
                <nativeLibrary>libVibratorANE.a</nativeLibrary>
                <initializer>ExtInitializer</initializer>
                <finalizer>ExtFinalizer</finalizer>
            </applicationDeployment>
        </platform>
        <!-- デフォルトプラットフォーム -->
        <platform name="default">
            <applicationDeployment/>
        </platform>
    </platforms>
</extension>

ネイティブ拡張ActionScriptライブラリの作成

 ネイティブ拡張ライブラリを呼び出すためのActionScriptライブラリを作成します。このライブラリをネイティブ拡張ActionScriptライブラリと呼びます。ネイティブ拡張ActionScriptライブラリの作成には、Flash BuilderのFlexライブラリプロジェクトを使用します。

 ここでは、前ページまでで作成したネイティブ拡張ライブラリを用いて説明します。

ネイティブ拡張コンテキストの取得

 ネイティブ拡張ライブラリと連携するためActionScriptのExtensionContextクラスのcreateExtensionContext関数を呼び出し、ネイティブ拡張コンテキストをExtensionContextインスタンスとして取得します。

 拡張IDは、ネイティブ拡張記述ファイルで指定した値と一致させます。

var extContext:ExtensionContext = ExtensionContext.createExtensionContext(拡張ID, コンテキスト作成引数);

ネイティブ拡張関数の呼び出し

 ネイティブ拡張コンテキストに登録されているネイティブ拡張関数を呼び出すには、ExtensionContextインスタンスのcall関数を使って呼び出します。

extContext.call(ネイティブ拡張関数名, ネイティブ拡張関数引数);

作成例

 サンプルファイルでは、ネイティブ拡張ライブラリに登録されているGetVibrator関数を呼び出すクラスを作成します。次のようにコンパイル引数に「-swf-version 13」を指定して、このクラスをコンパイルしてSWCファイルを作成します。

Vibrator\src\example\ane\Vibrator.as
package example.ane
{
    import flash.display.BitmapData;
    import flash.events.EventDispatcher;
    import flash.external.ExtensionContext;

    public class Vibrator extends EventDispatcher
    {
        private var _context:ExtensionContext;

        public function Vibrator()
        {
            try{
                _context = ExtensionContext.createExtensionContext("example.ane.vibrator", "type");
            } catch(e:Error){
            }
        }
        
        public function vibrateNow():void {
            if( _context != null ){
                _context.call("VibrateNow");
            }
        }
        
        public function dispose() : void {
            if( _context != null ){
                _context.dispose();
            }
        }
    }
}

ANEファイルへパッケージ

 ネイティブ拡張ライブラリ、ネイティブ拡張記述ファイル、ネイティブ拡張ActionScriptライブラリが作成できました。次は、AIR Developer Tools(以下、ADT)を使用して、ネイティブ拡張ライブラリとネイティブ拡張ActionScriptライブラリを組み合わせたANEファイルを作成します。

 ANEファイルとは、「.ane」という拡張子がついたActionScriptライブラリ(SWCファイル)の構造をしたファイルです。実際には、ネイティブ拡張ライブラリを含んだActionScriptライブラリとなります。1つのANEファイルには、複数のプラットフォーム向けのネイティブ拡張ライブラリを格納できるため、プラットフォームごとにANEファイルを作成する必要はありません。

ANEファイルパッケージ前準備

 ADTでパッケージする前に、必要な作業が2点あります。

  1. library.swfの抽出

     ネイティブ拡張ActionScriptライブラリのSWCファイルはZip形式なので、 Zipツール等を使って展開することができます。プラットフォームごとにフォルダを作成して、その展開したフォルダの中にあるlibrary.swfをコピーします。

  2. 証明書の作成

     これは、Flash BuilderでAIRアプリケーション開発時に作成する証明書を使うことができます。ネイティブ拡張を作成して配布する際は、AIRのAdobe AIRコード署名証明書を利用すべきです。

ANEファイルパッケージ

 ADTでANEファイルにパッケージするには、次のコマンドを実行します(実際には1行)。

adt
-package
-storetype pkcs12
-keystore 証明書ファイル
-target ane ANEファイル名 ネイティブ拡張記述ファイル
-swc ネイティブ拡張ActionScriptライブラリ
-platform プラットフォーム名
-C プラットフォームディレクトリ .

作成例

 サンプルファイルでは、Vibratorフォルダ直下にて次のADTコマンドを実行し、ANEファイルにパッケージングします(実際には1行)。

adt
-package
-storetype pkcs12
-keystore test.p12
-target ane VibratorExtension.ane extension.xml
-swc bin\VibratorExtension.swc
-platform Android-ARM
-C platform\android .
-platform iPhone-ARM
-C platform\iphone .
-platform default
-C platform\default .

  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 有川 榮一(アリカワ エイイチ)

     Arikawa Eiichi @ AKABANA ( http://akabana.net )  アーキテクト, クラスメソッド株式会社 プリンシパル。  Flex / AIR / CF / FMS / Java / C#を使ったアプリケーションソフトウェア設計と開発を中心に仕事をしています。...

All contents copyright © 2005-2018 Shoeisha Co., Ltd. All rights reserved. ver.1.5