================================
码字不易,且行且珍惜,郑重声明,转载请写明出处,多谢合作
================================
早前项目里接入了AnySDK,接的是lua版本,接入过程相当顺利,出包后能看到对应渠道的sdk调用,感觉很6。既然用到项目里了,就得对项目负责,希望能够清晰的了解AnySDK的技术边界,能改啥,能干啥,能干多远,找出AnySDK可自定义的边界。经过一轮尝试,得出如下几点跟扩展、自定义相关的总结,我在这里抛砖引玉一下。
手游开发完成后,集成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走的更远更好。
相关推荐
"generalo7x"在这里可能指的是一个用户自定义的边界条件函数或者宏,用于扩展FLUENT的内置功能。在FLUENT中,用户可以通过编写用户定义的函数(UDF)或者使用内置的“通用边界条件”(General Boundary Condition)...
在百度地图SDK或API中,可以添加自定义的多边形来描绘边界。 6. **地图服务集成**: 在两个不同的地图平台之间转换和操作边界数据,需要理解不同地图服务商的坐标系统和数据格式。例如,高德地图使用GCJ-02坐标系...
全国最全,各省、市GPS边界坐标点,文本的形式保存,献给有需要的朋友
Java基于要SWing技术自定义标签的边界效果,通过javax.swing.border.Border 接口,进行自定义边界类OwnBorder。可以实现空边界(EmptyBorder)、斜切边界(BevelBorder)、蚀刻边界(EtchedBorder)、线条边界...
本研究的论文题目为《工程结构疲劳裂纹扩展的二维边界元模拟》,其核心在于利用边界元方法来模拟船舶用齿圈的疲劳裂纹扩展现象,以便更好地理解裂纹扩展规律,并优化结构以增强抗疲劳破坏能力。具体分析如下: 1. ...
然而,根据上下文推测,Coastlck可能是一个与计算微结构或边界处理相关的算法,可能是由研究者自定义的或者是从已有的开源项目中引用的。 在Matlab中实现PBCs,通常涉及以下步骤: 1. **构建RVE模型**:首先,需要...
总之,QML提供的灵活性和可扩展性使得创建自定义电池充电和电量显示效果变得简单而有趣。通过熟练掌握QML的元素、动画和自定义控件机制,开发者可以创造出丰富多样的用户界面,提升应用程序的用户体验。记得在实践中...
它不仅限于展示图片,还可以用于显示文本、自定义视图或任何其他可滚动的内容,因此具有很高的可扩展性。 首先,让我们深入了解一下Swift中的无限轮播视图是如何实现的。通常,我们会使用`UIPageControl`配合`...
然而,`ScrollView`本身并不支持弹性效果,所以我们需要对其进行扩展,创建一个自定义的`ScrollView`类。 1. **自定义ScrollView类** 创建一个新的Java类,例如`UserDefineScrollView`,继承自`ScrollView`。在这...
在IT行业中,尤其是在模拟计算和物理建模领域,弹性边界和粘弹性边界是重要的概念,特别是在材料科学和工程计算中。这些概念常用于理解和解决与结构动力学、土木工程、机械工程等领域相关的复杂问题。这里我们将深入...
COMSOL渗流模型大气边界条件的设置,考虑了降雨与蒸发的工况
javax.swing.border 包中提供了一些用来美化Swing 标签边界效果的类,本例通过实现javax.swing.border.Border 接口,进行自定义边界类OwnBorder。Border 接口描述了Swing 组件边界如何绘制。本例将实现如空边界...
传统上,Vue 中的右键菜单插件往往依赖于特定的自定义标签,这在实际开发中可能带来不便,限制了其可扩展性。然而,“vuerightmenu”通过引入自定义指令 `v-rightMenu`,允许开发者更灵活地控制和集成到现有的应用...
RecyclerView的核心在于其可扩展性,允许开发者通过自定义LayoutManager来实现不同的布局样式,比如网格布局、瀑布流布局等。默认情况下,RecyclerView提供了LinearLayoutManager(线性布局)、GridLayoutManager...
在AutoCAD平台上,开发者可以利用ObjectARX(Autodesk Reactor Extension)库来创建自定义实体,这是一种基于C++的编程接口,允许程序员深入到AutoCAD的内部工作流程,实现扩展功能和定制化操作。本篇文章将详细探讨...
6. 测试和验证:在实现自定义文件格式后,需要进行大量测试以确保其稳定性和正确性。这包括但不限于读写测试、边界条件测试、错误处理测试等。 7. 社区推广:如果希望自定义文件格式得到广泛采用,那么分享你的工作...
同时,注意保持与`std::string`基类的兼容性,确保代码的可移植性和互操作性。 在实际应用中,重写`std::string`类通常是为了实现特定的性能优化、错误检查或添加额外的功能。不过,除非有明确的理由,否则不推荐...