cocos2dx C++调用android,android调用C++

 C++调用android

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再调用实例方法。

android调用C++

 1:c++层代码示例,建立一个CPP的类

#if(CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#include "platform/android/jni/JniHelper.h"
#include <jni.h>
 
extern "C"
{
//java传入一个string,无返回值,严格按照这个格式JAVA_方法路径【以_隔开】(JNIENV* env,jobject this,方法参数)
JNIEXPORT void JNICALL Java_org_cocos2dx_cpp_AppActivity_onKeyback(JNIEnv* env,jclass clazz,jstring info) 
{

//your code
}
}
#endif
2:Android 层,在主Activity中添加方法
public static native void onKeyback(String info); //声明c++的方法
原文地址:https://www.cnblogs.com/mingfuqishi/p/14670426.html