陶恒原创,欢迎转载。转载请注明: 转载自csdn,谢谢!
原文地址: cocos2d-x 移植android 植入计费,广告模块_freeket的博客-CSDN博客
1.cocos2d-x 移植android植入计费、广告模块,首先要想到要从C++调用java模块,C++调用java很简单使用JNI
1.1 首先要确认调用的java代码存在(android项目的src目录下,还没有就自己创建)
参考:http://www.cocos2dev.com/?p=151
1、导入头文件
3 | #include "platform/android/jni/JniHelper.h" |
2、实现方法:
03 | if (JniHelper::getStaticMethodInfo(t |
05 | , "com/cocos2dev/JNIDemo/FMJNIHelp" |
09 | , "(Ljava/lang/String;Ljava/lang/String;)V" )) |
13 | jstring stringArg1 = t.env->NewStringUTF( "2" ); // $ |
15 | jstring stringArg2 = t.env->NewStringUTF( "10" ); // count |
17 | t.env->CallStaticVoidMethod(t.classID, t.methodID, stringArg1, stringArg2); |
19 | t.env->DeleteLocalRef(stringArg1); |
21 | t.env->DeleteLocalRef(stringArg2); |
23 | t.env->DeleteLocalRef(t.classID); |
注意:
C++这边请注意一下c++这边方法申明的命名规则,JNIDemo表示java那边方法所在类名,com_cocos2dev_test_该类的包名。nativePaySuccess方法名。
参数规则参考:http://zzqrj.iteye.com/blog/1285262
2.计费成功之后很自然的想到要把结果反馈回来,所以用到java调动C++
参考:http://www.cocos2dev.com/?p=149
假设java这边我需要调用C++那边的函数void PaySuccess(int type);
1、在java这边申明
1 | private static native void nativePaySuccess( int i); |
调用时,
这样java会调用到C++那边。
2、C++那边实现该方法:
07 | void Java_com_cocos2dev_test_JNIDemo_nativePaySuccess(JNIEnv* env, jobject thiz,jint a) |
11 | //这里java调用nativePaySuccess(1);,这里就会被调用。jint a = 1 |