您的位置:首页>新闻>【演讲实录】AnySDK陈峰:做接入SDK螺丝的电动螺丝刀

【演讲实录】AnySDK陈峰:做接入SDK螺丝的电动螺丝刀

lee 新闻

2014-11-11

在10月28日于国家会议中心举办的Cocos开发者大会上,AnySDK负责人陈峰与开发者们分享了AnySDK的诸多实用功能与产品最新规划。陈峰表示,如果将SDK比喻成螺丝钉,那么AnySDK就是一把帮助螺丝快速钉入木板的电动螺丝刀,实现5分钟打一个渠道包,将原来约52人周的渠道打包工作量,缩到短短一周。

图片1

以下为陈峰演讲实录:

我叫陈峰,今天给大家带来一款产品叫做AnySDK,我们认为它是当前市面上最好的本地打包工具。
做两个调查,第一,有接过渠道SDK的程序员举一下手?
目测至少超过一半。
我讲这句话之前有听说过AnySDK的产品举一下手?
至少有三分之一。

有做过渠道打包的同学都知道打渠道包是件挺头疼的事,接一个还OK,接两个就算了,接三个忍一忍,接十个,二十个那就是要奔溃的节奏。而且现在市面上渠道SDK数量是动态的,可能今天突然冒出两个,明天曾经接过的SDK说我不做联运了,这个SDK不再使用了,所以SDK数量每天都在变。我们粗略统计过,单渠道SDK就至少超过50个,应该在55到65个之间。第三方功能SDK就更不计其数 。

那么就按照52个来讲,假设我们有一款游戏准备接52个渠道,按照之前调查,接一个SDK平均需要5个工作日的时间,再加上测试基本上一个星期的时间。 52个SDK,意味着要接52周,就是12个月,也就是一年的时间。但是做一款手游的开发周期最短三个月,标准八个月到一年,超过一年的游戏除非大作,从数量上来讲相对比较少。那么就意味着,这些游戏开发要一年,接SDK也要一年,这个成本占比是非常巨大的。

那么换种方法,我们用AnySDK来做接入,从看文档包括接入AnySDK大概需要5个工作日,但是接下来生成每个渠道包就非常快,每个只要大概5分钟。还按照52个SDK来计算的话,所需时间大概是7天,也就是1/4人月的时间。

这是AnySDK给大家带来效果上的表现。

如果没有了解过这个产品的同学可能会问,AnySDK是干什么的?
我最经常被问到两个问题:
第一个是:你们是不是做SDK的?我现在有用户也想做联运,你能不能帮我做一个SDK。我说对不起,我们不是做SDK的,我们是做SDK接入工具的。

图片2

第二个是:我今天看渠道的要求里说不允许采用第三方SDK,那么我就不能用AnySDK。这也是一个误解,首先我们不是第三方SDK,如果把所有SDK比喻成螺丝钉,要把螺丝钉拧到木板上,之前没有工具的时候用手拧,可以拧进去,但是会比较累,比较慢。而AnySDK是把螺丝刀,是把螺丝快速拧紧的工具,我们并不是第三方的SDK,当然我们不满足于做一把螺丝刀,而是电动螺丝刀,更快更有效率的把螺丝拧进去,这就是AnySDK的目标,所以我们才能达到5分钟打一个渠道包。而之前每个渠道包都需要五天,并且是程序员每天加班加点到十点。现在一切改变了。

图片3

看一下接入的效果,这个截图是吴昊春季开发者大会用的3D打飞机游戏接完SDK以后的界面,这是一个登陆的界面,是纯原生的,没有任何美术的修改。我们接完之后产生了这个界面,因为这个包是不包含任何渠道SDK或者是第三方SDK,所以不可能显示出第三方的登陆界面,有了这个界面,大家调试的时候就可以看到接的对不对。

同时,我们也有一个模拟支付系统,做游戏接SDK时,把程序写完还不一定成不成,需要充值。通常程序员自己进行测试,有时需要5块自己就充值了,但是时间久了,充值数多了大家也会有小小的意见。我们做这个东西就考虑了这一点,测试的时候可以用虚拟的游戏币,后台自己给自己加钱,在你虚拟的情况下测试通过后,再去打渠道包。

这两个界面是打包出来以后的界面,就是母包不用动代码经过工具产生两个新的包,每个包点同一个登陆按纽就产生这样的效果,这个游戏里接的是当乐SDK,这个是接百度游戏SDK,当然不能说所有东西做完程序之后不测试就直接上线。

