4: 2016-06-25 (土) 17:23:00 njf |
5: 2016-06-26 (日) 11:54:13 njf |
| | | |
| いよいよ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」をここにコピー&ペーストします。 |
| | | |
| うまくいっていれば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ファイルを作成するのは簡単です。 |