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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值