ページへ戻る
− Links
印刷
AndroidでのANEの作成/Android側の作成
の編集 ::
NJF Wiki
xpwiki
:
AndroidでのANEの作成
/
Android側の作成
の編集
# a17e7947 の編集
ページ内容:
*ANE呼び出し処理の追加 [#a17e7947] いよいよANEの呼び出し部分を作成します。この部分でエラーが起こるとソースを変更するたびにいちいちANE作り替えなければならずデバッグが面倒なので、できるだけシンプルにするように心がけてください。 まず、FlashRuntimeExtensions.jarをadobe airのSDKの中の「lib/android」の下から見つけておきます。次にAndroid Studioの左のナビゲーションのタブを「Project」に切り替えlibsの下にさきほどの「FlashRuntimeExtensions.jar」をここにコピー&ペーストします。 &ref(スクリーンショット 2016-06-26 0.23.36.png,mw:480,mh:360); この「FlashRuntimeExtensions.jar」をAndroid Studio上で右クリックして、「Add as Library」を選びます。 &ref(addaslib.jpg,mw:480,mh:360); どのモジュールに加えるかを訪ねられるので「anealert」に加えます。 &ref(createlib.jpg,mw:480,mh:360); うまくいっていればanealertのbuild.gradleのdependenciesに次の1行が加わっているはずです。 compile files('libs/FlashRuntimeExtensions.jar') これでANE呼び出しに必要なAPIが使えるようになりました。 ここで一度ANEからJavaのソースが呼び出される過程を整理しておきます。 +actionscriptでExtensionContext.createExtensionContextメソッドをIDと初期化変数を引数として呼び出す。 +Java側ではIDに対応するFREExtensionが初期化される。このとき初期化変数も渡される。 +actionscriptでExtensionContextのcallメソッドを関数のIDとともに呼び出す。 +Java側ではその関数のIDに対応するFREFunctionクラスのcallメソッドが呼び出される。 となります。 つまりANE呼び出しには二つのクラスが必要です。一つは初期化を行う「FREExtension」を継承したクラスと、もう一つは実際に処理を定義する「FREFunction」を継承したクラスです。 ではまず、FREExtensionを継承したAneHelloWorldFREExtensionクラスは以下のようになります。 package njf.jp.anealert; import com.adobe.fre.FREContext; import com.adobe.fre.FREExtension; import com.adobe.fre.FREFunction; import java.util.HashMap; import java.util.Map; public class ANEAlertFREExtension implements FREExtension { @Override public FREContext createContext(String s) { FREContext context = new FREContext() { @Override public Map<String, FREFunction> getFunctions() { Map<String, FREFunction> result = new HashMap<String, FREFunction>(); result.put("alert", new ANEAlertFREFunction()); return result; } @Override public void dispose() { } }; return context; } @Override public void dispose() { } @Override public void initialize() { } } ここで重要なのはresultというHashMapに"alert"という文字列と、次に定義するANEAlertFREFunctionクラスを設定しているところです。このHashMapをFREContextという、ANEのデータを管理するクラスに設定して返してやることで、"alert"という関数IDによってANEAlertFREFunctionクラスのcallメソッドが呼び出されるようになります。 では最後に実際に呼び出されるクラス、FREFunctionを継承したANEAlertFREFunctionを定義します。 package njf.jp.anealert; import android.app.Activity; import android.util.Log; import com.adobe.fre.FREContext; import com.adobe.fre.FREFunction; import com.adobe.fre.FREObject; public class ANEAlertFREFunction implements FREFunction { private ANEAlert aneAlert; @Override public FREObject call(FREContext freContext, FREObject[] freObjects) { String title = "TITLE"; String message = "MESSAGE"; try { title = freObjects[0].getAsString(); } catch (Exception e) { Log.e("njf.jp.anealert", "FunctionAdFunction:cant parse arg 1"); } try { title = freObjects[1].getAsString(); } catch (Exception e) { Log.e("njf.jp.anealert", "FunctionAdFunction:cant parse arg 2"); } if(aneAlert == null){ aneAlert = new ANEAlert(freContext.getActivity()); } aneAlert.showAlert(title,message); return null; } } ここでcallメソッドが実際に呼び出されるメソッド、その引数であるFREContextにはアクテビティの情報など、FREObjectには呼び出しの時の引数が入っています。
編集の要約:
Q & A 認証:
ページ更新時は次の質問にお答えください。(プレビュー時は必要ありません)
Q:
日本の首都は?(漢字で)
A:
お名前:
タイムスタンプを変更しない
テキスト整形のルールを表示する
[1]
Links list
(This host) = https://njf.jp
(This host)
/cms/modules/xpwiki/?cmd=edit&help=true&page=Android%E3%81%A7%E3%81%AEANE%E3%81%AE%E4%BD%9C%E6%88%90%2FAndroid%E5%81%B4%E3%81%AE%E4%BD%9C%E6%88%90