• TOP
  • >
  • その他
  • >
  • Jniを利用する

Jniを利用する

cocos2dxはiOS/Android用のアプリを開発することができるのですが、一部ネイティブ言語に依存する処理があります。
その際に利用するのが[Jni]です。
これを利用すれば、Javaで書かれたメソッドを呼び出すことができます。

今回は基本的な「戻り値」「引数」のないメソッドを呼び出す方法を紹介します。

共通クラスを作成する

iOSとAndoridで利用できる「共通クラス」を作成します。
これを使えば、OS毎の処理を実装できます。
  • Hogehoge.h
  • Hogehoge.mm : iOS用
  • Hogehoge.cpp : Android用

上記のような3つのファイルを作成して下さい。

ヘッダー

ここには、iOS/Androidで呼び出すメソッドを作成します。
class Hogehoge{

  public:
  
    static void hogeAction();
};

mm

ここにはiOSで利用する処理を記述します。
void Hogehoge::hogeAction(){
  
    //ここにiOSの処理を記述して下さい。

}

cpp

ここでAndroid側のメソッドを呼び出す処理を記述します。
ここで「Jni」を利用します。
#include "Hogehoge.h"
#include "platform/android/jni/JniHelper.h"

//パッケージ名を指定
#define CLASS_NAME "org/cocos2dx/cpp/AppActivity"

void Hogehoge::hogeAction(){
        
     cocos2d::JniMethodInfo methodInfo;
        
     //AppActivity.javaで呼び出すメソッドを指定
     if (!cocos2d::JniHelper::getStaticMethodInfo(methodInfo,CLASS_NAME,"hogeAction", "()V"))
     {
            return;
     }
        
     methodInfo.env->CallStaticObjectMethod(methodInfo.classID,methodInfo.methodID);
        
     //追記 Android 5.0 Lolipop では [CallStaticVoidMethod]を使わないエラーが出ます。
     methodInfo.env->CallStaticVoidMethod(methodInfo.classID,methodInfo.methodID);
}   
cppファイルについては、XcodeのTargetから外して下さい。
2014-6-13-fdsasa

Android側の処理

さきほどcppで記載をしたJniで呼び出すメソッドを記載します。
public class AppActivity extends Cocos2dxActivity {


    public static void hogeAction(){

		Log.d("coocs2dx Jni","Android action 1");
	}

	

}

            

経営育成ゲーム「わたしの動物園」をリリースしました!

cocos2dxを使って作成したアプリを作成しました。
無料で遊べますので、ぜひゲーム作りの参考にしてみて下さい!

【Sponsored Link】

更新履歴