ネイティブ Java API
では、ネイティブ Java APIを使ったネイティブ拡張ライブラリの作成方法を説明します。
開発準備
ネイティブ Java APIを使って開発するには、下記のjarファイルが必要になります。
AIR 3 HOME/lib/android/FlashRuntimeExtensions.jar
jarファイルには、ネイティブ拡張を作成するためのクラスやインターフェイスが定義されています。詳細はネイティブ Java API リファレンス(英語)を参照ください。
今回はネイティブ Java APIのサンプルとして、Androidのバイブレーター機能を実行させるネイティブ拡張ライブラリを作成していきます。
Androidプロジェクト作成
まず、Eclipseを使用してAndroidプロジェクトを作成します。[ファイル]-[新規]-[Android Project]から[New Android Project]ウィザードを開きます。
[New Android Project]ウィザードで、Android SDKのターゲットに「Android 2.3.3」を選択します。
アプリケーション情報を入力します。アプリケーション名を「VibrateANE」として[終了]ボタンをクリックし、プロジェクトを作成します。
Androidプロジェクトが作成できたら、ネイティブ Java APIの「FlashRuntimeExtensions.jar」をビルドパスに指定します。これで開発環境が整います。
ネイティブ拡張関数クラスを作成
プラットフォームの機能にアクセスするロジックを記述するためには、com.adobe.fre.FREFunctionを実装したネイティブ拡張関数クラスを実装します。
ネイティブ拡張関数クラスとは、ActionScript側からネイティブ拡張コンテキスト経由で呼び出すことができるクラスを示します。実装するのは、call関数です。この関数の中にロジックを記述します。ActionScriptにデータを返したい場合は、FREObjectに変換して返り値にします。
作成例
サンプルファイルでは、call関数の中でAndroidのバイブレーター機能を呼び出す処理を実装しています。
public class VibrateNowFunction implements FREFunction { @Override public FREObject call(FREContext context, FREObject[] args) { FREObject result = null; Activity activity = context.getActivity(); Vibrator vb = (Vibrator) activity .getSystemService(Context.VIBRATOR_SERVICE); vb.vibrate(1000); return result; } }
ネイティブ拡張コンテキストクラスを実装
ネイティブ拡張関数をネイティブ拡張コンテキストに登録するため、com.adobe.fre.FREContextクラスを継承してネイティブ拡張コンテキストクラスを実装します。実装する関数については、次の表のようになります。
関数名 | 目的 |
getFunctions | ネイティブ拡張コンテキストに登録するネイティブ拡張関数マップを返す。このマップは、キーを関数名、値をFREFunctionのインスタンスとし、ネイティブ拡張コンテキスト内部で登録される |
dispose | ネイティブ拡張コンテキストが破棄されるときに呼びだされる関数 |
作成例
サンプルファイルでは、VibrateNowFunctionネイティブ拡張関数クラスのインスタンスをVibrateNowという関数名で登録しています。これによって、ActionScriptからVibrateNowをキーにして、VibrateNowFunctionネイティブ拡張関数を呼び出すことができます。
public class VibratorANEContext extends FREContext { public VibratorANEContext() { } @Override public Map<String, FREFunction> getFunctions() { Map<String, FREFunction> functionMap = new HashMap<String, FREFunction>(); functionMap.put("VibrateNow", new VibrateNowFunction()); return functionMap; } @Override public void dispose() { } }
ネイティブ拡張クラスを作成
ネイティブ拡張コンテキストを管理するため、com.adobe.fre.FREExtensionインターフェイスを実装したネイティブ拡張クラスを作成する必要があります。このクラスは、ネイティブ拡張ごとに1つ作成します。
関数名 | 目的 |
initialize | ネイティブ拡張が初期化されるときに呼びだされる関数。ActionScriptのExtensionContext.createExtensionContext()を呼び出すことで実行される |
createContext | ネイティブ拡張コンテキストを生成するための関数。引数の値を用いて目的に応じたコンテキストを作成することも可能 |
dispose | ネイティブ拡張が破棄されるときに呼びだされる関数。ActionScriptのExtensionContext.dispose()を呼び出すことで実行される |
作成例
サンプルファイルでは、createContext関数の戻り値にVibratorContextクラスのインスタンスが返るように実装しています。
public class VibratorANEExtension implements FREExtension { @Override public FREContext createContext(String arg0) { return new VibratorANEContext(); } @Override public void dispose() { } @Override public void initialize() { } }
jarファイル作成
ソースが作成できたら、コンパイルしてjarファイルを作成します。
作成例
サンプルファイルでは、Androidプロジェクトのコンテキストメニューの[エクスポート]より、VibratorANE.jarをエクスポートしています。