cocos2d-x之jni使用(对接Android各种sdk)

游戏弄完了,要发布到各个平台,ios、Android是肯定少不了的,那么本文就来讲讲Android平台对接代理商付费sdk、各渠道、五大运营商、广告、分享、数据统计等等少不了的jni调用,接sdk真是各种麻烦事儿啊。。。

首先,这么多sdk,功能各有不同,所以得有一个统一的sdk管理类来管理,然后游戏中需要用到什么功能的时候调用指定接口,接口实现时,不同的平台在调用不用的sdk~

然后,c++调用java层:(拿显示广告来举例)

//====================================
// c++
//====================================
//com/ican/redstar/ ---> 调用的类的路径(包名可以和绝对路径名不同)    
//RedStarSDKManager ---> 类名
//showYcAD   ---> 要调用的接口名
//()V    ---> 返回值void  参数void
#define CLASS_NAME "com/ican/redstar/RedStarSDKManager"

#if CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID
	JniMethodInfo t;
	if (JniHelper::getStaticMethodInfo(t,
		CLASS_NAME,
		"showYcAD",
		"()V"))
	{
		t.env->CallStaticVoidMethod(t.classID, t.methodID);
		t.env->DeleteLocalRef(t.classID);
	}else
	{
		CCLog("C++ call java showYcAd faild!");
	}
#endif

//========================================
//java
//========================================
public static void showYcAD(){
		Log.d("ycad", "call from cocos2d-x...");
		
		try{
			YcCpManager.getInstance().showCp(getContext().getApplicationContext());
		}catch(Exception e){
			Log.d("ycad", "show cp thow uncaught exception");
		}
		
	}

没错,很简单~,当然,如果要传递参数,或者函数有返回值,会稍微变得复杂一些,最后来讨论,先看java层掉用c++

//==============================
//java
//==============================
//直接声明一个native方法就行了 ,比如用户登录返回
//jni  callback
private static native void loginEndCallBack(int loginSuccess, String useName);


//==============================
//c++
//==============================
//登录回调
//com_ican_redstar_RedStarSDKManager ---> 路径、类名、函数名用下划线隔开
//
JNIEXPORT void JNICALL Java_com_ican_redstar_RedStarSDKManager_loginEndCallBack
	(JNIEnv *env, jobject thiz, jint loginSuccess, jstring useName)
{
	jboolean jb_copy = false;
	string nameStr = string(env->GetStringUTFChars(useName, &jb_copy));
	int sec = loginSuccess;

	CCLog("%s jni Called true  [login = %d, userName = %s]", __FUNCTION__, sec, nameStr.c_str());

	RedStarSDKManager::getInstance()->loginCallBack(sec, nameStr);
}

好棒,java调c++也很简单。

最后,我们来看看参数传递,与函数返回吧:

借鉴一下其他朋友的博客吧,午休了~

http://www.blogjava.net/china-qd/archive/2006/04/29/44002.html(详解了参数传递)

http://blog.csdn.net/luxiaoyu_sdc/article/details/15874505(详解了cocos2d::JniHelper)

原文地址:https://www.cnblogs.com/songcf/p/3799303.html