cocos2dx接入百度sdk 接入u8sdk后,怎么导出看不到游戏源码的母工程

U8SDK:第三方SDK接入产品服务模式的创新|U8SDK|CP_凤凰游戏
U8SDK:第三方SDK接入产品服务模式的创新
用微信扫描二维码分享至好友和朋友圈
U8SDK助力浙江首游的《永夜君王》同时在Android和iOS等多个渠道快速成功上线,昨日还一举上升到Appstore付费榜榜首。在此次合作过程中,U8SDK全力提供技术支持,对于渠道SDK的升级,产品的意见反馈和改进,做到24小时内解决,给对方CP留下了深刻的印象。这里我们给大家分享下U8SDK在和CP合作过程中,对第三方渠道SDK接入模式的一个探索和改进。
U8SDK是一套第三方渠道SDK接入解决方案,包括Android和iOS两个平台的接入框架,打包工具,U3D、Cocos2dx、Flash等多个平台的API,以及已经开源了的U8Server(统一的用户登录认证中心和支付中心) 近日,U8SDK助力浙江首游的《永夜君王》同时在Android和iOS等多个渠道快速成功上线,昨日还一举上升到Appstore付费榜榜首。在此次合作过程中,U8SDK全力提供技术支持,对于渠道SDK的升级,产品的意见反馈和改进,做到24小时内解决,给对方CP留下了深刻的印象。这里我们给大家分享下U8SDK在和CP合作过程中,对第三方渠道SDK接入模式的一个探索和改进。 U8SDK从诞生到现在,在行业老大的压力和干涉下,U8SDK的成长超过了我们自己的预期,目前已经有超过200家CP在使用U8SDK。U8SDK的诞生是一个意外,但是现在想想也是一个必然。因为U8SDK是在广大开发者的要求和反馈下诞生的。最初我们仅仅只有一套视频教程,用于分享统一渠道SDK打包框架的原理和实现方式,后来看视频的人越来越多,要代码的人越来越多,反馈建议的人也越来越多。就这样,U8SDK诞生了。 既然作为一款产品来做了,那么我们遇到的问题,估计其他走在前面的类似产品都遇到过,我们面临着宣传上的难题,面临着服务模式上的困惑,面临着售后技术支持的压力,面临着产品适用性和改进的风险等等。所以,怎么办呢? 因为已经有行业巨头的存在了,要想立足,就不能提供和他们一样的模式,我看了其他几个已经死去或者半死不活的产品,发现他们提供的模式和行业巨头一模一样,这样别人使用你的产品,和使用巨头的产品,有什么区别呢?相反,人家巨头的产品足够的成熟稳定,人家更不可能用你这个刚做出来还BUG多多的产品。 于是,我们研究了,巨头产品的不足和缺陷,同时也咨询了那些第一批使用U8SDK的用户,选择U8的理由。这让我们看到一条新的道路。 巨头采用的模式很俗套,却是很安全和赚钱的套路:闭源免费产品+VIP企业版本、服务器部署等高级服务。这种方式,我们研究下来,主要有几个主要的缺点: 1、渠道SDK支持数量多,但是更新升级缓慢 2、闭源,CP仅仅有产品,没有代码,出了问题风险高,不容易排查,还要等待对方的服务时间。同时这些产品不可能及时将所有渠道SDK都接入,各个CP总有部分渠道是需要自己来接入的,产品利用程度和灵活性不高。 3、部分大渠道平台,比如九游,百度,安智等明确不支持这些产品,因为分成和服务器数据安全问题。这导致使用这些产品,有点蛋蛋的忧伤,这些渠道还得自己另外去单独接入。同时,不知道会不会有更多的渠道因为数据安全和分成问题而拒绝使用这些产品,导致使用产品的成本和风险都太高。 4、免费版本提供的服务极其不完善(本质还是为了转化免费产品用户去使用付费版本) 5、部分竞品使用云端打包,不利于CP将打包工具和自己的业务系统集成起来 6、强制使用自己的服务器,无法定制和CP自己的服务器集成起来。导致用户数据和支付数据走第三方接入平台,安全隐患和数据安全,是CP担心的主要问题。 7、售后服务和时间,无法尽量满足CP的需求(快上线,CP加班加点很正常) 8、企业版价格高昂,对于创业型公司来说,负担较重。 正式对上面这种服务模式缺点的研究,我们给U8SDK定下了一个差异化的服务模式: 1、渠道SDK支持数量,保持在一定数量内,主要接入国内主流的大渠道。其他小渠道,每个CP都不一样,可以自行接入,我们提供基于U8SDK接入新渠道的视频教程和文档 2、开源,这里开源不是将代码开源,而是凡使用U8SDK的客户,我们都提供完整的源码,这样,就相当于我们只是为CP去外包开发了这么一套东西,CP购买之后,可以定制,可以接入新的渠道,同时也不同担心哪天U8SDK关门了,这套东西就无法使用了。 3、U8SDK不提供自己的服务器,我们开源了U8Server,CP可以直接部署自己使用,同时也一样可以自己接入新的渠道。所有服务器数据走自己的服务器,放心安全;正是因为这样,U8SDK不会被任何一家渠道方拒绝。因为U8SDK仅仅为CP提供这样一套技术解决方案,而不是作为一个第三方接入平台来运作。 4、之前说了,我们不靠U8赚钱,所以,价格我们定的白菜价,一次性付费,没有任何后续费用和游戏个数限制等等。 5、U8SDK使用本地命令行打包,很容易和CP自己的业务系统集成,比如可以和Jenkins,TeamCity等系统完美地集成起来 6、U8Server已经开源,基于Aparche Version 2开源协议,CP完全可以按照自己的需求进行商用和定制等。同时U8SDK提供源码,CP也可以和自己的服务器进行对接,改动的代码也很简单。 7、尽可能满足CP的时间需求,比如这次和首游的合作,我们基本做到24小时提供服务。经常夜里对方给我们打电话,我们也会及时帮他们处理完对应的问题。 8、U8SDK采用一次性付费,并且价格超低,别说对于企业,对于个人来说,都毫无压力。 9、我们会及时处理客户的意见和反馈,比如这次首游在上线过程中,临时提了几个产品改进的需求,我们都第一时间来进行对应的改进,得到对方极大的认可。 在U8SDK和CP合作过程中,我们也了解到,CP最关心主要是以下几个问题: 1、游戏借助[第三方接入产品],是为了能够快速让游戏上线 2、同时很多CP关心,渠道SDK的不断升级,[第三方接入产品]能否做到及时更新 3、CP本身对于渠道SDK审核条件不太了解,[第三方接入产品]各个渠道SDK的审核条件,接入是否完善,尽可能减少渠道SDK审核的次数和时间 4、CP关心自己业务上需要和打包工具集成,或者需要[第三方接入产品]改进的,能否做到及时采纳并改进 5、[第三方接入产品]能否及时响应,针对CP遇到的问题,及时提供帮助 6、服务器用户和支付数据安全,是否拥有源码,风险是否可控 7、价格和提供的售后技术支持服务是否超值 2015年,U8SDK创始人小黑也收获了一个Baby,成为一名爸爸,心中的责任感更加强烈。就在老婆生产的那两天,小黑也是奋战在第一线,7楼住院区没有无线网,晚上11点多接到CP的电话,小黑抱着电脑跑到医院一楼的客服吧台去蹭网,给CP解决临时出现的问题,还被保安大人一顿奚落,不过好歹帮CP解决了问题。这件小事,同时说明,U8SDK的使命感和责任感,客户的事情无小事,不管我们在哪,遇到什么事情,我们都会想办法克服,尽可能地帮助CP第一时间解决问题。 U8SDK在大部分地方都尽可能地去满足CP的需求和条件,同时也毫无底线地朝这个方向去努力。我相信正是基于此,U8SDK才能够在巨头的缝隙里生存下来。同时我们相信:像做人一样做产品,不计较得失,努力服务好别人,得到别人的认可,形成良好的口碑,就是自己存在的最大意义和价值。 上面这些是U8SDK在2015年从0到1的简单总结。过程走的很艰辛,但是回过头来,看着一个个坚实又有力的脚印,我们说:这一年,没白过!
[责任编辑:赵凤鹏 PG003]
责任编辑:赵凤鹏 PG003
用微信扫描二维码分享至好友和朋友圈
凤凰游戏官方微信
48小时点击排行U8SDK——Cocos2dx游戏高速渠道SDK接入 - 操作系统当前位置:& &&&U8SDK——Cocos2dx游戏高速渠道SDK接入U8SDK——Cocos2dx游戏高速渠道SDK接入&&网友分享于:&&浏览:0次U8SDK——Cocos2dx游戏快速渠道SDK接入最近抽了点时间,折腾了下cocos2dx中接入U8SDK的Demo。同时,简单封装了下,使得在cocos2dx中能够快速地接入U8SDK。
先说下大体的思路。和之前说的在Unity中接入U8SDK一样,在Cocos2dx中接入U8SDK,我们也分为两步,一个Android中的部分,另 一个是Coccos2dx中的部分。同时,我们希望尽可能地封装不同平台之间数据的传递,以及接口的调用。使得大部分游戏基于这个封装,都可以最快地 速度来完成U8SDK的接入。
新建一个Android工程,作为U8SDK和Cocos2dx的一个中间工程(U8SDK_Cocos2dx),主要负责U8SDK的接口调用封装,参数传递和解析等。这个工程,对于所有游戏都试用。
在Cocos2dx中封装JNI调用,以及和Android中交互的数据格式等的定义和解析。同样地,这部分对于所有游戏也都适用。游戏中只需要调用这里提供的相关接口,以及实现相应的回调即可完成接入。
这篇文章,我们先来总体看看,对于一个新的Cocos2dx的开发的游戏,怎么根据我们的封装,快速完成U8SDK的抽象层的接入,从而直接打出母包,再通过一键打包工具,打出最终的多个渠道包。
首先, 我们使用cocos new 新建一个Cocos2dx(我这里使用的是Cocos2dx 3.x版本)工程,名为HelloCocos。
然后,解压u8sdk_cocos2dx.zip文件到HelloCocos/Classes目录下:
紧接着,我们新建两个按钮,一个登录,一个支付。 再新建一个Label,显示当前的登录状态。
this-&labelUsername = Label("U8SDK", "fonts/Marker Felt.ttf", 24);
this-&labelUsername-&setPosition(Vec2(origin.x + visibleSize.width / 2,
origin.y + visibleSize.height - this-&labelUsername-&getContentSize().height));
this-&addChild(this-&labelUsername, 1);
ui* btnLogin = ui("login_normal.png", "login_selected.png");
btnLogin-&setPosition(Vec2(visibleSize.width / 2 + origin.x, visibleSize.height / 2 + origin.y + 30));
btnLogin-&addClickEventListener(CC_CALLBACK_1(HelloWorld, this));
this-&addChild(btnLogin, 0);
ui* btnPay = ui("pay_normal.png", "pay_selected.png");
btnPay-&setPosition(Vec2(visibleSize.width / 2 + origin.x, visibleSize.height / 2 + origin.y - 30));
btnPay-&addClickEventListener(CC_CALLBACK_1(HelloWorld, this));
this-&addChild(btnPay, 0);
然后,我们就可以开始U8SDK的接入了。
1、HelloWorldScene.h中的HelloWorld类,继承U8SDKCallback抽象类,实现该类中的几个回调接口,代码 如下:
#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__
#include "cocos2d.h"
#include "ui/CocosGUI.h"
#include "u8sdk/U8SDKInterface.h"
class HelloWorld : public cocos2d::Layer,U8SDKCallback
cocos2d::Label* labelU
// there's no 'id' in cpp, so we recommend returning the class instance pointer
static cocos2d::Scene* createScene();
virtual bool init();
void loginClickCallback(cocos2d::Ref* pSender);
void payClickCallback(cocos2d::Ref* pSender);
void menuCloseCallback(cocos2d::Ref* pSender);
virtual void OnInitSuc();
virtual void OnLoginSuc(U8LoginResult* result);
virtual void OnSwitchLogin();
virtual void OnLogout();
CREATE_FUNC(HelloWorld);
#endif // __HELLOWORLD_SCENE_H__
2、HelloWorldScene.cpp中init方法的最后,我们调用U8SDK的初始化方法:
U8SDKInterface::getInstance()-&initSDK(this);
同时,这里要实现第一步中添加的U8SDKCallback中的回调
void HelloWorld()
CCLOG("SDK初始化成功...");
void HelloWorld(U8LoginResult* result)
CCLOG("SDK登录并认证成功...%s",result-&userId.c_str());
this-&labelUsername-&setString(result-&sdkUsername);
if (result-&isSwitchAccount)
void HelloWorld()
CCLOG("切换帐号成功...");
void HelloWorld()
CCLOG("SDK帐号退出成功...");
this-&labelUsername-&setString("U8SDK");
3、定义登录按钮和支付按钮的点击事件,登录点击的时候,触发登录;U8SDKInterface::getInstance()-&login();支付按钮点击的时候,触发支付:U8SDKInterface::getInstance()-&pay(params);完整的代码,如下:
#include "HelloWorldScene.h"
USING_NS_CC;
Scene* HelloWorld()
auto scene = Scene();
auto layer = HelloWorld();
scene-&addChild(layer);
bool HelloWorld()
if ( !Layer() )
return false;
Size visibleSize = Director()-&getVisibleSize();
Vec2 origin = Director()-&getVisibleOrigin();
auto closeItem = MenuItemImage(
"CloseNormal.png",
"CloseSelected.png",
CC_CALLBACK_1(HelloWorld, this));
closeItem-&setPosition(Vec2(origin.x + visibleSize.width - closeItem-&getContentSize().width/2 ,
origin.y + closeItem-&getContentSize().height/2));
auto menu = Menu(closeItem, NULL);
menu-&setPosition(Vec2);
this-&addChild(menu, 1);
this-&labelUsername = Label("U8SDK", "fonts/Marker Felt.ttf", 24);
this-&labelUsername-&setPosition(Vec2(origin.x + visibleSize.width / 2,
origin.y + visibleSize.height - this-&labelUsername-&getContentSize().height));
this-&addChild(this-&labelUsername, 1);
ui* btnLogin = ui("login_normal.png", "login_selected.png");
btnLogin-&setPosition(Vec2(visibleSize.width / 2 + origin.x, visibleSize.height / 2 + origin.y + 30));
btnLogin-&addClickEventListener(CC_CALLBACK_1(HelloWorld, this));
this-&addChild(btnLogin, 0);
ui* btnPay = ui("pay_normal.png", "pay_selected.png");
btnPay-&setPosition(Vec2(visibleSize.width / 2 + origin.x, visibleSize.height / 2 + origin.y - 30));
btnPay-&addClickEventListener(CC_CALLBACK_1(HelloWorld, this));
this-&addChild(btnPay, 0);
U8SDKInterface()-&initSDK(this);
return true;
void HelloWorld()
CCLOG("SDK初始化成功...");
void HelloWorld(U8LoginResult* result)
CCLOG("SDK登录并认证成功...%s",result-&userId.c_str());
this-&labelUsername-&setString(result-&sdkUsername);
if (result-&isSwitchAccount)
void HelloWorld()
CCLOG("切换帐号成功...");
void HelloWorld()
CCLOG("SDK帐号退出成功...");
this-&labelUsername-&setString("U8SDK");
void HelloWorld(Ref *pSender)
CCLOG("Btn Login Clicked...U8 Login...");
U8SDKInterface()-&login();
void HelloWorld(Ref *pSender)
CCLOG("Btn Pay Clicked...U8 Pay...");
U8PayParams* params = U8PayParams();
params-&productId = "1";
params-&productName = "元宝";
params-&productDesc = "购买100元宝,赠送20元宝";
params-&price = 100;
params-&buyNum = 1;
params-&coinNum = 300;
params-&serverId = "10";
params-&serverName = "地狱之恋";
params-&roleId = "u8_";
params-&roleName = "麻利麻利吼";
params-&roleLevel = 15;
params-&vip = "v15";
params-&orderID = "";
params-&extension = "test111";
U8SDKInterface()-&pay(params);
void HelloWorld(Ref* pSender)
Director()-&end();
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
4、 将HelloCocos生成proj.android导入到eclipse中,然后将U8SDK2和U8SDK_Cocos2dx工程生成的jar包(分 别是u8sdk2.jar和u8sdk_cocos2dx.jar)拷贝到HelloCocos安卓工程的libs目录下。然后,将生成的 AppActivity.java,本来是继承Cocos2dxActivity的,改为继承U8CocosActivity。
同时,将AndroidManifest.xml中的application节点中,加上android:name=”com.u8.sdk.U8Application”
最后,为了能够在Android中编译并运行,我们还需要将U8SDK包含的这些Cpp文件,添加到Android.mk中,最终的文件如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
$(call import-add-path,$(LOCAL_PATH)/../../cocos2d)
$(call import-add-path,$(LOCAL_PATH)/../../cocos2d/external)
$(call import-add-path,$(LOCAL_PATH)/../../cocos2d/cocos)
$(call import-add-path,$(LOCAL_PATH)/../../Classes/jansson)
LOCAL_MODULE := cocos2dcpp_shared
LOCAL_MODULE_FILENAME := libcocos2dcpp
LOCAL_SRC_FILES := hellocpp/main.cpp \
../../Classes/AppDelegate.cpp \
../../Classes/HelloWorldScene.cpp \
../../Classes/jansson/value.c \
../../Classes/jansson/utf.c \
../../Classes/jansson/strconv.c \
../../Classes/jansson/strbuffer.c \
../../Classes/jansson/pack_unpack.c \
../../Classes/jansson/memory.c \
../../Classes/jansson/load.c \
../../Classes/jansson/hashtable.c \
../../Classes/jansson/error.c \
../../Classes/jansson/dump.c \
../../Classes/NDKHelper/CallFuncNV.cpp \
../../Classes/NDKHelper/NDKCallbackNode.cpp \
../../Classes/NDKHelper/NDKHelper.cpp \
../../Classes/u8sdk/U8SDKData.cpp \
../../Classes/u8sdk/U8SDKNativeCallback.cpp \
../../Classes/u8sdk/U8SDKInterface.cpp \
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes \
$(LOCAL_PATH)/../../cocos2d/cocos/ui
# _COCOS_HEADER_ANDROID_BEGIN
# _COCOS_HEADER_ANDROID_END
LOCAL_STATIC_LIBRARIES := cocos2dx_static
LOCAL_STATIC_LIBRARIES += cocos_ui_static
# _COCOS_LIB_ANDROID_BEGIN
# _COCOS_LIB_ANDROID_END
include $(BUILD_SHARED_LIBRARY)
$(call import-module,.)
$(call import-module,ui)
# _COCOS_LIB_IMPORT_ANDROID_BEGIN
# _COCOS_LIB_IMPORT_ANDROID_END
到这里,接入就算完成了。我们可以使用cocos compile -p android 命令来编译Android平台,之前的操作如果稍有不慎,这里编译的过程中,也许会遇到一些错误,不过,看着啥错误,一一解决即可。
编译成功之后,在proj.android的bin目录下会生成一些apk文件,将HeroCocos-debug.apk拷贝到U8SDK打包工具目录下,替换原来的u8.apk
然后,运行package.bat,选择需要打包的渠道,然后就开始打包了,打包完成之后,在output目录下生成当前渠道SDK的渠道包,比如最终UC的包:
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 1234567891011 Copyright & &&版权所有2913人阅读
游戏开发(24)
U8Server——U8SDK服务器端(统一渠道SDK接入用户中心和支付中心)U8SDK官方网站:U8SDK官方博客:U8SDK是一套类似棱镜SDK,AnySDK的统一渠道SDK接入框架,包含客户端部分和服务器端部分。和他们本质的区别是,U8SDK整套框架是技术开源的,我们所有的实现原理,都分享在博客上,为广大手游开发者,收集并提供比较完整的SDK接入方案。同时,正式因为此,部分拒绝AnySDK,棱镜SDK等第三方接入平台的渠道,也不存在拒绝U8SDK的情况。因为,U8SDK所有的东西都是原码,每个手游公司拿去了U8SDK,和公司自己研发没有任何区别。所以,只有一个U8SDK,但是每个手游公司,拿去就是各自公司自己的统一SDK接入解决方案了,你可能叫他ASDK,BSDK...等等。所以,我们保持U8SDK的精简,只包含基础和必要的功能,任何附加的东西,我们都留给各个手游公司自己去丰富和完善。你可以把U8SDK整合进你们的集成方案中,比如你们用Jenkins,那么可以很方便地就将打包的环节,集成到你们的集成流程中。所有的用户数据和支付数据,都走公司自己的服务器,U8Server目前也已开源,所有手游公司,都能基于U8Server搭建自己的统一用户登录认证中心和支付中心。所有的数据走向和存储,都只有手游公司自己知道,不需要经过第三方做中转。这也是和棱镜SDK他们的本质区别。U8SDK目前包含Android和iOS两个平台的渠道SDK接入方案。U8SDK客户端部分:U8SDK抽象层工程(Android,iOS)各个渠道SDK接入工程(Android, iOS)一键打包工具(python实现, Android的打包工具和iOS的打包工具都是python实现)U8SDK接入Demo(原生平台,Unity3D,Cocos2dx)U8SDK服务器端部分(不分Adroid和iOS):U8Server:统一的用户登录认证中心和支付中心,目前开源。基于标准的J2EE框架(Struts2+Spring+Hibernate)研发。关于U8Server使用的基础框架,之前就开源了,关于U8Server中注解的使用,工程目录结构等可以看看这里的说明文件。U8Server地址说明U8Server中,URL可以分为三个类型,分别以不同的前缀开头/user:
用户登录认证相关的地址/pay:
支付获取订单号,以及支付回调相关的地址/admin: U8Server后台管理系统的地址比如你将U8Server部署在域名下,那么,我们对这几种URL进行一个说明: : 渠道SDK登录认证协议地址(对应的类是com.u8.server.web.UserAction) : 游戏服务器来U8Server做二次认证的协议地址(对应的类是com.u8.server.web.UserAction) : 客户端支付之前,先来U8Server获取一个订单号的协议地址(对应的类是com.u8.server.web.PayAction) : UC渠道的支付回调通知地址(com.u8.server.web.UCPayCallbackAction) :百度渠道的支付回调通知地址(com.u8.server.web.BaiduPayCallbackAction) : 小米渠道的支付回调通知地址(com.u8.server.web.XiaoMiPayCallbackAction)其他渠道类似关于支付回调地址的说明:目前支付回调地址的规则必须是 每个渠道SDK的回调逻辑单独一个类,在com.u8.server.web路径下。 :后台登录界面(com.u8.server.web.admin.AdminIndexAction)后台管理页面相关入口类都在com.u8.server.web.admin包名下后台管理页面(jsp)都在WEB-INF/admin/路径下关于U8SDK和U8Server的设计和文档等,请参考后面所有关于U8Server详细的文档,我们都会及时更新在博客上,请及时关注
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1076880次
积分:9930
积分:9930
排名:第1709名
原创:97篇
转载:22篇
评论:514条
难度:中级
类型:技术教程最近抽了点时间,折腾了下cocos2dx中接入U8SDK的Demo。同时,简单封装了下,使得在cocos2dx中能够快速地接入U8SDK。
先说下大体的思路。和之前说的在Unity中接入U8SDK一样,在Cocos2dx中接入U8SDK,我们也分为两步,一个Android中的部分,另 一个是Coccos2dx中的部分。同时,我们希望尽可能地封装不同平台之间数据的传递,以及接口的调用。使得大部分游戏基于这个封装,都可以最快地 速度来完成U8SDK的接入。
新建一个Android工程,作为U8SDK和Cocos2dx的一个中间工程(U8SDK_Cocos2dx),主要负责U8SDK的接口调用封装,参数传递和解析等。这个工程,对于所有游戏都试用。
在Cocos2dx中封装JNI调用,以及和Android中交互的数据格式等的定义和解析。同样地,这部分对于所有游戏也都适用。游戏中只需要调用这里提供的相关接口,以及实现相应的回调即可完成接入。
这篇文章,我们先来总体看看,对于一个新的Cocos2dx的开发的游戏,怎么根据我们的封装,快速完成U8SDK的抽象层的接入,从而直接打出母包,再通过一键打包工具,打出最终的多个渠道包。
首先, 我们使用cocos new 新建一个Cocos2dx(我这里使用的是Cocos2dx 3.x版本)工程,名为HelloCocos。
然后,解压u8sdk_cocos2dx.zip文件到HelloCocos/Classes目录下:
紧接着,我们新建两个按钮,一个登录,一个支付。 再新建一个Label,显示当前的登录状态。
this-&labelUsername = Label::createWithTTF("U8SDK", "fonts/Marker Felt.ttf", 24);
// position the label on the center of the screen
this-&labelUsername-&setPosition(Vec2(origin.x + visibleSize.width / 2,
origin.y + visibleSize.height - this-&labelUsername-&getContentSize().height));
// add the label as a child to this layer
this-&addChild(this-&labelUsername, 1);
ui::Button* btnLogin = ui::Button::create("login_normal.png", "login_selected.png");
btnLogin-&setPosition(Vec2(visibleSize.width / 2 + origin.x, visibleSize.height / 2 + origin.y + 30));
btnLogin-&addClickEventListener(CC_CALLBACK_1(HelloWorld::loginClickCallback, this));
// add the sprite as a child to this layer
this-&addChild(btnLogin, 0);
ui::Button* btnPay = ui::Button::create("pay_normal.png", "pay_selected.png");
btnPay-&setPosition(Vec2(visibleSize.width / 2 + origin.x, visibleSize.height / 2 + origin.y - 30));
btnPay-&addClickEventListener(CC_CALLBACK_1(HelloWorld::payClickCallback, this));
// add the sprite as a child to this layer
this-&addChild(btnPay, 0);
然后,我们就可以开始U8SDK的接入了。
1、HelloWorldScene.h中的HelloWorld类,继承U8SDKCallback抽象类,实现该类中的几个回调接口,代码 如下:
#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__
#include "cocos2d.h"
#include "ui/CocosGUI.h"
#include "u8sdk/U8SDKInterface.h"
class HelloWorld : public cocos2d::Layer,U8SDKCallback
cocos2d::Label* labelU
// there's no 'id' in cpp, so we recommend returning the class instance pointer
static cocos2d::Scene* createScene();
// Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone
virtual bool init();
void loginClickCallback(cocos2d::Ref* pSender);
void payClickCallback(cocos2d::Ref* pSender);
// a selector callback
void menuCloseCallback(cocos2d::Ref* pSender);
virtual void OnInitSuc();
virtual void OnLoginSuc(U8LoginResult* result);
virtual void OnSwitchLogin();
virtual void OnLogout();
// implement the "static create()" method manually
CREATE_FUNC(HelloWorld);
#endif // __HELLOWORLD_SCENE_H__
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
&&&&this-&labelUsername = Label::createWithTTF("U8SDK", "fonts/Marker Felt.ttf", 24);&&&&&&// position the label on the center of the screen&&&&this-&labelUsername-&setPosition(Vec2(origin.x + visibleSize.width / 2,&&&&&&&&origin.y + visibleSize.height - this-&labelUsername-&getContentSize().height));&&&&&// add the label as a child to this layer&&&&this-&addChild(this-&labelUsername, 1);&&&&&ui::Button* btnLogin = ui::Button::create("login_normal.png", "login_selected.png");&&&&btnLogin-&setPosition(Vec2(visibleSize.width / 2 + origin.x, visibleSize.height / 2 + origin.y + 30));&&&&btnLogin-&addClickEventListener(CC_CALLBACK_1(HelloWorld::loginClickCallback, this));&&&&// add the sprite as a child to this layer&&&&this-&addChild(btnLogin, 0);&&&&&ui::Button* btnPay = ui::Button::create("pay_normal.png", "pay_selected.png");&&&&btnPay-&setPosition(Vec2(visibleSize.width / 2 + origin.x, visibleSize.height / 2 + origin.y - 30));&&&&btnPay-&addClickEventListener(CC_CALLBACK_1(HelloWorld::payClickCallback, this));&&&&// add the sprite as a child to this layer&&&&this-&addChild(btnPay, 0);&&
~~~~~~&&&&&& & 然后,我们就可以开始U8SDK的接入了。 1、HelloWorldScene.h中的HelloWorld类,继承U8SDKCallback抽象类,实现该类中的几个回调接口,代码 如下:&~~~~~~ #ifndef __HELLOWORLD_SCENE_H__#define __HELLOWORLD_SCENE_H__&#include "cocos2d.h"#include "ui/CocosGUI.h"#include "u8sdk/U8SDKInterface.h"&class HelloWorld : public cocos2d::Layer,U8SDKCallback{private:&&&&cocos2d::Label* labelUsername;&public:&&&&// there's no 'id' in cpp, so we recommend returning the class instance pointer&&&&static cocos2d::Scene* createScene();&&&&&// Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone&&&&virtual bool init();&&&&&void loginClickCallback(cocos2d::Ref* pSender);&&&&void payClickCallback(cocos2d::Ref* pSender);&&&&&// a selector callback&&&&void menuCloseCallback(cocos2d::Ref* pSender);&&&&&virtual void OnInitSuc();&&&&&virtual void OnLoginSuc(U8LoginResult* result);&&&&&virtual void OnSwitchLogin();&&&&&virtual void OnLogout();&&&&&// implement the "static create()" method manually&&&&CREATE_FUNC(HelloWorld);};&#endif // __HELLOWORLD_SCENE_H__&
2、HelloWorldScene.cpp中init方法的最后,我们调用U8SDK的初始化方法:
U8SDKInterface::getInstance()->initSDK(this);
同时,这里要实现第一步中添加的U8SDKCallback中的回调
void HelloWorld::OnInitSuc()
CCLOG("SDK初始化成功...");
//一般不需要做什么处理
void HelloWorld::OnLoginSuc(U8LoginResult* result)
CCLOG("SDK登录并认证成功...%s",result-&userId.c_str());
this-&labelUsername-&setString(result-&sdkUsername);
if (result-&isSwitchAccount)
//TODO:这里退回到登录界面,并且SDK是已经登录成功状态,不用再弹出SDK的登录界面
//TODO:登录认证成功,获取服务器列表,进入游戏服...
void HelloWorld::OnSwitchLogin()
CCLOG("切换帐号成功...");
//TODO:退回到登录界面,并弹出SDK登录界面(调用U8SDKInterface::getInstance()-&login())
void HelloWorld::OnLogout()
CCLOG("SDK帐号退出成功...");
this-&labelUsername-&setString("U8SDK");
//TODO:退回到登录界面,并弹出SDK登录界面(调用U8SDKInterface::getInstance()-&login())
1234567891011121314151617181920212223242526272829303132333435
void HelloWorld::OnInitSuc(){&&&&CCLOG("SDK初始化成功...");&&&&//一般不需要做什么处理}&void HelloWorld::OnLoginSuc(U8LoginResult* result){&&&&CCLOG("SDK登录并认证成功...%s",result-&userId.c_str());&&&&this-&labelUsername-&setString(result-&sdkUsername);&&&&&if (result-&isSwitchAccount)&&&&{&&&&&&&&//TODO:这里退回到登录界面,并且SDK是已经登录成功状态,不用再弹出SDK的登录界面&&&&}&&&&else&&&&{&&&&&&&&//TODO:登录认证成功,获取服务器列表,进入游戏服...&&&&}}&void HelloWorld::OnSwitchLogin(){&&&&CCLOG("切换帐号成功...");&&&&//TODO:退回到登录界面,并弹出SDK登录界面(调用U8SDKInterface::getInstance()-&login())}&void HelloWorld::OnLogout(){&&&&CCLOG("SDK帐号退出成功...");&&&&this-&labelUsername-&setString("U8SDK");&&&&//TODO:退回到登录界面,并弹出SDK登录界面(调用U8SDKInterface::getInstance()-&login())}&&
3、定义登录按钮和支付按钮的点击事件,登录点击的时候,触发登录;U8SDKInterface::getInstance()->login();支付按钮点击的时候,触发支付:U8SDKInterface::getInstance()->pay(params);完整的代码,如下:
#include "HelloWorldScene.h"
USING_NS_CC;
Scene* HelloWorld::createScene()
// 'scene' is an autorelease object
auto scene = Scene::create();
// 'layer' is an autorelease object
auto layer = HelloWorld::create();
// add layer as a child to scene
scene-&addChild(layer);
// return the scene
// on "init" you need to initialize your instance
bool HelloWorld::init()
//////////////////////////////
// 1. super init first
if ( !Layer::init() )
Size visibleSize = Director::getInstance()-&getVisibleSize();
Vec2 origin = Director::getInstance()-&getVisibleOrigin();
/////////////////////////////
// 2. add a menu item with "X" image, which is clicked to quit the program
you may modify it.
// add a "close" icon to exit the progress. it's an autorelease object
auto closeItem = MenuItemImage::create(
"CloseNormal.png",
"CloseSelected.png",
CC_CALLBACK_1(HelloWorld::menuCloseCallback, this));
closeItem-&setPosition(Vec2(origin.x + visibleSize.width - closeItem-&getContentSize().width/2 ,
origin.y + closeItem-&getContentSize().height/2));
// create menu, it's an autorelease object
auto menu = Menu::create(closeItem, NULL);
menu-&setPosition(Vec2::ZERO);
this-&addChild(menu, 1);
/////////////////////////////
// 3. add your codes below...
// add a label shows "Hello World"
// create and initialize a label
this-&labelUsername = Label::createWithTTF("U8SDK", "fonts/Marker Felt.ttf", 24);
// position the label on the center of the screen
this-&labelUsername-&setPosition(Vec2(origin.x + visibleSize.width / 2,
origin.y + visibleSize.height - this-&labelUsername-&getContentSize().height));
// add the label as a child to this layer
this-&addChild(this-&labelUsername, 1);
ui::Button* btnLogin = ui::Button::create("login_normal.png", "login_selected.png");
btnLogin-&setPosition(Vec2(visibleSize.width / 2 + origin.x, visibleSize.height / 2 + origin.y + 30));
btnLogin-&addClickEventListener(CC_CALLBACK_1(HelloWorld::loginClickCallback, this));
// add the sprite as a child to this layer
this-&addChild(btnLogin, 0);
ui::Button* btnPay = ui::Button::create("pay_normal.png", "pay_selected.png");
btnPay-&setPosition(Vec2(visibleSize.width / 2 + origin.x, visibleSize.height / 2 + origin.y - 30));
btnPay-&addClickEventListener(CC_CALLBACK_1(HelloWorld::payClickCallback, this));
// add the sprite as a child to this layer
this-&addChild(btnPay, 0);
//NDKHelper::addSelector("U8Selectors", "onU8LoginResult", CC_CALLBACK_2(HelloWorld::onU8LoginResult, this), this);
U8SDKInterface::getInstance()-&initSDK(this);
void HelloWorld::OnInitSuc()
CCLOG("SDK初始化成功...");
//一般不需要做什么处理
void HelloWorld::OnLoginSuc(U8LoginResult* result)
CCLOG("SDK登录并认证成功...%s",result-&userId.c_str());
this-&labelUsername-&setString(result-&sdkUsername);
if (result-&isSwitchAccount)
//TODO:这里退回到登录界面,并且SDK是已经登录成功状态,不用再弹出SDK的登录界面
//TODO:登录认证成功,获取服务器列表,进入游戏服...
void HelloWorld::OnSwitchLogin()
CCLOG("切换帐号成功...");
//TODO:退回到登录界面,并弹出SDK登录界面(调用U8SDKInterface::getInstance()-&login())
void HelloWorld::OnLogout()
CCLOG("SDK帐号退出成功...");
this-&labelUsername-&setString("U8SDK");
//TODO:退回到登录界面,并弹出SDK登录界面(调用U8SDKInterface::getInstance()-&login())
void HelloWorld::loginClickCallback(Ref *pSender)
CCLOG("Btn Login Clicked...U8 Login...");
U8SDKInterface::getInstance()-&login();
void HelloWorld::payClickCallback(Ref *pSender)
CCLOG("Btn Pay Clicked...U8 Pay...");
U8PayParams* params = U8PayParams::create();
params-&productId = "1";
params-&productName = "元宝";
params-&productDesc = "购买100元宝,赠送20元宝";
params-&price = 100;
params-&buyNum = 1;
params-&coinNum = 300;
params-&serverId = "10";
params-&serverName = "地狱之恋";
params-&roleId = "u8_";
params-&roleName = "麻利麻利吼";
params-&roleLevel = 15;
params-&vip = "v15";
//去服务器获取游戏中商品的订单号以及扩展数据,这里测试
params-&orderID = "";
params-&extension = "test111";
U8SDKInterface::getInstance()-&pay(params);
void HelloWorld::menuCloseCallback(Ref* pSender)
Director::getInstance()-&end();
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
#include "HelloWorldScene.h"&USING_NS_CC;&Scene* HelloWorld::createScene(){&&&&// 'scene' is an autorelease object&&&&auto scene = Scene::create();&&&&&// 'layer' is an autorelease object&&&&auto layer = HelloWorld::create();&&&&&// add layer as a child to scene&&&&scene-&addChild(layer);&&&&&// return the scene&&&&return scene;}&// on "init" you need to initialize your instancebool HelloWorld::init(){&&&&//////////////////////////////&&&&// 1. super init first&&&&if ( !Layer::init() )&&&&{&&&&&&&&return false;&&&&}&&&&&Size visibleSize = Director::getInstance()-&getVisibleSize();&&&&Vec2 origin = Director::getInstance()-&getVisibleOrigin();&&&&&/////////////////////////////&&&&// 2. add a menu item with "X" image, which is clicked to quit the program&&&&//&&&&you may modify it.&&&&&// add a "close" icon to exit the progress. it's an autorelease object&&&&auto closeItem = MenuItemImage::create(&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& "CloseNormal.png",&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& "CloseSelected.png",&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& CC_CALLBACK_1(HelloWorld::menuCloseCallback, this));&&&&&closeItem-&setPosition(Vec2(origin.x + visibleSize.width - closeItem-&getContentSize().width/2 ,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&origin.y + closeItem-&getContentSize().height/2));&&&&&// create menu, it's an autorelease object&&&&auto menu = Menu::create(closeItem, NULL);&&&&menu-&setPosition(Vec2::ZERO);&&&&this-&addChild(menu, 1);&&&&&/////////////////////////////&&&&// 3. add your codes below...&&&&&// add a label shows "Hello World"&&&&// create and initialize a label&&&&&this-&labelUsername = Label::createWithTTF("U8SDK", "fonts/Marker Felt.ttf", 24);&&&&&// position the label on the center of the screen&&&&this-&labelUsername-&setPosition(Vec2(origin.x + visibleSize.width / 2,&&&&&&&&origin.y + visibleSize.height - this-&labelUsername-&getContentSize().height));&&&&&// add the label as a child to this layer&&&&this-&addChild(this-&labelUsername, 1);&&&&&ui::Button* btnLogin = ui::Button::create("login_normal.png", "login_selected.png");&&&&btnLogin-&setPosition(Vec2(visibleSize.width / 2 + origin.x, visibleSize.height / 2 + origin.y + 30));&&&&btnLogin-&addClickEventListener(CC_CALLBACK_1(HelloWorld::loginClickCallback, this));&&&&// add the sprite as a child to this layer&&&&this-&addChild(btnLogin, 0);&&&&&ui::Button* btnPay = ui::Button::create("pay_normal.png", "pay_selected.png");&&&&btnPay-&setPosition(Vec2(visibleSize.width / 2 + origin.x, visibleSize.height / 2 + origin.y - 30));&&&&btnPay-&addClickEventListener(CC_CALLBACK_1(HelloWorld::payClickCallback, this));&&&&// add the sprite as a child to this layer&&&&this-&addChild(btnPay, 0);&&&&&//NDKHelper::addSelector("U8Selectors", "onU8LoginResult", CC_CALLBACK_2(HelloWorld::onU8LoginResult, this), this);&&&&U8SDKInterface::getInstance()-&initSDK(this);&&&&&return true;}&void HelloWorld::OnInitSuc(){&&&&CCLOG("SDK初始化成功...");&&&&//一般不需要做什么处理}&void HelloWorld::OnLoginSuc(U8LoginResult* result){&&&&CCLOG("SDK登录并认证成功...%s",result-&userId.c_str());&&&&this-&labelUsername-&setString(result-&sdkUsername);&&&&&if (result-&isSwitchAccount)&&&&{&&&&&&&&//TODO:这里退回到登录界面,并且SDK是已经登录成功状态,不用再弹出SDK的登录界面&&&&}&&&&else&&&&{&&&&&&&&//TODO:登录认证成功,获取服务器列表,进入游戏服...&&&&}}&void HelloWorld::OnSwitchLogin(){&&&&CCLOG("切换帐号成功...");&&&&//TODO:退回到登录界面,并弹出SDK登录界面(调用U8SDKInterface::getInstance()-&login())}&void HelloWorld::OnLogout(){&&&&CCLOG("SDK帐号退出成功...");&&&&this-&labelUsername-&setString("U8SDK");&&&&//TODO:退回到登录界面,并弹出SDK登录界面(调用U8SDKInterface::getInstance()-&login())}&&void HelloWorld::loginClickCallback(Ref *pSender){&&&&CCLOG("Btn Login Clicked...U8 Login...");&&&&U8SDKInterface::getInstance()-&login();}&void HelloWorld::payClickCallback(Ref *pSender){&&&&CCLOG("Btn Pay Clicked...U8 Pay...");&&&&&U8PayParams* params = U8PayParams::create();&&&&&params-&productId = "1";&&&&params-&productName = "元宝";&&&&params-&productDesc = "购买100元宝,赠送20元宝";&&&&params-&price = 100;&&&&params-&buyNum = 1;&&&&params-&coinNum = 300;&&&&params-&serverId = "10";&&&&params-&serverName = "地狱之恋";&&&&params-&roleId = "u8_";&&&&params-&roleName = "麻利麻利吼";&&&&params-&roleLevel = 15;&&&&params-&vip = "v15";&&&&&//去服务器获取游戏中商品的订单号以及扩展数据,这里测试&&&&params-&orderID = "";&&&&params-&extension = "test111";&&&&&U8SDKInterface::getInstance()-&pay(params);}&void HelloWorld::menuCloseCallback(Ref* pSender){&&&&Director::getInstance()-&end();&#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)&&&&exit(0);#endif}&
4、 将HelloCocos生成proj.android导入到eclipse中,然后将U8SDK2和U8SDK_Cocos2dx工程生成的jar包(分 别是u8sdk2.jar和u8sdk_cocos2dx.jar)拷贝到HelloCocos安卓工程的libs目录下。然后,将生成的 AppActivity.java,本来是继承Cocos2dxActivity的,改为继承U8CocosActivity。
同时,将AndroidManifest.xml中的application节点中,加上android:name=”com.u8.sdk.U8Application”
最后,为了能够在Android中编译并运行,我们还需要将U8SDK包含的这些Cpp文件,添加到Android.mk中,最终的文件如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
$(call import-add-path,$(LOCAL_PATH)/../../cocos2d)
$(call import-add-path,$(LOCAL_PATH)/../../cocos2d/external)
$(call import-add-path,$(LOCAL_PATH)/../../cocos2d/cocos)
$(call import-add-path,$(LOCAL_PATH)/../../Classes/jansson)
LOCAL_MODULE := cocos2dcpp_shared
LOCAL_MODULE_FILENAME := libcocos2dcpp
LOCAL_SRC_FILES := hellocpp/main.cpp \
../../Classes/AppDelegate.cpp \
../../Classes/HelloWorldScene.cpp \
../../Classes/jansson/value.c \
../../Classes/jansson/utf.c \
../../Classes/jansson/strconv.c \
../../Classes/jansson/strbuffer.c \
../../Classes/jansson/pack_unpack.c \
../../Classes/jansson/memory.c \
../../Classes/jansson/load.c \
../../Classes/jansson/hashtable.c \
../../Classes/jansson/error.c \
../../Classes/jansson/dump.c \
../../Classes/NDKHelper/CallFuncNV.cpp \
../../Classes/NDKHelper/NDKCallbackNode.cpp \
../../Classes/NDKHelper/NDKHelper.cpp \
../../Classes/u8sdk/U8SDKData.cpp \
../../Classes/u8sdk/U8SDKNativeCallback.cpp \
../../Classes/u8sdk/U8SDKInterface.cpp \
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes \
$(LOCAL_PATH)/../../cocos2d/cocos/ui
# _COCOS_HEADER_ANDROID_BEGIN
# _COCOS_HEADER_ANDROID_END
LOCAL_STATIC_LIBRARIES := cocos2dx_static
LOCAL_STATIC_LIBRARIES += cocos_ui_static
# _COCOS_LIB_ANDROID_BEGIN
# _COCOS_LIB_ANDROID_END
include $(BUILD_SHARED_LIBRARY)
$(call import-module,.)
$(call import-module,ui)
# _COCOS_LIB_IMPORT_ANDROID_BEGIN
# _COCOS_LIB_IMPORT_ANDROID_END
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
LOCAL_PATH := $(call my-dir)&include $(CLEAR_VARS)&$(call import-add-path,$(LOCAL_PATH)/../../cocos2d)$(call import-add-path,$(LOCAL_PATH)/../../cocos2d/external)$(call import-add-path,$(LOCAL_PATH)/../../cocos2d/cocos)$(call import-add-path,$(LOCAL_PATH)/../../Classes/jansson)&LOCAL_MODULE := cocos2dcpp_shared&LOCAL_MODULE_FILENAME := libcocos2dcpp&LOCAL_SRC_FILES := hellocpp/main.cpp \&&&&&&&&&&&&&&&&&& ../../Classes/AppDelegate.cpp \&&&&&&&&&&&&&&&&&& ../../Classes/HelloWorldScene.cpp \&&&&&&&&&&&&&&&&&& ../../Classes/jansson/value.c \&&&&&&&&&&&&&&&&&& ../../Classes/jansson/utf.c \&&&&&&&&&&&&&&&&&& ../../Classes/jansson/strconv.c \&&&&&&&&&&&&&&&&&& ../../Classes/jansson/strbuffer.c \&&&&&&&&&&&&&&&&&& ../../Classes/jansson/pack_unpack.c \&&&&&&&&&&&&&&&&&& ../../Classes/jansson/memory.c \&&&&&&&&&&&&&&&&&& ../../Classes/jansson/load.c \&&&&&&&&&&&&&&&&&& ../../Classes/jansson/hashtable.c \&&&&&&&&&&&&&&&&&& ../../Classes/jansson/error.c \&&&&&&&&&&&&&&&&&& ../../Classes/jansson/dump.c \&&&&&&&&&&&&&&&&&& ../../Classes/NDKHelper/CallFuncNV.cpp \&&&&&&&&&&&&&&&&&& ../../Classes/NDKHelper/NDKCallbackNode.cpp \&&&&&&&&&&&&&&&&&& ../../Classes/NDKHelper/NDKHelper.cpp \&&&&&&&&&&&&&&&&&& ../../Classes/u8sdk/U8SDKData.cpp \&&&&&&&&&&&&&&&&&& ../../Classes/u8sdk/U8SDKNativeCallback.cpp \&&&&&&&&&&&&&&&&&& ../../Classes/u8sdk/U8SDKInterface.cpp \&LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes \&&&&&&&&&&&&&&&&&&&&$(LOCAL_PATH)/../../cocos2d/cocos/ui&# _COCOS_HEADER_ANDROID_BEGIN# _COCOS_HEADER_ANDROID_END&&LOCAL_STATIC_LIBRARIES := cocos2dx_staticLOCAL_STATIC_LIBRARIES += cocos_ui_static&# _COCOS_LIB_ANDROID_BEGIN# _COCOS_LIB_ANDROID_END&include $(BUILD_SHARED_LIBRARY)&$(call import-module,.)$(call import-module,ui)&# _COCOS_LIB_IMPORT_ANDROID_BEGIN# _COCOS_LIB_IMPORT_ANDROID_END&
到这里,接入就算完成了。我们可以使用cocos compile -p android 命令来编译Android平台,之前的操作如果稍有不慎,这里编译的过程中,也许会遇到一些错误,不过,看着啥错误,一一解决即可。
编译成功之后,在proj.android的bin目录下会生成一些apk文件,将HeroCocos-debug.apk拷贝到U8SDK打包工具目录下,替换原来的u8.apk
然后,运行package.bat,选择需要打包的渠道,然后就开始打包了,打包完成之后,在output目录下生成当前渠道SDK的渠道包,比如最终UC的包:
本文出自 优优网事,转载时请注明出处及相应链接。本文永久链接: /?p=1886
一个纯粹的屌丝技术控,追求讲故事一样讲技术。在追逐的道路上,不忘留下一个一个脚印。每当有时间,就可以停下来,回头看看走过的路。至少可以证明,小黑这个人,真实的存在过。。。
最新文章:
U8SDK视频教程
&的其他文章
Ɣ回顶部
U8SDK技术群}

我要回帖

更多关于 cocos2dx接入百度sdk 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信