java部分: 一个类,一个静态方法,一个实例方法
public class AppActivity extends Cocos2dxActivity{ public static Context mContext; //记录类实例 @OverrIDe protected voID onCreate(Bundle savedInstanceState) { mContext = AppActivity .this; } // c++中調用的方法 public static Object rtnActivity() { System.out.println("----------rtnActivity"); return mContext; } public voID showAD() { System.out.println("showAD 成功"); }}
C++部分:
#include "cocos2d.h"//将所有代码包含在预编译块里,防止找不到<jni.h>报错USING_NS_CC;#include <vector>using namespace std;#include "JniTest.h"#if (CC_TARGET_PLATFORM==CC_PLATFORM_ANDROID)#include <jni.h> //这个文件在ndk中,所以放在预编判断块中,不然编译器找不到这个文件会报错#include "platform/androID/jni/JniHelper.h"JniTest::Jnitest(){}JniTest::~Jnitest(){}//请求广告 voID JniTest::ddcallAd() { //定义Jni函数信息结构体; JniMethodInfo minfo; //返回一个bool值表示是否找到此函数; bool isHave = JniHelper::getStaticmethodInfo (minfo,"org/cocos2dx/lua/MergeAppActivity","rtnActivity", "()Ljava/lang/Object;"); jobject activityObj; if (isHave) { //CallStaticObjectMethod调用java函数,并把返回值赋值给activityObj activityObj = minfo.env->CallStaticObjectMethod(minfo.classID, minfo.methodID); isHave = JniHelper::getmethodInfo( minfo,"org/cocos2dx/lua/MergeAppActivity","showAD","()V"); if (!isHave) { cocos2d::log("jni:showAD 函数不存在;"); } else { //调用displayWebVIEw函数,并传入参数 minfo.env->CallVoIDMethod(activityObj, minfo.methodID); } } }#endif
先getStaticmethodInfo找到静态方法,
CallStaticObjectMethod执行静态方法得到类实例,
getmethodInfo再找实例方法,
CallVoIDMethod再调用实例方法。
总结
以上是内存溢出为你收集整理的cocos2dx C++调用android全部内容,希望文章能够帮你解决cocos2dx C++调用android所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)