• login

    AnySDK v1.4 更新发布

    lee 新闻

    2015-01-04

    AnySDK最新版本v1.4于2015/1/4发布更新。
    本次更新主要针对打包工具的部分功能及稳定性进行调整,增加了本地加固功能、加入智能合并字符串功能等。欢迎登录www.anysdk.com下载使用。

    版本号:v1.4
    发布日期:2015年1月4日
    新增功能:
        1、新增对iOS支持(支持Cpp、Lua、JS框架);
        2、新增命令行执行打包任务功能;
        3、新增自定义Meta元素功能;
        4、新增导入和恢复插件到指定版本的功能;

    优化:
        1、Unity3D框架重构;
        2、自定义渠道功能修改优化;
        3、新增渠道号修改功能,方便开发者使用自定义渠道号统计数据;
        4、打包界面优化:加入SDK点击即可下载功能;
        5、打包流程优化:修复打包过程中出现卡住等问题;
        6、打包界面母包输入框支持拖拉输入;
        7、当SDK插件本地目录不存在时,参数配置界面相应提示;
        8、当未选择SDK时,加入提示;
        9、删除渠道添加确定框.以防误删;
        10、修复支付通知地址跨机子不同步的问题;
        11、打包结果界面,错误的“问号”改为“详细信息”;
        12、参数配置界面上的SDK版本号修改为以config.xml的版本号为准,加入SDK说明展示;
        13、打包工具,SDK列表中网址导航加入tips;

    PS:
        1、如果您使用新的框架,请务必使用新的打包工具,以免出现不必要的错误;
        2、如果您的MAC系统是10.10及以上版本,麻烦使用最新打包工具;
        3、如果您正在使用“SDK插件更新”及“SDK版本更新”部分涉及到的插件,强烈建议您更新AnySDK打包工具客户端之后,重新制作渠道包;
        4、即日起AnySDK所有Sample(包括客户端和服务端)已移至Github托管。请前往 https://github.com/AnySDK/ 自取。

  • 1

    AnySDK常见接入问题集锦

    lee 新闻

    2014-12-17

    小米SDK登录不显示登录界面?

    很多开发者在第一次打包小米渠道包并测试的时候会发现调用登录函数之后并没有显示小米的登录界面,而是直接回调了登录失败函数。但是其他的渠道包却又正常登录,说明母包代码写的没有问题,这是为什么呢?

    其实原因出在小米的特殊设计上面,很多渠道都要求开发者提交渠道包的时候要修改包名为固定渠道标志字符串结尾,小米也是一样,小米渠道规定要上传的apk包名必须以mi结尾。

    但是在小米后台的包名配置界面却没有提示,很多开发者在配置应用信息的时候在此处配置的是母包的原始包名,但是真正打渠道包的时候又添加了mi结尾,导致打出的渠道包包名与后台配置包名不匹配,而小米的SDK内部设计即是在登录前检测当前包名是否跟服务器后台配置一致,如果不一致则直接返回登录失败并且不显示登录界面,因此就有了这个问题。只要保证小米开发者后台配置的包名跟实际打出的渠道包包名一致就可解决。

    悬浮窗没有显示是什么原因?

    目前很多渠道SDK都增加了一个悬浮窗功能,即在游戏运行后界面商会显示一个半透明的悬浮窗按钮,点击之后可展开,里面容纳了若干SDK相关的功能选项。而渠道在审核包的时候也会检查开发者是否正确接入了SDK悬浮窗功能。

    但是各家渠道在悬浮窗功能设计上遵循的观念却又有区别,有些SDK是只要开发者初始化完成或者登录成功后SDK自动就会显示悬浮窗,而另一些SDK却需要开发者登录成功后手动调用相应的控制函数来显示和隐藏悬浮窗,如果开发者忘记调用控制函数的话虚浮窗是不会自动显示出来的。因此开发者在接入AnySDK Framework的时候要判断当前渠道SDK是否支持showToolBar和hideToolBar函数并在登录成功后调用相关函数。

    另外,目前有越来越多的渠道开始规定开发者必须在渠道后台配置应用包名,SDK只有在检测到当前包名跟管理后台配置的包名匹配的时候才能显示悬浮窗,否则即使登录成功或者调用了显示悬浮窗的函数也无法正确显示悬浮窗。

    典型的例子就是360渠道,目前360SDK内部已经需要检测包名匹配之后才能够显示悬浮窗,但是在360的开发者管理后台却没有任何地方可以配置这个应用包名,必须要开发者去联系360的技术支持或者运营人员才可以通过他们去360服务器配置正确的包名来显示悬浮窗。

    支付界面没有显示支付方式?

    有些开发者在打包渠道包成功后调用支付函数,显示出的SDK支付界面上却提示没有可用的支付方式,因此怀疑是不是有参数没有正确配置导致无法支付,常出现此问题的渠道有UC和安智等。

    其实这种情况出现的原因是这些渠道需要在开发者后台配置当前游戏需要启用的支付方式,开发者如果没有配置任何一种支付方式,那么SDK支付界面就不会显示正确的支付界面。此时需要开发者联系渠道商务或者运营去帮忙配置相关的支付方式即可正确开启支付功能。

    微信分享失败?

    很多开发者在集成了分享功能之后发现其他分享方式都能够正确分享,只有微信分享一直不成功。

    这是因为微信分享限制比较多,在微信开发者后台有两个比较重要的参数需要配置,第一个就是应用包名,第二个就是签名文件md5。微信的SDK进行分享的时候会检测当前的应用包名跟签名文件的md5值是不是跟后台配置的完全一致。如果有任何一项不匹配就会分享失败。因此如果开发者要测试微信分享功能,需要在打包工具里配置签名文件为微信后台注册的那个签名文件再打包。

    支付提示参数缺失?

    有一些开发者在测试支付功能的时候会遇到两种提示支付参数不完整的情况。

    第一种是在调用支付函数之后直接回调支付失败,log提示“param incomplete”,这种情况是因为开发者在调用函数的时候传入的商品信息中缺失了某些参数,此时需要对照 http://docs.anysdk.com/IAPSystem#.E6.94.AF.E4.BB.98这份文档中列出的商品信息参数来确定代码中有哪些参数尚未传入。

    第二种是调用了支付函数后正确打开了SDK支付界面,但是SDK弹出toast提示商品信息不完整,这种情况是因为有些渠道需要开发者在渠道的开发者管理后台去配置当前游戏内的商品列表,并为每一个商品生成一个ID序号,开发者在调用支付的时候需要将此序号作为商品ID参数传入SDK才可以正确获取商品信息并支付。

    OPPO显示商品名称不正确?

    开发者在第一次打包OPPO渠道测试支付时会发现,在其他渠道支付界面上显示正常的商品名称信息在OPPO渠道SDK的支付界面却出现了问题。

    比如当前游戏内有一个商品叫10金币,价值10元,玩家购买后在游戏内会增加10个金币。那么在通常情况下此商品的信息参数里product_name为“10金币”,product_price为10,product_count为1 即可。

    但是OPPO的SDK设计比较特殊,它支付界面上显示的商品名称却是 product_count + product_name,因此如此配置的话在界面上显示的就会是“110金币”这样。因此,开发者必须在代码中判断如果是OPPO渠道包,传入商品参数的时候应该将product_name设置为“金币”,product_count设置为“10”,product_price设置为“1”才可以正确的显示商品名称并计费。

    华为支付失败,无法弹出支付界面?

    目前有开发者遇到在测试华为渠道包的时候调用支付函数但是无法显示华为的支付界面,而是直接失败的情况。这是因为华为SDK支付需要玩家手机上安装有“快捷支付 – 华为应用市场”这个应用才可以正常支付。如果SDK没有自动弹出安装界面,请开发者自行下载安装,然后再次测试支付。

  • fuzhou-1

    AnySDK花开榕城 美女主程揭秘最好的本地打包工具

    lee 新闻

    2014-12-11

    11月29日,Cocos开发者平台主题沙龙“变革颠覆,红海突围”在榕城福州拉开帷幕,吸引了百余人的热情参与。此次沙龙覆盖手游开发、运营、推广的各个环节,由AnySDK 美女主程黄艳丽带来的干货分享更得到了现场听众的一致认可,提问呼声非常高涨。

    作为目前最好的本地打包工具AnySDK,它究竟有哪些独特优势和亮点?让我们一起回到沙龙现场,找出答案。

    fuzhou-1
    (美女主程黄艳丽,现场介绍被誉为“手游渠道接入神器”的AnySDK。)

    从12个月到1周 AnySDK高效提速打包效率

    fuzhou-2

    近期,AnySDK发起了一个关于渠道接入的线上调查:超过一半的从业者认为,传统的人工接入渠道造成了时间、人力资源的大量浪费。据不完全统计,目前市场上单渠道SDK已超过50个,具有其他第三方功能的SDK更是不计其数。假如现在有一款游戏准备接入52个渠道, 按照业内平均速度即一个渠道一周,52个SDK需要52周,也就是12个月才能完成配置、上线工作。

    除去鲜有的大作,一款手游的标准开发周期只有八个月到一年 ,即SDK的接入时间几乎等同于游戏开发周期。这严重拖后了行业效率,大到游戏大厂、小到独立开发者都纷纷表示不堪重负。

    fuzhou-3

    AnySDK作为目前“最好的本地打包工具”,有效地解决了行业普遍存在的“打包难”问题,将每个SDK打包时间大大缩短至不到5分钟。52个SDK仅需一周即可完成,效率提升了52倍,这就是AnySDK带给开发者最大的价值。

    之前有不少程序员都会抱怨:怎么还有渠道需要接入!也许现在程序员同样会抱怨,但是内容却变了:怎么没有渠道要接入了!

    支持5种语言6类SDK 企业版捍卫信息安全

    fuzhou-4

    目前AnySDK已经支持5种主流语言,包括C++、JAVA、JS、Lua以及C#。此外,AnySDK同样支持用户系统、支付系统、广告SDK、推送SDL、统计分析SDK、社交分享SDK六大类SDK,涵盖了当前市场的众多主流渠道,能满足大部分CP的SDK接入需求。

    fuzhou-5

    针对众多开发者关注的信息安全问题,AnySDK负责人陈峰也在现场给出了满意的答案。据悉,AnySDK目前已经推出了企业版,企业用户可自己搭建服务器,部署中转服务,所有的登陆消息和支付消息由游戏开发商自己掌控,从源头上解决了开发商担心运营数据外泄及中转服务器稳定性的问题;其次,结合插件自定义开发以及企业版,用户还可以全面掌控SDK接入的进度、质量、安全,彻底解决接入各种SDK中间所有遇到的问题。

    此外,陈峰还透露了众所期待的AnySDK的iOS版本最快将会在今年12月份推出,同样支持目前市场上绝大多数苹果越狱渠道。

    动态更新 一键触达最新版SDK

    fuzhou-6

    调查表明,各渠道SDK 的不定时版本更新, 给近30%的开发者带来了更改代码的烦恼。针对这类问题,AnySDK提供了省心省力的“动态升级”功能。每一次启动桌面客户端工具,AnySDK都将自动扫描SDK版本,提示更新至最新的SDK版本。从此之后,工作人员无需手动搜索,轻轻点击鼠标即可轻松升级SDK,以确保每次打包都能使用到最新的SDK版本。

    作为“Cocos开发者平台”的重点战略产品,AnySDK自从今年五月份发布以来,以完善的服务和过硬的产品质量获得了众多游戏开发商的认可。据悉, 目前已有超过100家手游厂商成功通过AnySDK解决方案进行渠道上线,其中不乏月流水过千万的精品大作。

  • cocosplay-1

    AnySDK集成“点击即玩”技术Cocos Play

    lee 新闻

    2014-12-11

    AnySDK正式集成“点击即玩”技术Cocos Play,用户可通过AnySDK打包工具直接下载Cocos Play框架,帮助开发者更加便捷地实现“免安装直接运行游戏”“大包变小包”的流式加载技术,以数倍提高点击转化率。

    cocosplay-1

    目前,已有《刀塔传奇》《秦时明月》等畅销手游接入Cocos Play技术。通过本技术,《刀塔传奇》的首次安装包体积从105.41MB压缩到9.45MB,《秦时明月》从71.66MB压缩到5.4MB,意味着两款游戏的下载时间分别减少了91%和92.5%。

    1、Cocos Play概述

    Cocos Play实现了免安装直接运行游戏,大包变小包的流式加载技术。

    游戏开发商可用这一技术来实现小包分发、快速试玩以达到提高流量转化率的目的;渠道厂商可以基于此技术实现游戏大厅,免安装直接运行游戏,提高流量转化率。

    1.1、点击即玩

    用户只需要点击一次,就可以直接进入游戏,而不需要传统的“安装->确认权限”的方式来运行游戏。减少了玩家等待安装的时间,在保证了游戏高性能的前提下,达到了点击即玩的目的。

    根据Cocos2d-x引擎的特点,设计了Cocos Play点击即玩方案,该技术方案对使用Cocos2d-x引擎的游戏均有效。Cocos2d-x游戏按照这份技术规范对游戏进行轻微改动之后,就可以改造成点击即玩的方式。玩家不需要等待整个游戏下载完成、不需要确认权限后安装,只需要一次点击,就可以启动游戏进行快速试玩。

    任何Cocos2d-x游戏,不论采用任何版本的Cocos2d-x引擎,不论采用C++, Lua或JavaScript语言开发,都可以简单改造后运行在Cocos Play中。代码改动工作量在半人日以内。

    1.2、大包变小包

    将一个体积较大的游戏,通过流式加载技术,先加载最基础的部分即可进入游戏;玩家在游戏的过程中,静默的下载后续才需要使用到的资源文件。

    cocosplay-2

    1.3、方案优点

    1)、点击即玩。玩家从游戏列表或游戏广告图片上,只需点击屏幕一次,就可以进入游戏

    2)、减少玩家等待安装的时间。如下文的案例,我们和上海莉莉丝合作,把原本110M APK安装包的《刀塔传奇》,压缩到7.9M,玩家首次进入游戏的等待时间从550秒缩短到40秒。而秦时明月则从71.66M压缩到5.1M。

    3)、保证游戏的高性能。Cocos2d-x引擎以高性能著称,Cocos Play里面使用了Cocos2d-x引擎高性能的C++核心作为基础,让玩家获得100%等同于原生游戏的流畅度。对于游戏研发商而言,原来.apk安卓封包格式的游戏能跑多快,在Cocos Play里面就能跑多快,性能完全一致。

    4)、无碎片化。HTML5技术是由W3C的HTML5标准委员会制定,然后再由各浏览器厂商落地实现。而实际上各浏览器厂商并没有都100%实现HTML5标准,不仅如此还自己增加各种扩展功能吸引开发者。而Cocos2d-x由触控科技负责开发和维护,没有复杂的标准制定流程、没有不同厂商之间的扯皮,在占据国内手机游戏引擎市场70%之后,Cocos2d-x引擎已经成为事实上的底层标准。正式因为如此,开发Cocos2d-x引擎的触控科技才能设计、维护、和运营Cocos Play技术方案,而保证Cocos Play上面不会产生碎片化现象,导致研发商需要投入额外的精力。

    2、案例和数据

    2.1、提升游戏的新用户转化率

    Cocos Play技术目前接入产品《刀塔传奇》、《秦时明月》,并于7月底开启测试。《刀塔传奇》目前拥有千万级用户,连续蝉联苹果畅销榜榜首,是近半年来最火爆的国内手机网游。《秦时明月》自上线以来用户量已累计破千万,受到众多秦迷追捧和各大安卓渠道的青睐,在国内动漫IP游戏中无出其右。

    通过Cocos Play技术,《刀塔传奇》的首次安装包体积从105.41MB压缩到9.45MB,《秦时明月》从71.66MB压缩到5.4MB,这也就意味着两款游戏的下载时间分别减少了91%和92.5%,在3G网络环境下,《秦时明月》从点击“试玩”按钮到进入游戏只需要12秒。

    cocosplay-3

    游戏接入Cocos Play以后,可以实现点开即玩、边玩边下。这两款持续火爆的游戏预估会在Cocos Play的推动下,继续提升新用户转化以及长尾流量的利用率。

    cocosplay-4

    2.2、提升渠道的平台用户利用率

    Cocos Play目前已经接入91助手,并预计于8月中旬上线试玩模式。91助手是国内领先的第三方应用平台,覆盖Android和iOS两大主流平台,受亿万智能手机用户的喜爱,其应用和游戏发行量在国内名列前茅。Cocos Play目前与91助手合作游戏试玩专区,点开即玩,先玩后下,为用户打造更加炫酷的游戏体验平台。

    cocosplay-5

    移动市场上,各渠道、流量拥有者如何让平台用户达到最大化的利用率,是当前状态下各平台都需要面对的问题。而Cocos Play和91助手的合作就是一个充满期待的尝试。让用户免安装体验游戏,让对的用户进入对的游戏,将平台游戏用户的利用率发挥到最大。

    3、总结

    在移动互联网人口红利阶段已趋于结束、流量转化率低下的今天,触控科技推出了Cocos Play点击即玩技术,有效缩短了游戏首次安装的等待时间90%以上,能让玩家以更短的时间、更少的操作步骤进入游戏体验。我们希望通过这一技术,有效提高渠道、广告等平台的流量转化效率,实现触控科技、游戏开发商、渠道多赢。

  • cover

    【在线视频】AnySDK本地打包具介绍及项实战

    lee 新闻

    2014-11-20

    内容简介:目前国内Android市场蓬勃发展,据网络不完整统计已经超过了300个,加上超级APP等据传已经超过600了,而这其中有60多个渠道拥有自己的 SDK,这直接导致了开发商在完成游戏本身的开发之后还有大量的SDK接入工作。AnySDK是一款快速接入第三方SDK的工具,框架部分目前支持C++、JAVA、C#、Lua、JavaScript这5种语言,本地打包客户端支持Windows、MAC两种主流操作系统,能适应绝大部分的开发环境,为此我们邀请到了资深程序员,AnySDK项目主程,同时是负责整个项目的产品设计及开发与维护的黄艳丽为大家带来AnySDK本地打包工具介绍及项目实战。
    AnySDK相关报道:http://www.csdn.net/article/2014-11-06/2822524
    AnySDK官网:http://www.anysdk.com/
    GitHub地址:https://github.com/AnySDK
    AnySDK详解:http://www.anysdk.com/2014/11/1541
    AnySDK常见Q&A:http://docs.anysdk.com/Introduce

  • login

    AnySDK v1.3 更新发布

    lee 新闻

    2014-11-17

    AnySDK最新版本v1.3于2014/11/17发布更新。

    本次更新主要针对打包工具的部分功能及稳定性进行调整,增加了本地加固功能、加入智能合并字符串功能等。欢迎登录www.anysdk.com下载使用。

    版本号:v1.3
    发布日期:2014年11月17日

    AnySDK v1.3更新内容:

    1、打包工具加入智能合并字符串功能,针对资源冲突问题;
    2、在游戏管理中新增默认登陆验证与支付验证地址,用于新增SDK时自动填写;
    3、打包过程中可选择性修改AppName;
    4、打包工具所使用工具升级;
    5、打包工具 SDK列表加入导向后台的链接;
    6、本地加固;
    7、加入对CocosPlay的支持;
    8、加入渠道是否打开闪屏的功能;
    9、修复插件更新BUG;
    10、修复多线程执行打包任务时概率性出现打包失败的BUG;
    11、加入记录打包历史功能;

    PS:
    1、如果您使用新的框架,请务必使用新的打包工具,否则会出现应用一启动便崩溃;

    2、如果您的MAC系统是10.10及以上版本,麻烦使用最新打包工具;

    3、如果您正在使用“SDK插件更新”及“SDK版本更新”部分涉及到的插件,强烈建议您更新AnySDK打包工具客户端之后,重新制作渠道包;

    4、即日起AnySDK所有Sample(包括客户端和服务端)已移至Github托管。请前往https://github.com/AnySDK/自取。

  • 图片7-thumb

    AnySDK项目实战教程

    lee 新闻

    2014-11-13

    一、Cocos2d-x环境的搭建

    关于Cocos2d-x的环境搭建,网上相关的教程已经有很多了,在此就简单的介绍一下。

    1.1 所需工具及软件

    1、JDK(1.7版本)
    http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
    2、Android SDK(直接在Eclipse里下载所需要的SDK版本)
    3、Android NDK(r9d及以上)
    http://developer.android.com/sdk/index.html
    4、Ant
    http://ant.apache.org/bindownload.cgi
    5、Python(2.7版本)
    https://www.python.org/downloads/release/python-278/
    6、Eclipse ADT
    http://developer.android.com/tools/sdk/ndk/index.html
    7、VS2012(Windows)或XCode(Mac OS)
    8、Cocos2d-x-3.3alpha0(本项目所使用的版本)
    https://github.com/cocos2d/cocos2d-x/tree/d1437540343dbf6c2ff4def708d60ed05bd3ec37

    1.2 配置环境

    准备好如上软件后,配置好JDK与Python的环境变量,执行Cocos2d-x下的setup.py进行各个环境变量的设置,然后就可以使用cocos命令了。

    例子:
    创建工程: cocos new demo -p com.game.demo -l cpp -d d:\cocos
    编译Android: cocos compile -p android -j 4

    二、AnySDK环境的搭建

    下载打包客户端及Framework(http://www.anysdk.com/downloads),解压文件夹,安装AnySDK打包客户端。详细使用可查看官方文档http://docs.anysdk.com

    三、实战项目的搭建

    3.1 项目源码下载

    从github上下载游戏项目https://github.com/AnySDK/EarthWarrior3D,由于cocos2d目录是引用Cocos2d-x-3.3alpha0的github,要确保有下载下来。(注意:Cocos2d-x 3.3alpha0中的plugin、bindings-generator、cocos2d-console也是引用)

    由于external目录里的库并不完全,所以要运行cocos2d-x的download-deps.py下载external库。

    3.2 项目搭建

    1.将AnySDK的Framework导入项目

    打开之前下载好的AnySDK文件夹,在AnySDK_Framework_C++里有三个文件夹,查看项目工程里的Android.mk里的STL库类型APP_STL := gnustl_static,所以这里要使用的就是protocols_gnustl_static文件夹。

    图片1

    将protocols_gnustl_static文件夹复制到EarthWarrior3D的proj.android目录下,重命名为protocols。

    2.修改Android.mk文件配置Framework编译选项

    1、头文件目录里添加protocols下的android和include目录。

    LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes \
           		$(LOCAL_PATH)/../protocols/android	\
           		$(LOCAL_PATH)/../protocols/include
    



    2、添加PluginProtocolStatic静态库

    LOCAL_WHOLE_STATIC_LIBRARIES += PluginProtocolStatic
    



    3、引入模块库

    $(call import-module,protocols/android)
    


    3.添加新路径至ndk module path
    本项目使用build_native编译,所以修改build_native.py文件:

    if platform == 'win32':
            ndk_module_path = 'NDK_MODULE_PATH=%s;%s;%s/external;%s/cocos' % ("./",cocos_root, cocos_root, cocos_root)
    else:
            ndk_module_path = 'NDK_MODULE_PATH=%s:%s:%s/external:%s/cocos' % ("./",cocos_root, cocos_root, cocos_root)
    


    如果使用cocos compile命令编译,则是修改build-cfg.json文件:

    "ndk_module_path" :[
            "../cocos2d",
            "../cocos2d/cocos",
            "../cocos2d/external",
            ""
    ],
    



    4.导入框架自带的的jar包并勾选export选项
    在Eclipse里导入游戏工程和libcocos2dx工程(cocos/platform/android/java),右键点击工程,选择Properties后选择Java Build Path,在面板上点击 Libraries,通过Add JARs…将libPluginProtocol.jar引进游戏工程。

    图片2

    图片3

    PS:如果使用cocos compile命令编译,要将libPluginProtocol.jar放到libs目录下,还需要在Application.mk里面添加一句NDK_TOOLCHAIN_VERSION=clang。

    5.配置AndroidManifest.xml添加框架需要的权限

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.RESTART_PACKAGES" />
    <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
    


    四、项目程序编写

    4.1 初始化AnySDK Framework

    1).初始化JavaVM
    首先,要在游戏工程加载jni的时候为AnySDK Framework设置JavaVM引用。先找到JNI_OnLoad函数,此函数是jni被加载时会首先被调用的函数。

    本项目工程将platform/android目录下的javaactivity.cpp的JNI_OnLoad函数注释掉,然后拷贝JNI_OnLoad函数到main.cpp里。

    (1)、导入头文件并声明命名空间。

    #include "PluginJniHelper.h"
    using namespace anysdk::framework ;
    

    图片4

    (2)、并且添加上javaVM代码。

    PluginJniHelper::setJavaVM(vm);
    

    图片5

    2).在JAVA层初始化AnySDK Framework框架
    (1)、首先找到游戏工程的主Activity,本项目为AppActivity。
    (2)、然后重写Activity的onCreate()方法,并新增如下代码来初始化AnySDK Framework:

    import com.anysdk.framework.PluginWrapper;
    
    protected void onCreate(Bundle savedState) {
            super.onCreate(savedState);
            PluginWrapper.init(this);
    }
    

    (3)、重写Activity生命周期相关方法,代码如下:

    import android.content.Intent;
    
    @Override
    protected void onResume() {
            PluginWrapper.onResume();    
            super.onResume();
    }
    @Override
    public void onPause(){
            PluginWrapper.onPause();
            super.onPause();
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, 	Intent data){
    PluginWrapper.onActivityResult(requestCode, resultCode, data);
            super.onActivityResult(requestCode, resultCode, data);
    }
    @Override
    protected void onNewIntent(Intent intent) {
            PluginWrapper.onNewIntent(intent);
            super.onNewIntent(intent);
    }
    

    3).创建好需要的JAVA类和C++类
    创建新的C++的文件来编写AnySDK的逻辑代码,本项目创建了个PluginChannel类来实现用户系统和支付系统的功能,PluginChannel类需要继承UserActionListener和PayResultListener,重写其事件回调函数。

    JAVA创建一个wrapper类,用来调用C++的函数。在PluginChannel.cpp里定义wrapper的函数(nativeInitPlugins和nativeUnloadPlugins)。

    Wrapper.java的定义:

    public class wrapper {
    	public static native void nativeInitPlugins();
    	public static native void nativeUnLoadPlugins();
    }
    

    PluginChannel.cpp里nativeInitPlugins和nativeUnloadPlugins的定义:

    extern "C"
    {
            JNIEXPORT void JNICALL Java_org_cocos2dx_cpp_wrapper_nativeInitPlugins(JNIEnv*  env, jobject thiz)
            {
                    PluginChannel::getInstance()->loadPlugins();
            }
        
            JNIEXPORT void JNICALL Java_org_cocos2dx_cpp_wrapper_nativeUnLoadPlugins(JNIEnv*  env, jobject thiz)
            {
                    PluginChannel::purge();
            }
    }
    

    4).在C++层初始化AnySDK Framework框架
    在PluginChannel的loadPlugins函数里编写初始化、加载插件、设置监听等逻辑,然后调用该函数来进行初始化。在onCreate函数里的PluginWrapper.init(this)之后添加如下代码来进行初始化:

    wrapper.nativeInitPlugins();
    

    在PluginChannel的loadPlugins函数里所要做的处理如下:
    (1)、初始化appKey、appSecret、privateKey、oauthLoginServer参数。

    std::string oauthLoginServer = "http://oauth.anysdk.com/api/OauthLoginDemo/Login.php";
    std::string appKey = "BC26F841-DAC5-9244-D025-759F49997A28";
    std::string appSecret = "1dff378a8f254ec8ad4b492cae72381b";
    std::string privateKey = "696064B29E9A0B7DDBD6FCB88F34A555";
    
    AgentManager::getInstance()->init(appKey,appSecret,privateKey,oauthLoginServer);
    

    (2)、加载所有插件。

    AgentManager::getInstance()->loadALLPlugin();
    

    (3)、设置各个插件的Debug模式和监听等。

    if(AgentManager::getInstance()->getUserPlugin())
    {
            AgentManager::getInstance()->getUserPlugin()->setDebugMode(true);
            AgentManager::getInstance()->getUserPlugin()->setActionListener(this);
    }
        
    std::map* _pluginsIAPMap  = AgentManager::getInstance()->getIAPPlugin();
    std::map::iterator iter;
    for(iter = _pluginsIAPMap->begin(); iter != _pluginsIAPMap->end(); iter++)
    {
            (iter->second)->setDebugMode(true);
            (iter->second)->setResultListener(this);
    }
    

    5).编写PluginChannel类需要的函数
    PluginChannel类里的函数众多,这里就介绍下login和payment。

    (1)、login函数,通过getUserPlugin判断下是否有存在用户插件,存在则调用login函数弹出登陆界面。

    void PluginChannel::login()
    {
            if(AgentManager::getInstance()->getUserPlugin())
            {
                    AgentManager::getInstance()->getUserPlugin()->login();
            }
    }
    

    (2)、payment函数,因为AnySDK支持多种支付方式,所以通过getIAPPlugin获取所有的支付插件。使用map容器来添加支付所需的各种参数信息,调用支付插件的payForProduct进行支付。如果使用多种支付方式,还需要自己处理相关UI及界面。

    void PluginChannel::payment()
    {
            std::map productInfo;
            std::map* _pluginsIAPMap  = 								AgentManager::getInstance()->getIAPPlugin();
            std::map::iterator it = _pluginsIAPMap->begin();
            if(_pluginsIAPMap)
            {
                    productInfo["Product_Price"] = "1";
                    productInfo["Product_Id"] = "1";
                    productInfo["Product_Name"] = "豌豆荚测试a1";
                    productInfo["Server_Id"] = "13";
                    productInfo["Product_Count"] = "1";
                    productInfo["Role_Id"] = "1";
                    productInfo["Role_Name"] = "1";
                    productInfo["Role_Grade"] = "1";
                    productInfo["Role_Balance"] = "1";
                    if(_pluginsIAPMap->size() == 1)
                    {
                            (it->second)->setDebugMode(true);
                            (it->second)->payForProduct(productInfo);
                    }
                    else if(_pluginsIAPMap->size() > 1)
                    {
                            //多支付,游戏开发商自己处理相关UI及界面
                    }
            }
    }
    

    6).在游戏C++代码中调用PluginChannel类
    为了保证Win32工程可以正常运行,所有涉及AnySDK的代码都采用条件宏判断,在Win32工程下不进行编译。

    本项目只修改游戏工程的MainMenuScene.cpp文件,也就是只在主菜单的场景里添加AnySDK的功能。

    (1)、添加PluginChannel头文件

    #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
    #include "PluginChannel.h"
    #endif
    

    (2)、修改startgame_callback函数,点击START GAME的时候将会调用login函数来弹出登陆框。

    void MainMenuScene::startgame_callback()
    {
            CCLOG("login");
    #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
            CCLOG("PluginChannel");
            bReady = true;
            PluginChannel::getInstance()->login();//调用渠道登陆
    #else
            CCLOG("startgame_callback");
            CocosDenshion::SimpleAudioEngine::getInstance()->stopBackgroundMusic();
            GameLayer::isDie=false;
            auto scene = (LoadingScene::audioloaded) ? 											HelloWorld::createScene() :LoadingScene::createScene();
            Director::getInstance()->replaceScene(scene);
            CCLOG("startgame_callback");
    #endif
    }
    

    (3)、修改update函数,通过isLogined函数判断登陆状态,当状态为登陆则跳转场景开始游戏。

    void MainMenuScene::update(float dt){
            pRate+=0.01;
            plane->setPosition3D(Vec3(visible_size_macro.width/2+50,480-20*sin(1.05*pRate),0));
    #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
            if(PluginChannel::getInstance()->isLogined()&&bReady)//判断登陆状态
            {
                    CocosDenshion::SimpleAudioEngine::getInstance()->stopBackgroundMusic();
                    GameLayer::isDie=false;
                    auto scene = (LoadingScene::audioloaded) ? 										HelloWorld::createScene() :LoadingScene::createScene();
                    Director::getInstance()->replaceScene(scene);
            }
    #endif
    
    }
    

    (4)、修改recharge_callback函数,调用payment函数来显示支付界面。

    void MainMenuScene::recharge_callback()
    {
            CCLOG("recharge");
    #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
            CCLOG("PluginChannel");
            PluginChannel::getInstance()->payment();//调用渠道支付
    #else
    
    #endif
    }
    

    五、编译运行游戏

    最后进行编译,在编译完工程后,就可以在手机或模拟器上安装apk运行游戏了,可使用测试账号(用户名:csdn,密码:csdn)进行登陆,游戏效果如下:

    图片6
    图片7

  • 图片1

    【演讲实录】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月份下旬时候会开放这种服务,每个人都可以是一个插件程序员。这是短期之内重点要做的不一样的东西,希望给大家带来更多的方便。

    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

  • 2014-11-07 16_36_14

    《程序员》专访AnySDK陈峰:本地打包 快速接入渠道

    lee 新闻

    2014-11-06

    AnySDK是触控科技推出的一款为手游开发商提供的免费、快速、本地打包接入第三方渠道的一站式解决方案。相比原来接入渠道的龟速,AnySDK帮助多家公司在短短一两周内即完成产品的接入、做包、测试与几十个主流渠道的上线。为了进一步了解这个工具,《程序员》近日对AnySDK负责人陈峰进行了专访,从和他的交流中真正认识到AnySDK的独特之处,以及项目背后的故事。
    2014-11-07 16_36_14

    快速的本地打包

    《程序员》:AnySDK是2014年才推出的,着手打造这样一款工具的初衷是什么?

    陈峰:其实严格意义上讲,AnySDK并不算是2014年才推出的,它有一个前身叫Plugin-x,是Cocos2d-x引擎中的一个模块,从2012年6月就开始做了,应该算是国内这一领域的第一款产品。从技术角度上来讲,Plugin-x在当时是成功的,但因为它没有产品化,所以一直没有得到商业方面的大力推广。2013年,我加入了触控科技后,在梳理公司的各种项目时,一眼便看中了Plugin-x,我觉得它可以做成一个非常好的商业化项目,让开发者更容易地进行渠道打包,于是Cocos2d-x作者王哲就让我做这个项目了。一开始其实想过很多名字,最后选择AnySDK的一个原因是www.anysdk.com这个域名没有被人抢注。

    《程序员》:与其他产品相比,如棱镜,以及你之前做过的91 SDK,AnySDK的主要区别是什么?

    陈峰:AnySDK对我们而言是一款完全自主创新的产品,并没有去与别的产品作比较。不过如果一定要与其他产品做个对比的话,我个人觉得有以下几个区别。

    第一,目的不一样。有些公司是因为盈利目的或是自身的其他原因,才来做这件事情的。而我们不一样,此前做Plugin-x是为了打造一套完整的引擎框架,现在做AnySDK则提升了目标,是为了推动开发工具链的进化,让开发者更舒服地使用这套引擎,以及更舒服地把整个游戏开发出来而做的。

    第二,从最直观的角度来讲,本地打包是AnySDK与其他同类产品的最大区别,其他竞品大多数采用的是云打包。

    《程序员》:所以对开发者来说,最能体验到的区别就是:AnySDK是本地打包,对吗?

    陈峰:是的。AnySDK采用本地打包,就是当母包编译完之后,在自己的电脑上就可以生成各个渠道包。关于这一点,我们拿公司自己代理的游戏《万千回忆》测试过。《万千回忆》这款游戏有个语音系统,完整包有四百多兆,如果采用云打包,先不说打包的过程,单是把包从电脑上传到云端的时间就需要非常久。而我们用AnySDK进行本地打包,总共就只花了四分钟左右。

    动态加载模式

    《程序员》:AnySDK在上线之后,有根据开发者的反馈做过一些优化或调整吗?

    陈峰:还是比较多的,我们正式首次上线的时间是2014年5月8日,但5月8~6月5日期间我们几乎没有上过一款游戏。那么,这段时间我们做了什么呢?就是找了一批关系比较好的兄弟公司,请他们试用AnySDK。这中间我们做了非常多的调整,用户在使用的过程中一旦发现问题,我们就立即进行修改。

    《程序员》:在开发过程中有没有遇到过一些技术上的难题,最后是怎样攻克的?

    陈峰:刚开始碰到过,起初通过编译模式开发时,十个渠道的打包过程可能要消耗一整天的编译时间。于是我们就改变了模式,通过动态加载的方式来做。其实当时还有一个更好的办法,打出来的包会更完美一点,但代价太大。我们权衡了一下,选择了现在这种方法,也就是对包进行重组,动态地做一个渠道包出来。打包过程就不需要编译了,所以可以非常快,大概三五分钟就能做出一个包。

    《程序员》:除了技术方面,在研发过程中还有哪些让你印象深刻的事情?

    陈峰:其实我们在最开始也尝试过云打包。但很快就在评估中发现一个问题——受网络约束太大。一是受网速影响,二是有些公司对于上网有限制,那么这些公司就完全没办法用。

    放弃云打包后,我们就决定开始用本地打包,不过这个打包工具用什么框架、用什么语言、用什么东西来做,大家又讨论了很久。我们当时定的第一个基调,就是要跨平台。当时调研了几个框架,最终采用了Qt,因为Qt从开发的上手度和稳定性来说都很不错。选择完框架后,我们就开始做设计。因为本地打包的界面没有任何可以参考的东西,所以美工做的第一个版本并不是太满意,7月我们又做了一次比较大的改版,对用户体验及美工部分进行较大的优化,才有了现在的这个版本(如图1所示)。

    545b2aff80535_middle

    AnySDK新增企业版、iOS版本

    《程序员》:目前,你们开放出去的功能都是免费的,今后有没有一些预想的盈利模式?

    陈峰:我们目前在做的AnySDK的企业版,正是下一步期望的盈利模式。做这个项目的原因是,我们在推广AnySDK时,遇到了两个用户提出的最棘手的问题。

    第一个是,你们的服务器稳定吗?你们的服务器挂掉了,不就等于我的游戏也挂掉了吗?答案是肯定的,对游戏会有一定的风险。但这个风险现在已基本解决了。我们现在有双机房热备份,主机房断网、断电,甚至出现地震等意外时,备用机房会在3~5秒内启动来接管服务。并且在北京我们有7×24小时的监控。

    第二个问题更加棘手,是关于接入SDK后,玩家的支付与登录的详细数据,这点有些公司挺介意,特别是大公司。针对这个问题,我们现在提供了好几个方式来解决:第一,我们提供一个保密协议,目前已经有很多业内知名公司和我们签署保密协议后,数据从AnySDK服务器走,我们可以保证不泄漏用户的数据,这点在我们内部是非常严格的,从cocos2d-x挑选第三方依赖库时严格遵循各种开源协议开始,我们团队就非常重视法律责任和义务;第二,如果还有公司对于前一种方案不放心,那么我们在技术角度,做了一个“服务端、客户端脱离”,也就是说你可以用我们的客户端来打包,但服务端则可以用自己的;第三,如果有公司既对第一种方案不放心,又没人力和时间开发自己的服务端,那么可以用我们现在正在做的企业版,也叫私有云,到时将提供一套服务端给客户,客户可以买,然后用自己的服务器搭建起来,那么这个服务器的管理权限就在客户自己的手上了。这样做有两大优点:一是假设他不信任我们的服务器的稳定性,那么他总可以信任他自己服务器的稳定性;二是所有的数据都通过他自己的服务器中转,我们这边完全看不到他的数据,但这个AnySDK企业版是要收费的。

    《程序员》:下一步还有哪些打算?

    陈峰:下一步主要考虑AnySDK的iOS版和海外版。此前,AnySDK只提供Android版的打包工具,只能处理Android的版本。因为在国内,Android渠道的复杂度远远高于iOS渠道,所以最开始重点选择针对国内的Android渠道。而现在国内Android渠道部分已开发得差不多了,并且收到了许多开发者向我们提出iOS版本的需求,所以我们现在也开发了iOS版。第二个是海外版。大家知道,触控代理了许多游戏,有从国外引进国内的,也有从国内出口海外的。我们现在的AnySDK产品,包括新出的iOS版本,主要解决了国内游戏上国内渠道,以及国外游戏上国内渠道这两个方面。但国内游戏上国外渠道,以及国外游戏上国外渠道,这些目前都还没有做出来,所以这也是我们2015年上半年的一个重点任务。

    原文链接: http://www.csdn.net/article/2014-11-06/2822524

  • 1

    《帝国舰队》CEO&制作人唐磊专访:Cocos2d-x+AnySDK 打造高品质游戏

    fuying 新闻

    2014-09-09

     新一代互动型现代海战游戏《帝国舰队》可以说是唯一一款成功突破大陆、台湾、日韩及欧美等多个市场的国产SLG手游,尤其在日本市场更是取得了规模性收入。该款游戏采用Cocos2d-x引擎开发,在渠道打包过程中接入AnySDK服务,大大提高了分发效率,缩短开发周期。

    1410241553928716.png

    近日,我们采访到了《帝国舰队》的制作人以及游魂科技的CEO唐磊。

    以下为专访实录:

    【Cocos中文站】我们了解到《帝国舰队》的初始团队只有4人,那么现在团队的状况如何呢?

    【唐磊】现在团队有40多人,大部分是研发人员,支撑着版本的持续开发和全球的运营和对接工作。

    【Cocos中文站】《帝国舰队》的制作背景是什么?为什么会选择这样的题材呢?

    【唐磊】因为团队之前在程序和策划上有丰富的经验积累,并且市面上SLG游戏相对匮乏,所以决定开发SLG网游,这充分的发挥了我们团队的强项。

    在选材上,我们避开热门题材,选择了现代海战,这在当时是一个无人涉足的题材,或者至少说当时市面上没有高质量的现代海战游戏,我们填补了这一市场的空白。

     screen568x568 (1).jpeg

    【Cocos中文站】作为一款SLG游戏,《帝国舰队》在做数值策划的时候遵循了哪些标准?

    【唐磊】做数值需要考虑很多因子:同级平衡、主次成长线、稀缺制造、数值的行为引导、短中长期目标、资产保护等等,将所有的考量项作为因子,添加一些折算的法则,就可以叠加出最后的数值。

    即使在同级平衡的“Lv.1职业平衡表”上,也会经历复杂的设计流程。虽然只有四系兵种,每个兵种只有攻击力、生命值、命中、闪避、暴击、坚韧和攻击方式的不同,但其中的设计依然需要科学的流程。

    例如:标准回合数设立、中庸职业的攻血设定,各种职业如肉盾和输出的分化,前后排关系对战斗数值的影响,攻击方式(群体、穿透等)对战斗数值的影响,舰船价格对玩家舰船拥有量的影响,舰船拥有量对群体攻击实际效用的影响,百分比属性集中设定与分散设定的总点数区别、命中和坚韧的溢出问题等等,当然,这里所列举的,仅仅是职业表所考虑的一部分。

    screen568x568 (2).jpeg

    【Cocos中文站】在游戏开发过程中,为什么选择Cocos2d-x引擎,主要考虑哪些方面因素?

    【唐磊】主要是游戏的定位,因为决定游戏采用2D来表现,Cocos2d-x是最佳的选择。同时,它也支持跨平台,能避免游戏的重复开发。

    【Cocos中文站】基于Cocos2d-x引擎开发过程中,是否对引擎做了优化?

    【唐磊】Cocos2d-x所提供的功能,基本满足了项目开发的需求,所以我们基本没有做优化。

    【Cocos中文站】在使用Cocos2d-x引擎开发过程中遇到了哪些困难?是如何克服的?

    【唐磊】没有遇到困难,使用起来很顺畅。

     【Cocos中文站】打渠道包时是否有尝试过其他第三方SDK接入服务?为什么最后选择了AnySDK?是怎么得知AnySDK的?

    【唐磊】没有尝试过其他第三方SDK的接入。选择AnySDK是因为一位开发朋友的推荐,他们在Android上有丰富的经验,因此在他们的推荐下选择了AnySDK。

    【Cocos中文站】使用AnySDK打包上线了哪些渠道?

    【唐磊】360、小米、当乐、oppo、联想、91、UC、豌豆荚、多酷等平台。

    【Cocos中文站】使用AnySDK服务的整体感觉如何? 

    【唐磊】整体感觉是比较顺畅的。

    【Cocos中文站】据我们了解,《帝国舰队》这款游戏在日本和欧美非常受欢迎,请问该款游戏是如何突破日本和欧美市场的呢?

    【唐磊】在成熟的市场能够突围,首先是要有足够的品质,游戏也要符合本地用户的需求,然后是接地气的本地化运营。

    screen568x568 (3).jpeg

    【Cocos中文站】日本和欧美市场相对于国内市场有何区别呢?对国产游戏打入海外市场有何建议?

    【唐磊】这些市场当然有着更高的门槛,品质不足的话,再强力的推广也会石沉大海。现在已经不是产品稀缺的年代了,只有那些沉下心来打磨游戏的团队才能获胜

    【Cocos中文站】近来许多媒体在唱衰手游市场,不知道您觉得手游大环境和去年有什么区别?

    【唐磊】随着智能机在成熟市场增速放缓,智能机的人口红利正在逐渐消失,但总体规模仍会增长,我想这里说的是竞争加剧吧?开发团队数量猛增,而市场容量增速变小,竞争的加剧使得游戏需要更好的品质才能生存,这应该是今年和去年的巨大不同吧。并且随着成本的大幅提升,创业团队的机会正在逐渐变小,这一点上会比较像页游当年的情形。

    【Cocos中文站】 在游戏方面,未来的计划是什么?是否会继续使用Cocos2d-x引擎开发游戏,是否会继续使用AnySDK的服务,并向其他游戏团队推荐?

    【唐磊】我们未来会继续巩固在SLG市场的领先表现,也会继续用Cocos2d-x打造更为出色的游戏,对于AnySDK,我们也会向其他团队推荐的,提高他们的开发效率。

    访谈者简介:

    唐磊,《帝国舰队》制作人,游魂科技CEO。

     DSC_1038.jpg

    《帝国舰队》游戏简介:

    《帝国舰队》是游魂科技的第一款新一代互动型现代海战游戏。拥有包括“环球军演”“世界BOSS ”“玩家攻略”“协防互助”“虚空实验”“联盟舰队”在内的,六大特色系统,是一款及操作便捷、互动优良、华丽对战、玩法丰富、时间安排合理等诸多优点于一身的新型策略类游戏。在游戏中,玩家可以采集资源,升级建筑,研发科技,建造战舰,与其他玩家争夺稀有资源,或组成公会一起对抗强大的敌人。游魂科技对品质的高要求,使得《帝国舰队》在港澳台、大陆、日本、韩国、欧美都取得很不错的成绩。

    iOS下载地址:https://itunes.apple.com/cn/app/di-guo-jian-dui/id578965167#

    Android下载地址:http://www.wandoujia.com/apps/com.foxugame.wdj