图片4

我们是如何达到这个效果的呢?AnySDK这个名字有点理想化,Any是“任意”的意思,我们当然不可能做到真正“任意”,因为SDK实在是多如牛毛,不可能达到完整的“任意”。我们现在达到什么效果呢?现在支持用户系统42个,支付系统43个。用户和支付系统两个加起来是渠道SDK,支付系统这边多了一个支付宝,因为支付宝是独立的,没有用户系统,所以这边是多了,这两个合起来是渠道SDK,我们还支持广告SDK,推送SDK,统计分析SDK,社交分享SDK等。基于这些背后的支持,我们才能达到相对的Any。

图片5

AnySDK的交付物总共有三个部分:
第一是Framework,类似于大家从渠道拿到SDK,然后接入SDK以后编出来的包是母包。
第二部分是Package,我们有一个本地化的打包工具。
第三部分是Server,这是很重要的部分,帮助开发者统一中转渠道通知消息 。

图片6

现在Framework已经支持五种语言,包括C++、JAVA、JS、LUA。我们最核心的是使用C++很大一个原因是为了支持更多的跨平台,如果没有特殊情况的引擎,C++语言的几乎不会有太大问题。

图片7

几个界面的展示,这是本地打包工具的界面,选取了游戏管理的界面,还有一个细节,这边会有一个Keystore选择,但是这个Keystore是不会上传到我们的服务器上,意味着如果在第一台电脑上设置过文件密码,放在第二台电脑打包以后会提示没有,所以必须要手工拷过来,这主要是为了保护大家的核心资产而设计的。

还有一个防止二次打包做的设计,AnySDK在方便了大家打自己家的渠道包,同时也会方便了一些恶意的第三方修改你家的渠道包,所以通过一些手段来确保自己的包只能自己打,别人打出来是不可执行或者是不可用,或者能运行,但是运行完不能支付之类等,我们设置了非常多的门槛,基本上很难破解渠道包。

图片8

第二个叫渠道管理,还有一个是SDK管理,渠道和SDK两个并没有绑死,触控可能相对比较强势一点,在跟某些比较弱势渠道在谈的时候,触控可以要求不用渠道的SDK,而是用触控的SDK或某个指定的支付系统在渠道上线,这时在SDK管理这边就可以换,意味着SDK和渠道是分开的。

图片9

第二个界面是SDK选择,每个渠道选择某些SDK,除了渠道SDK之外还有支持广告、推送、统计,那些都是在这边选的。前面几个大的渠道都不会接广告,更小一些渠道是允许某些游戏接广告SDK的,勾上就可以了,打的包就有广告效果了,如果不允许勾掉就可以了,所以对程序员来说就是灵活自由方便。

图片10

后面这个是一个相对比较复杂的界面,SDK拿过来以后,它会有很多的参数要填,包括APPID、APPKey,还有通知地址等等,这个可能比较复杂一点,但是这些参数填一次后基本上不会变了,就可以直接打包了 。

图片11

看这个界面,这是很方便帮助大家的地方,我们有很多渠道要求在游戏图标上添加一个渠道的角标,首先这个角标要放进去,其次角标还有位置之分。有四个方向,还可以通过滚动条进行微调,比如3D效果可以微微调整一下放在边框里面。其次是看不见的效果,我要求你选择512×512像素的图,因为安卓要求很多尺寸图标,有72的,有114的等,在这里输入512的,选择一下角标的位置,AnySDK会把各个尺寸都一次性生成,包里就会有完整的角标了,虽然技术含量没有多少,但是可以为大家提供方便,相对来讲这是一次性的事情。

图片12

然后开始进入打包的过程。下面有些是红色的字,表示有配置信息不完整,参数不完整就不让打包。下来这边会显示一些信息,还有你刚才选择SDK的列表。这些事做完以后开始准备打包。

图片13

这是打完包的界面,打完包后可以看到安装、卸载等按钮,最重要是安装,这是一个本地打包工具,是装在你自己电脑上的,意味着你拿一部测试机,拿一个数据线插在电脑上,然后在这边点“安装”,我们的客户端就会把你刚才打包的程序直接装到手机上就可以直接测试。

