關於cocos2d-x 和安卓之間的相互調用
近期在研究cocos2d遊戲移植安卓須要調用非常多方法。所以在研究之中寫下它們之間相互調用
首先,cocos2d調用安卓
在一個.h文件裏加入頭文件
#include <jni.h>
#include "platform\android\jni\JniHelper.h"
JniMethodInfo minfo;//定義Jni函數信息結構體
//getStaticMethodInfo 次函數返回一個bool值表示是否找到此函數
bool isHave = JniHelper::getStaticMethodInfo(minfo, "com/zhangying/jni/applay", "testFunWithStringAndRtn", "(I)V");
com/zhangying/jni/applay參數為調用安卓中的類的全路徑。
testFunWithStringAndRtn為類中要調用的方法
(I)V 返回值和傳入參數的類型
jobject jobj;
if (!isHave) {
CCLog("不存在");
}
else{
CCLog("存在");
//調用此函數
jobj = minfo.env->CallStaticObjectMethod(minfo.classID, minfo.methodID, this->choiceMoney);
// ReadData::setUserDefaultInt("RECHARGE", this->choiceMoney);
完畢以上步驟就能夠測試cocos2d調用安卓中的代碼了
然後安卓調用cocos2d
首先在項目中找到jni中的hellocpp中的main.cpp
在當中增加
#include <android/log.h>
#include "data/ReadData.h"
#define LOG_TAG "main"
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__)
using namespace cocos2d;
void cocos_android_app_init (JNIEnv* env, jobject thiz) {
LOGD("cocos_android_app_init");
AppDelegate *pAppDelegate = new AppDelegate();
}
一下代碼是自己增加的 上面的一些自帶的不用改動
extern "C"
{
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
void Java_com_yiqu_mobilesdk_iap_IAPOrder_callbackMobiles(JNIEnv *env, jobject thiz)
{
CCLog("測試是否進入");
}
#endif
}
註意:
Java_com_yiqu_mobilesdk_iap_IAPOrder_callbackMobiles這個名字不是隨便定義的
Java是固定的com.yiqu.mobilesdk.iap是包名 IAPOrder是類名字,callbackMobiles是你要調用的方法名字
這樣就寫成了這種方法
在你要調用cocos2d的java類中寫上要調用的方法名字 寫法例如以下
public native static void callbackMobiles(); 名字隨便定義,可是native不能丟掉
然後在該類中直接調用callbackMobiles()
就能夠直接進入到CCLog("測試是否進入");中了
哈哈 結束了,這是本人正在用的遊戲中支付的一塊代碼調用,執行都正常,如有不好的地方望指出
也可進入群:252799892 大家一起交流
假設感覺對你有幫助給個評價
關於cocos2d-x 和安卓之間的相互調用