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接入主流分为这么几类,登录.支付. ...
随机推荐
- Python面向对象2
方法 公共方法 私有方法 类方法 静态方法 #!usr/bin/python #coding:utf8 class Milo(): name = 'csvt' def fun1(self): prin ...
- vs2012不能打开项目解决办法
只要卸载这两个不定就能解决问题.
- Junit3.8 私有方法测试
1. 测试类的私有方法时可以采取两种方式:1) 修改方法的访问修饰符,将private修改为default或public(但不推荐采取这种方式).2) 使用反射在测试类中调用目标类的私有方法(推荐). ...
- DelphiXE7中创建WebService(服务端+客户端)
相关资料: http://www.2ccc.com/news/Html/?1507.html http://www.dfwlt.com/forum.php?mod=viewthread&tid ...
- eclispe输入@注解时提示所有注解的设置
修改输入@提示所有的注解提示方法 eclipse下windows-->preference-->java-->editor-->Content Assist下的Enable a ...
- Git使用过程中出现项目文件无法签入Source Control的情况
在VS中使用Git进行项目source control的过程中,有些文件不在source control之下,右键点击时,也找不到Undo, Commit命令 无法把他们签入进Source Contr ...
- 转载 JQuery中attr属性和JQuery.data()学习
转载原地址: http://www.cnblogs.com/yeminglong/p/5405745.html 用html直接data-key来存放,key必须全部小写. <div data-m ...
- C#学习笔记(八):扩展方法
还记得第一次使用DOTween时,发现缓动方法竟然是可以直接用Transform对象中调用到,当时就被震撼到了(那是还是C#小白一只).好了不多说了,今天来学习一下C#的这个特性——扩展方法. 扩展方 ...
- powershell里添加对git的支持
在powershell命令行里依次运行 1. (new-object Net.WebClient).DownloadString("http://psget.net/GetPsGet.ps1 ...
- Struts2常量的具体用法实例(一)
XML代码: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC ...