游戏弄完了,要发布到各个平台,ios、Android是肯定少不了的,那么本文就来讲讲Android平台对接代理商付费sdk、各渠道、五大运营商、广告、分享、数据统计等等少不了的jni调用,接sdk真是各种麻烦事儿啊。。。
首先,这么多sdk,功能各有不同,所以得有一个统一的sdk管理类来管理,然后游戏中需要用到什么功能的时候调用指定接口,接口实现时,不同的平台在调用不用的sdk~
//==================================== // 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)