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

前端之家收集整理的这篇文章主要介绍了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://www.jb51.cc/article/p-hvjxhawr-bhn.html(详解了cocos2d::JniHelper)

猜你在找的Cocos2d-x相关文章