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)

cocos2d-x之jni使用(对接Android各种sdk),布布扣,bubuko.com

时间: 2024-07-31 14:29:08

cocos2d-x之jni使用(对接Android各种sdk)的相关文章

cocos2d 中使用jni C++ 调用 Java 方法

1.简单数据类型例子 假设我们Java中有这么一个open的静态方法,它没有参数,有一个int的返回值.怎么在C++中调用它呢? package cb.CbCCBLE; public class CbCCBLECentralManager { public static final String TAG = "CbCCBLECentralManager Android"; public static int open() { Log.d(TAG,"open"); r

cocos2d 中使用jni Java 调用 C++ 方法

1.首先是LoadLibrary cocos2d中的C++代码会编译成一个.so文件,放在安卓目录下的libs/armeabi 下,然后java会load进来,这步我们不用做了,因为cocos2d已经帮我们做好了. package cb.CbCCBLE; public class CbCCBLECentralManager { public static final String TAG = "CbCCBLECentralManager Android"; public native

【转】Android 学习笔记——利用JNI技术在Android中调用、调试C++代码

原文网址:http://cherishlc.iteye.com/blog/1756762 在Android中调用C++其实就是在Java中调用C++代码,只是在windows下编译生成DLL,在Android中会生成Linux系统下的.so文件(好吧,其实我基本没用过Linux). 没写过JNI的可以看看我之前的博客(Windows下利用Visual Studio开发的过程):http://cherishlc.iteye.com/admin/blogs/1328136 以及自动生成工具swig的

同步、更新、下载Android Source & SDK from 国内镜像站

转自: 同步.更新.下载Android Source & SDK from 国内镜像站 Download the android source from china mirrors???? 以前都是从Google的站点下载同步更新的,但是现在有了国内的镜像站点就好多了 帮助 ?https://wiki.tuna.tsinghua.edu.cn/MirrorUsage/android ? 仓库地址: git://aosp.tuna.tsinghua.edu.cn/android/ ? 使用浏览器访

ubuntu14.04 配置android及sdk等相关操作

1.安装jdk,具体步骤在前面的文章中有专门写过 2.下载eclipse,网上一般推荐下载Eclipse IDE for Java Developers,但我觉得一般java开发这都用Eclipse IDE for Java EE Developers,插件也比较全,所以我推荐下后者 3.下载sdk a.最好的使用代理访问http://developer.android.com,因为比较快 b.访问http://developer.android.com/sdk/index.html,下载sdk

android获取sdk更新

http://www.th7.cn/Program/Android/201310/154981.shtml 网上许多解决 Android SDK Manager 无法更新(下载)的问题的方法基本都是将https改为http,并修改host文件,其实对于已经翻墙的用户来说,有一种更简便的方法,就是利用Proxy. 其实在option中已经很明显的给出了Proxy Setting,具体解决方法如下: 打 Android SDK Manager,然后选择Tools -> Options 然后将Prox

转-android 支付宝SDK集成

http://blog.csdn.net/kroclin/article/details/40746779 一.前言 最近做的项目刚好要集成支付宝,上网找了很多资料,介绍得感觉不是很全面,所以我经过这两天的集成,顺便记录下来,学习交流.需要的朋友也可以看看.主要集成还是参照了官方给出的demo,再参照demo进行封装,现在使用起来变得方便好多.而且文章里面还提到了集成过程中遇到的一些问题,当然最后也都解决了. 二.准备工作 支付宝开放平台上面也明确了,目前仅仅支持企业用户申请,所以个人开发者就没

百度Android语音识别SDK语义理解与解析方法

百度语义理解开放平台面向互联网开发者提供自然语言文本的解析服务,也就是可以根据文本的意图解析成相应的表示. 为了易于人阅读,同时也方便机器解析和生成,意图表示协议采用 json 语言进行描述,采用 gb18030 编码. json 语言的基本概念: 1.属性名/属性值 即键值对(key-value) 2.数组 在 json 中是"[]"括起来的内容,数据结构为 ["value1","value2",...],取值方式和所有语言中一样,使用索引获取

【Android类型SDK测试(二)】环境基础

(一)语言 Android使用的Java语言,所以要测试Android类型的SDK,Java的基础知识还是需要的. 另外,Android中有NDK类型的编程,需要知道C相关的知识. (二)环境准备 Android开发环境的搭建网上一搜就一大堆,看看就懂.这里我只是列举一下,请读者按需查找. 申明一点,作为Android类型SDK的测试,我们不能仅停留在设备上点击按钮,看看功能和展示,更多的时候,我们需要代码,需要日志,所以 Android开发环境对于我们来说,就是测试环境,必不可少. http: