4: 2016-06-25 (土) 17:23:00 njf[6] [7] [8] | 5: 2016-06-26 (日) 11:54:13 njf[6] [9] [10] | ||
---|---|---|---|
Line 167: | Line 167: | ||
いよいよANEの呼び出し部分を作成します。この部分でエラーが起こるとソースを変更するたびにいちいちANE作り替えなければならずデバッグが面倒なので、できるだけシンプルにするように心がけてください。 | いよいよANEの呼び出し部分を作成します。この部分でエラーが起こるとソースを変更するたびにいちいちANE作り替えなければならずデバッグが面倒なので、できるだけシンプルにするように心がけてください。 | ||
- | (この記事は「[[How to build ANE in Android Studio:http://www.myflashlabs.com/build-ane-android-studio/]] 」を参考にしています) | ||
まず、FlashRuntimeExtensions.jarをadobe airのSDKの中の「lib/android」の下から見つけておきます。次にAndroid Studioの左のナビゲーションのタブを「Project」に切り替えlibsの下にさきほどの「FlashRuntimeExtensions.jar」をここにコピー&ペーストします。 | まず、FlashRuntimeExtensions.jarをadobe airのSDKの中の「lib/android」の下から見つけておきます。次にAndroid Studioの左のナビゲーションのタブを「Project」に切り替えlibsの下にさきほどの「FlashRuntimeExtensions.jar」をここにコピー&ペーストします。 | ||
Line 182: | Line 181: | ||
うまくいっていればanealertのbuild.gradleのdependenciesに次の1行が加わっているはずです。 | うまくいっていればanealertのbuild.gradleのdependenciesに次の1行が加わっているはずです。 | ||
- | compile files('lib/FlashRuntimeExtensions.jar') | ||
+ | compile files('libs/FlashRuntimeExtensions.jar') | ||
これでANE呼び出しに必要なAPIが使えるようになりました。 | これで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には呼び出しの時の引数が入っています。 | ||
*jarファイルの取り出し [#veeed4bc] | *jarファイルの取り出し [#veeed4bc] | ||
+ | (この記事は「[[How to build ANE in Android Studio:http://www.myflashlabs.com/build-ane-android-studio/]] 」を参考にしています) | ||
+ | |||
+ | ここまでくるとANEに必要なjarファイルを作成するのは簡単です。 |
(This host) = https://njf.jp