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)的更多相关文章
- cocos2d 中使用jni C++ 调用 Java 方法
1.简单数据类型样例 如果我们Java中有这么一个open的静态方法,它没有參数,有一个int的返回值.怎么在C++中调用它呢? package cb.CbCCBLE; public class Cb ...
- cocos2d 中使用jni Java 调用 C++ 方法
1.首先是LoadLibrary cocos2d中的C++代码会编译成一个.so文件.放在安卓文件夹下的libs/armeabi 下,然后java会load进来,这步我们不用做了,由于cocos2d已 ...
- Android之SDK、NDK、JNI和so文件
1. SDK Android SDK(AndroidSoftware Development Kit),即Android软件开发工具包,Android的SDK基于Java实现,这意味着基于An ...
- 【转】Android 学习笔记——利用JNI技术在Android中调用、调试C++代码
原文网址:http://cherishlc.iteye.com/blog/1756762 在Android中调用C++其实就是在Java中调用C++代码,只是在windows下编译生成DLL,在And ...
- 利用JNI技术在Android中调用C++形式的OpenGL ES 2.0函数
1. 打开Eclipse,File-->New-->Project…-->Android-->AndroidApplication Projec ...
- mac下搭建cocos2d-x2.2.1版本android编译环境教程
首先我们先以引擎2.2.1为例子来新建一个TestJni的项目,来作为测试例. 创建方式如下: python create_project.py -project TestJni -package o ...
- [转][android][利用JNI技术在Android中调用、调试C++代码]
在Android中调用C++其实就是在Java中调用C++代码,只是在windows下编译生成DLL,在Android中会生成Linux系统下的.so文件(好吧,其实我基本没用过Linux). 没写过 ...
- Android开发 对接微信分享SDK总结
原文:Android开发 对接微信分享SDK总结 - Stars-One的杂货小窝 公司项目需要对接微信分享,本来之前准备对接友盟分享的,但友盟的分享实际参数太多,而我又只需要对接一个微信分享,于是便 ...
- SDK接入(1)之Android Facebook SDK接入
SDK接入(1)之Android Facebook SDK接入 由于游戏已上线,且处于维护阶段,所以有空写写各种SDK接入过程和遇到的问题,也当作一种工作总结.SDK接入主流分为这么几类,登录.支付. ...
随机推荐
- 一个使用微软Azure blob实现文件下载功能的实例-附带源文件
Running the sample Please follow the steps below. Step 1: Open the CSAzureServeFilesFromBlobStorage. ...
- XNA Game Studio 4.0 Programming 随便读,随便记 “Game Class”
XNA 中的 Game 类,是所有神奇事情发生的地方.几乎游戏中所有的事情都由它来操办. 它是项目中的王者,让我们深入窥探一番: 虚方法 Game 本身从众多其它地方继续了许多能力才能完成游戏中的事情 ...
- 一起刷LeetCode3-Longest Substring With Repeating Characters
拖延症太严重了TAT,真心要处理一下这个问题了,感觉很不好! --------------------------------------------------------------------- ...
- HDFS分布式文件系统设计思想
HDFS设计目标 1)硬件错误是常态,数据保存需要冗余. 2)数据批量读取,Hadoop擅长数据分析而不是事务处理. 3)大规模数据集. 4)简单一致醒模型,降低系统复杂度,文件一次写入多次读取, 5 ...
- HDU-4747 Mex 线段树
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4747 题意:求一个数列中,所有mex(L,R)的和. 注意到mex是单调不降的,那么首先预处理出mex ...
- Nginx 工作原理和优化、漏洞
1. Nginx的模块与工作原理 Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block(locat ...
- Spring InitializingBean and DisposableBean example
In Spring, InitializingBean and DisposableBean are two marker interfaces, a useful way for Spring to ...
- UVA 11426 GCD - Extreme (II) (欧拉函数+筛法)
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=70017#problem/O 题意是给你n,求所有gcd(i , j)的和,其中 ...
- contest7.20(暴力专练)
此次练习的地址: http://acm.hust.edu.cn/vjudge/contest/view.action?cid=26732#overview 密码 acmore Problem A(P ...
- UVaLive 7375 Hilbert Sort (递归,四分图,模拟)
题意:告诉你一条希尔伯特曲线的大小,然后给你n 个人,及n 个人的坐标,你的起点是左下角,终点是右下角,按照希尔伯特的曲线去走,按照这个顺序给n个人排序, 按顺序输出每个人的名字! 析:这就是一个四分 ...