AnySDK可扩展性/自定义边界研究

================================

        码字不易,且行且珍惜,郑重声明,转载请写明出处,多谢合作

 ================================

 

 

早前项目里接入了AnySDK,接的是lua版本,接入过程相当顺利,出包后能看到对应渠道的sdk调用,感觉很6。既然用到项目里了,就得对项目负责,希望能够清晰的了解AnySDK的技术边界,能改啥,能干啥,能干多远,找出AnySDK可自定义的边界。经过一轮尝试,得出如下几点跟扩展、自定义相关的总结,我在这里抛砖引玉一下。

 

 

关于AnySDK是什么,我这边放一下百度百科的介绍:
AnySDK是一款为手游开发商提供免费的、快速的接入第三方SDK一站式解决方案,并采用更加安全和快速的本地打包方式。
手游开发完成后,集成AnySDK Framework,所生成的APK包称为母包,该母包通过桌面客户端工具快速生成多个渠道包,大大节约研发人员的时间与精力,提高团队效率。
AnySDK不仅支持C++、Lua、JavaScript接口,还支持Java接口与Unity的C#接口——也就是说,AnySDK可覆盖Cocos2d-x、Unity与大部分自研引擎三种主流需求。

 

 

 

 

零、测试环境:

MacOSX 10.10.3

AnySDK Version:1.5.0(Mac)

 

 

 

一、AnySDK.app包内文件结构:



 

其中用得上的有:config、MacOS、Script、tool

 

 

 

二、config/channel:



 

  • 闪屏的smali代码及布局文件

  • 放在这里的目的估计是觉得这个是common吧

 

三、config/sdk/XXX:



 

  • 这个目录是anysdk打包用来实际操作的目录

  • 对应XXX插件(渠道的各种sdk)下载回来解压后直接放在这里(anysdk的人提前将这些文件准备好供我们下载),这里面的文件被删除或修改都不会触发anysdk更新,只有这个[渠道]目录被删除的时候才会触发

  • XXX/config.xml文件,从anysdk下载,这个配置影响到anysdk这个软件上的一些表现,比如必填项、下拉菜单等等

    •     config.xml里面的operateLs标签,描述了anysdk打包的操作流程,其实就是调用Script文件夹里面的python脚本,支持参数

    •     pluginLs标签,描述了这个sdk插件支持什么功能(

    •     version,描述插件版本

  • XXX/classes.dex,不解释,使用工具发编译阅读其代码,可以看到里面使用了libPluginProtocol.jar(接入anysdk提供的唯一jar)的一些类,我猜测是:结合tool/mac目录下的工具,通过baksmali将这个classes.dex->smali,然后再将smali和母包的smali合并后,该替换的替换,重新回编译出APK。细细想想,只要框架设计好,统一抽象接口,然后分不同sdk实现,再统一接口返回,是可以做到公共部分和sdk实现部分分离的

  • script.pyc,反编译看了下,就是将smali里的###XXXX_XXXX###替换成当前插件的实际数据

  • 其余的就不说了,都是粗暴的merge和替换

 

 

四、config/config.db:

  • 这个db记录了大部分数据,而且也记录了sdk的版本信息及文件名

  • 这个db的数据来源:在anysdk这个软件上的填入的数据操作,数据流大概就是:sdk/XXX/config.xml->anysdk<->config.db

  • 关键表:

    •     game:主键gameID,游戏id,跟添加的游戏一一对应,唯一

    •     tpl_channel:主键idChannel,意为渠道id,唯一,外键idGame(即game表主键gameID),记录每个游戏各有什么渠道

    •     tpl_channel_sdk:主键id(idUserSDK),外键idChannel、idSDK,该表是一个“哪个渠道对应使用什么sdk”的表,主键id(idUserSDK)就是一个“记录用户选择渠道所用sdk搭配后的结果”的标识

    •     tpl_sdk:主键idSDK,没有外键,就一查找表,里面的SDKName用来匹配config/sdk/XXX的目录

    •     tpl_user_sdk_config:没有主键,就一关系表,外键有idUserSDK、idChannel、idSDK,跟tpl_channel_sdk一样,就多了两个name字段

    •     tpl_user_sdk_param:主键没啥用,外键idUserSDK,记录用户选择的每种组合用到的键值对

    •     总结:gameID对应多个idChannel,每个idChannel可以选择多种idSDK组合成多个idUserSDK,每个idUserSDK都有对应的记录有用信息的键值对

 

五、Script:



 

 

  • anysdk出包用到的python脚本,这个目录没了的话anysdk出包是会闪退的

 

结论:

  • 可以修改所有的支付回调接口,统统传到我们的自己的服务器上,但是意味着跟所有sdk服务器对接的工作都是我们这边完成,工作量非常大

  • 第一点提到的就是目前扩展自定义sdk的瓶颈。cp都知道,支付对接通过第三方公司统一操作,明摆着会泄漏收入流水等敏感数据。这块对接工作量虽不大,但是每个sdk的效率、处理甚至沟通方式都不同,所以这块无疑是最花时间的,anysdk帮我们统一做这块,大大方便了cp,所以在收入数据泄漏和游戏赶上市及渠道广度覆盖这个权衡上,需要有所舍有所得

  • 如果想添加anysdk没有的sdk,需要自己弄一套config/sdk/XXX,config.xml配置好步骤及必要的信息段,在anysdk软件上支付、登陆回调改成自己的服务器,然后自己的服务器处理好anysdk框架传递的参数,保证客户端、游戏服务器、中转服务器调通即可。由于anysdk没有开源,估计生成classes.dex这一步会比较蛋疼

  • 如果想修改已有的插件部分内容,请关注上面提到的config/sdk/XXX

以上,如有错漏烦请及时指出,欢迎讨论

 ================================

        码字不易,且行且珍惜,郑重声明,转载请写明出处,多谢合作

 ================================

ps:AnySDK确实是一款想法不错的产品,很有前景。但是目前看来,使用者越来越多,除了日常解答群里问题,也要维持旧渠道更新,还要支持新渠道,以及bug修改等等,由于这些的原因,AnySDK的开发团队压力应该不少,个人觉得AnySDK可以考虑一下,开源或者发布更多的辅助工具,让每个开发者都能自己提供想要的sdk支持。祝福AnySDK走的更远更好。 

猜你喜欢

转载自chenhaolin.iteye.com/blog/2209280