这样本地打包的方式比云打包要方便非常多,云打包方式还要把这个包从本地传上去,然后再从云上下载下来,如果一个游戏100M的话,上传的量是100M,下载量将是100Mx10=1G,这是一个巨大的量。虽然我们是软件公司,高科技公司,但是很多公司的网速相对挺有限的,所以想下1G的量没有那么顺畅。打包完在电脑上直接安装非常快,就不需要做额外的工作。如果测试通过就点“通过”,如果不通过就点“不通过”,后面完成的时候不通过的重新打包就可以。

第三部分是Server,接过渠道服务端的同学都会知道,每一家渠道都要接,因为每家渠道的参数、格式,甚至有些细节要求都是不一样的,每家都要接一次。AnySDK在这里起到什么作用呢?AnySDK在中间,所有渠道通知到AnySDK这边来,AnySDK给GameServer是统一的消息,比如你很喜欢交朋友,交了十个朋友,还是全球各地的,如果你要跟你的朋友沟通怎么办?有两种选择,第一种选择是学10种语言,学完以后跟每个朋友用不同语言交谈。第二种是拿一个翻译软件,再狠一点可以请翻译,你跟翻译说普通话,翻译再将10种语言翻译成普通话。Server和AnySDK中间通讯是普通话,AnySDK和渠道交流采用的是全世界各种语言。

图片14

AnySDK有了这个东西怎么去用,使用的复杂性和使用步骤怎么样?整体来说只要六步,首先是下载,因为是本地的打包工具,不是网页式的,所以比别人麻烦非常多,需要整个下载下来,而且包有一百多兆,但是请放心,一百多兆是电脑上的,不会把一百多兆打到游戏里。第二步是把AnySDKFramework接入到项目中,生成母包。第三步是服务端程序员接入,这两个工作是并行的,总共加起来是5天的时间。之后通过工具生成各个渠道包,每个运行时间大概是5分钟,很重要一点是测试过才能提交。

前面讲的内容是我每次出去演讲都会讲到的,今天因为第一次来到这么大场地讲,我上台前临时加了两页PPT,是两个秘籍, 秘籍之一是命令行直接调用,有两个很重要的使用场景,第一是第三分GUI工具调用,我知道现在很多游戏开发商自己在做游戏的同时为了从长远角度考虑,为了节省工作时间,为自己开发很多工具,这些工具可以在工作流过程中直接调AnySDK,刚才吴昊介绍CocosIDE现在可以直接调SDK了。第二条是企业内网服务器自对化打包,例如ant、jenkins等。

秘籍之二,前面讲到服务端的部分流程是所有的渠道把所有的数据先通过SDK,但是有一个疑问,数据都通过AnySDK来中转,不就是意味着两个问题:1、这是串联的,AnySDK的服务器挂了是不是游戏就挂了,答案是“是”;2、游戏的数据都要过AnySDK,是不是AnySDK都知道游戏的小秘密,答案是“是”。我们提供了一套解决方案:服务端跟客户端独立使用,你可以独立使用我的客户端,反过来也可以独立使用我的服务端,当然我还是建议同时使用,如果独立使用客户端的话,数据中转可以直接通过你的服务器而不是通过AnySDK服务器。还有一些我们当前在接比较大型的游戏,已经上过十个渠道了,不想再重新做一遍,当然可以,老游戏在接的时候原有做过的渠道很稳定,还是用原来的服务端,新渠道走AnySDK的服务器,就是客户端和服务端分开来使用。

现在讲一下AnySDK几个里程碑,5月8日第一次发布,当时心里也没有太大的底,因为当时AnySDK前面没有类似的可以参考的产品,所以就没敢宣传,我就找了几个做游戏的朋友让他们接AnySDK上线整个流程跑了一圈,当时效果还可以,然后5月30日才正式发布,6月份稍微做了一些宣传,然后就开始有更多游戏开始接入。然后我们就发现又有一个问题就是服务器的稳定性,我们也开始担心服务器万一挂了怎么办,王哲经常教育我,服务器挂一次你的用户就走了,而且永远不可能回来,后来在6月份的时候我们做了热冗余,而且是双机房的冗余,在北京两个不同的机房各布的两套系统,主机房的主系统挂掉备用设备会接管,主机房断网、断电了,备用机房会自动接管服务,我们通过这种方式确保服务器的稳定性,确保我们能够提供持续的服务,所以6月5日上线之后心里的石头终于落了下来。

