c++与java相互调用:当点击游戏购买某一个道具时,步骤是:由于cocos已经封装好了调用java底层东西JniHelper类,所以直接拿来用就行了,头文件声明:
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#include <jni.h>
#include "platform/android/jni/JniHelper.h"
#include <android/log.h>
#endif
1.
首先要获取java类的所有函数信息,首先在java中获取myInstance这个函数,并把获取到的classid和methodid等信息保存能到info中,在用call函数来调用myInstance这个函数。可能这个地方跟平常思维不大一样,上面的是获取下面的是调用。
其实这个步骤是可以理解为调用我们写的java函数前一个固定写法,要先通过静态方法来“唤醒”java,如果不加的话会产生闪退等bug,当然具体的函数可以随意定义。
http://blog.csdn.net/yuechuzhao/article/details/9283847
2.
函数作用同1,ILjava/lang/String表示输入int string两个类型,当然也可以分开写,(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;)V:意思是java中传递了8个参数返回Void类型,注意;你能掉。
具体对照表可参考http://blog.sina.com.cn/s/blog_7010db8c0100mt05.html。
callVoidMethod(jobject,infoi.method,.....)。
另const char*转jstring使用NewStringUTF()函数
Java调用c++函数:这是通过JNI来调用C++的函数
首先要在java中声明为native类型函数,例如:private native void deliverProduct(String orderIdListString);
然后在C++里实现。
例如:
extern "C"
{
void Java_org_cocos2dx_cpp_AppActivity_deliverProduct(JNIEnv* env, jobject thiz, jstring s)
{
const char *orderIdList = env->GetStringUTFChars(s, 0);
LOGD("pay-deliverProduct = %s", orderIdList);
PurchaseManager::getInstance()->addSuccessPayOrderIdString(orderIdList);
}
}
解释下:Java_org_cocos2dx_cpp_AppActivity表示java中org.coco2dx.cpp文件夹下的AppActivity文件中deliverProduct函数。