cocos2dxの最大の特徴は、一つのリソース(コードや素材)で、iOS/Androidのアプリが作成できることです。 ただ、広告やtwitterなど、それぞれのOSごとに個別の設定をしないといけない場合があります。この時に利用できるのが、JNIという機能です。 これを使えば、プロジェクト上で記載をしたメソッドをiOS/Androidともに利用できたりします。 今回は、この「JNI」の利用方法を紹介します。
iOS->Androidのメソッドを呼び出す
iOS(Xcode)上から、Androidのメソッドを呼び出す方法を紹介します。
主な利用方法
- 広告の表示・非表示
- tweetの呼び出し
iOS側の実装
まずは以下のような3つのファイルを作成してください。
[.cpp]は、Android側のメソッドを呼び出すために使います。 [.mm]には、iOS側で呼び出すメソッドを記載します。
それでは[.cpp]のファイルを見てみましょう。 [c]
//JniController.cpp
include "JniController.h"
include "platform/android/jni/JniHelper.h"
include <jni.h>
include <android/log.h>
// 呼び出すメソッドが書かれているパッケージ名とjavaクラス名
define CLASS_NAME "jp/albatrus/com/MyProject"
using namespace std; using namespace cocos2d;
//今回はfunc1をメソッド名にしています。 void JniController::func1() { JniMethodInfo t; // クラス名とメソッド名を指定します。 if (JniHelper::getStaticMethodInfo(t, CLASS_NAME, "func1", "()V")) { // voidなので、CallStaticVoidMethodで呼ぶ t.env->CallStaticVoidMethod(t.classID, t.methodID); // 解放 t.env->DeleteLocalRef(t.classID); } }
[/c]
注意していただきたいのが、Android側で呼び出すメソッドが記載されているパッケージ名です。 例えば、呼び出したいメソッドが以下の様な場合は、上記で書いたようになります。
Android側の実装
iOSの設定ができれば、後は、先ほど指定したパッケージにあるJavaファイルにメソッドを記載すれば完了です。 [c]
//MyProject.java
public static void func1(){
//Androidでの処理を記述
}
[/c]
これで完了です。 後は、fnuc1メソッドを必要な箇所で呼び出して下さい。
Android->iOSのメソッドを呼び出す
今度は、先ほどとは逆に、Andorid側からiOSのメソッドを呼び出す方法です。
Android側の実装
[Jni]フォルダに入っている、main.cppを開きます。
ここに、iOS側で呼び出したいメソッドを記載します。
- パッケージ名 : jp.albatrus.com.MyProject
- 呼び出すメソッド:func1
[c]
//メソッドを実行するプロジェクトとメソッドを記載します。
//javaパッケージ名メソッド名 と指定します。 void Java_jp_albatrus_com_MyProject_func1(JNIEnv* env, jobject thiz) { // cocos2d-x側で実行したいメソッドを書く AppDelegate::sharedScene()->func1(); }
[/c]
先ほど設定したパッケージ内のJavaファイル内で、メソッドが利用できます。 適切なタイミングで利用しましょう。
[c]
//MyProject.java
public class MyProject extends Cocos2dxActivity{
private static Cocos2dxActivity me = null;
//JNI
private static native void func1();
protected void onCreate(Bundle savedInstanceState){
}
//アプリが終了する時
protected void onDestroy(){
//JNIで設定したiOS側のメソッドを呼び出す
MyProject.func1();
super.onDestroy();
}
[/c]
iOS側、今回はAppDelegateクラスでfunc1()を書き忘れないように注意下さい。 これで、完了です。
こちらを参考にしました。 こちらも見てみて下さい。