我们这两天在做一个事情是IOS版,今天已经有一个基本可以运行的版本,但是为了更稳定一点现在初步定的是11月1日会正式对外提供下载。IOS版支持了越狱版和AppSote版,首次会支持谷歌、AppSote等。IOS版和安卓版是统一一个打包工具,区别就在于会有一个版本的选择,包括API部分也不变,中间大部分事情是互相通用的。另外大概在11月10日我们会发布企业版,这种方式是会提供一套部署的服务器给你们,你们自己拿服务器来部署,程序还是用我们的,但是服务器稳定和数据安全由你们自己来保障,因为服务器是你们自己的服务器或者是自己租用的服务器,我们就没有任何的读写权限去看数据和修改你们的服务器,当然这个版本是收费的。企业版和通用版将会永远的并行,不会因为推出企业版就会弱化通用版或者是不支持,通用版也是一样升级, 。而且付费和免费的部分没有捆绑,可以用付费也可以用免费。

这是企业版后台的界面,企业版客户端还是一样的,只是运行时数据中转是不一样的,所以它是服务端的产品。

下一件事情比较狠,是很多开发者比较期待的,叫做“插件自定义开发”,现在插件都是我们开发的,会碰到两种情况,第一、你们不认同我们开发的插件,比如我们对渠道认识要求不一样,你们觉得这样,我们觉得这样,按照我们的认识去做了,做完以后你们不认可我们又不愿意改怎么办?你们自己可以开发。第二,渠道SDK经常更新,一更新完以后你们就要等我们把SDK更新,插件也更新才能打包,我们要是来不及,你们明天就要上线,你们可以自己开发,不需要等我们,这是在12月份下旬时候会开放这种服务,每个人都可以是一个插件程序员。这是短期之内重点要做的不一样的东西,希望给大家带来更多的方便。

图片15

AnySDK不光是一个产品,是一整套服务,一个成功的产品一定是产品加服务,所以我们建立了两个QQ群,2群群号是:368727152,有一个网站,www.anysdk.com,我们还有一个更直接的方式:0592-5919107。还有微信公众号:AnySDK,有一些信息会在微心公众号发布。谢谢大家!

Q&A实录:
提问:AnySDK以后会接入第三方SDK吗?
陈峰:会,我们现在有六大类,现在很多客户在向我们要增量更新,我们会在已有的类别上持续的增加。我们现在会比较注重国内的SDK,从明年开始会有海外的SDK。

提问:50多个渠道的话包会非常大,怎么保证大的文件通过AnySDK生成出来的非常小?
陈峰:它不会变得非常大。

提问:我们编译过程当中不知道用哪个渠道?
陈峰:您是担心我在做打渠道包的时候,实际把包里某一个开关打开,APK有三个渠道SDK,我现在要用91把91打开,另外两个是关掉。AnySDK不是这样做的,AnySDK在你打母包的时候里面没有任何第三方SDK,我们在打包的时候才把SDK塞进去,而且塞什么取决于你之前选什么,你选择91,打开这个包就只会有91的SDK。

提问:对于安卓很好理解,对于IPA怎么操作的?
陈峰:IPA不允许动态改变任何东西,所以我们是用编译的方式来做。

提问:AnySDK长远有没有可能支持ANE的计划,在游戏上直接可以用AnySDK?
陈峰:长远的东西不太好讲,短期之内没有计划,有两点,因为Flash游戏本身不是特别多,我们把现有的力量服务于更多人群。第二,我们已经有客户通过JAVA的方式来完成,你们也可以试试,所以短期内是没有计划来做这个的。

提问:你们打包的时候有应用宝吗?
陈峰:应用宝做第一轮测试了,顺利的话在11月份第一周左右可能会发布。

提问:请问AnySDK怎么实现防打包的?
陈峰:我们自己发现这个问题以后讨论解决方案的时候就想怎么保证它的安全,我就做了一个决定,AnySDK产生出来包的安全风险程度不要超过大家手工打包的安全风险程度,所以我们 在C++层面写了一些加密的数据,相对来讲不好去破解,但是不是不能破解。第二点是采用的加固功能,打完了包通过AnySDK客户端直接加密,希望通过加密的方式来反解包,因为我们自己团队真的不擅长做这个。

AnySDK演示PPT下载地址:
http://upyun.cocimg.com/cocos2014/2014开发者大会_AnySDK.pdf