站长统计
⼿游SDK—第五篇(游戏打包篇(上)-打包系统设计)
hi,各位看官们。前⾯已经⼤概介绍了如何搭建⼀个⽐较符合业务场景的客户端架构实现。下⾯我们⾛进这个系列的游戏打包篇系列。这个系列更多的是讲解如何将SDK的资源通过打包系统⽣成⼀个游戏_渠道包的。
回归第⼀篇序⾔的介绍,游戏上线都是要⾛应⽤商店的,游戏要⾛应⽤商品,⼀般都会接对应的渠道SDK,⾏业内的说法是联运,这是⽐较主流的合作⽅式。游戏打包也主要是处理渠道SDK的接⼊问题的。
联运— 即⼿游CP和⼿游渠道联合运营⼀款游戏,⼿游CP提供产品、运营和客服,⼿游渠道提供⽤户,⼿游CP需要接⼊渠道⽅的SDK,才能上线运营,双⽅按照分成⽐例进⾏分成。因为接⼊了渠道的SDK,所以数据后台⽤的是渠道⽅的,结算时是渠道分钱给CP。
关于术语介绍可以看看这个游戏⾏业常见术语
游戏打包思考?
从最开始的设计开始就希望做成,游戏不需要关注渠道SDK的差异性,聚合SDK可以统⼀化对接N多的渠道SDK,但是会发现⼀个问题就是,接⼝虽然统⼀化处理了,但是渠道的资源配置⽂件怎么处理呢?游戏如何只接⼀次SDK就可以⽣成对应的渠道游戏包体呢?
很明显嘛:apk包反编译,搞事情不反编译怎么解决问题嘛。
电脑游戏配置所以,⼀般聚合SDK会预接⼊⼀个模拟测试渠道SDK提供给CP接⼊,该模拟测试渠道SDK只是简单的登录、⽀付界⾯交互,⽤于⾛通聚合SDK的逻辑⽽已,游戏接⼊后的包体称之为游戏母包。后续的真正渠道是通过打包系统反编译后打到游戏母包的。(可以参考 ⼿游SDK —第三篇(架构代码实现篇)的GameSDK_Channel_Test模块的模拟渠道实现)
打包系统整体设计
在⼿游⾏业⾥⾯,⼤家或多或少都听说过易接和quick这两家⽐较有代表性的公司。因为易接和quick的打包⼯具算是业界⾥⾯做的⽐较快捷⽅便了,本系列的⽂章也是粗浅的跟⼤家讲讲打包⼤概过程及实现。
⼤家可以先看看整体的⼀个打包流程设计图:
打包整体流程设计:
image.png
⾸先游戏会接⼊封装好测试渠道的SDK⽣成⼀个游戏-SDK.apk母包,然后获取到对应的渠道资源包及渠道参数,输⼊到⾃动化打包系统,最终⽣成个游戏-渠道.apk包体。最终这个包体会上架的对应的渠道平台去审核发⾏。
这⾥会⼤概分三部分:游戏母包、渠道资源包、⾃动化打包系统。
游戏母包:接⼊已封装测试渠道的SDK,对接统⼀化接⼝,⾛通整体SDK的登录、⽀付、数据上报交互逻辑的游戏包体;
渠道资源包:聚合SDK对接渠道SDK接⼝后,封装给打包系统的整合资源包,通常资源的结构形式会跟⾃动化打包系统对应;
⾃动化打包系统:输⼊游戏母包和渠道资源包后,⾃动化解包、合并资源、封包,最终输出游戏_渠道包。
这⾥⽐较核⼼的部分分两部分,游戏母包和渠道资源包、⾃动化打包系统,前者可以参考前⾯部分SDK架构设计及实现。后者也打包系列核⼼内容,后续会详细介绍。
⽬前市⾯上有两种形式的打包系统,⼀种是类似易接和quick的打包⼯具;另外⼀种是⽹页版的打包⼯具,也就是服务器打包,可参考下图。
打包流程交互设计图
image.png
简单分析下两种打包系统(左为桌⾯打包,右为⽹页打包):
1、桌⾯版的打包⼯具:⽤户可以通过下载对应的应⽤安装后就可以使⽤,打包的核⼼过程都是安装应⽤⾥⾯。⽤户导⼊游戏母包后,通过服务器下载不同渠道的资源包,填好相应的渠道配置后,完成打包过程。
2、⽹页版的打包⼯具:⽤户打开相应的打包⽹页,上传对应的游戏母包、选择不同的打包渠道列表,选择渠道资源,填好相应的渠道配置后,给打包服务器发送打包命令,完成打包过程。
优劣:
桌⾯打包,⽤户只需要下载渠道资源就可以使⽤,不需要上传和下载游戏母包的。但是需要适配不⽤的电脑系统,可能需要开发多个版本的打包应⽤。⽽且桌⾯打包本地调试会更⽅便。
⽹页打包,对系统的适配性⼩,⽤户只要打开⽹页就可以,但是⽤户需要上传对应的游戏母包,特别是游戏包体⽐较⼤耗费时间,且耗费服务存储资源。不过服务器打包的速度⽐桌⾯打包更快,⼏⼗个包体⼀会可能就打完了。
总结下,整体分析完打包系统,下⾯咱们来慢慢看怎么⼀步步实现打包系统。(这⾥说明下,⽹页打包涉及到js知识,这个不在这⾥讨论)
游戏与⼿游SDK的交互
上⾯已经说明:整体打包系统分三部分游戏母包、渠道资源包和⾃动化打包系统,形象来说前⾯两个是原料,后⾯⼀个是加⼯的⼯具。结合前⾯的SDK框架说明,⼀起来看看,怎么⽣成原料的。
第⼀步:
游戏需要先接⼊已封装测试渠道封装的SDK,⽣成游戏_SDK母包。通常游戏调⽤SDK的⽅式:接⼝+资源⽂件。跟常规android开发不⼀样的地⽅是,android开发会通过AndroidStudio或者Eclipse等开发IDE引⼊SDK⼯程,然后关联,run⼀下,包体就出来了。但是游戏开发是引擎开发,可能不会或很少⽤到android的开发IDE的,游戏的做法是通过中间件接⼊SDK的接⼝,然后通过资源⽬录的形式,将SDK的对应资源打到游戏包体⾥⾯的。因此,SDK对外的提供⽅式,基本上都是接⼝说明+资源(仅供参考)
image.png
需要注意的是,libs⾥⾯的资源⽂件⼤多是.jar形式⽽不是.arr形式,⽽且androidStudio的jniLibs⽬录的so⽂件也需放到libs下。(这个不要问我为什么,我也不太清楚游戏是如何编译的,猜测应该历史原因,以前android开发⼤多是基于Eclipse的,游戏很多⼯程⽬录还是按之前的来)
好了,假设游戏已经接⼊SDK_测试渠道,⾛完整体的登录交互逻辑⽣成⼀个游戏母包给到⾃动化打包系统。
第⼆步:
⽣成渠道资源包,这⾥的渠道资源包跟前⾯提供给游戏的资源⽅式类似(仅供参考),但是会有⼀些特殊的配置⽬录:
image.png
⼤概说明下特殊⽬录:
1、config:配置信息,可以是SDK配置,打包编译参数配置,⾓标,Icon配置等
2、splash:闪屏图⽚
3、wxcallback:特殊处理登录和⽀付回调的.java类⽂件
不过在这⾥打断下,不管是提供给游戏的SDK资源形式还是⽣产渠道资源包,都会涉及到SDK源码,需要处理下代码安全性的问题。
SDK开发跟app开发不太⼀样,总结来说:SDK开发是隐藏内部实现细节,对外提供公共的访问⽅式以及结果回调。SDK的⽤户更多的开发者,既然是开发者,嘿嘿。⼤伙都懂的,或多或少都会⼀些普通⽤户不太会的⼀些开发技术,利⽤这些技术总可以研究⼀些不太利于源码的事情,⽐如利⽤dex2jar、jd-gui、apktool这样的⼯具去反编译包体,研究我们的源码。这就要求开发者在代码做⼀些安全措施,代码混淆是最常见的⼀种。不了解dex2jar、jd-gui、apktool的同学可以参考下,⽽且后续也会讲到反编译来打包:apktool、dex2jar、jd-gui的区别及详解
SDK源码的混淆
说起源码混淆,对于android开发来说可能都不陌⽣,或多或少都接触到,通常开发只需要在开发的IDE⼯程下配置对应的混淆⽂件就可以了,如:在AS可以通过配置proguard-rules.pro⽂件,相关的配置规则可以参考下:Android混淆打包那些事⼉。但是这不是要讲的东西,要讲的是:SDK源码如何⾃动⽣成混淆jar。
在讲解源码混淆之前,先给⼤伙介绍⼀下ProguardGui界⾯化⼯具,主要是界⾯化混淆jar包。其实也是google官⽅提供混淆⽅式,⽐较⽅
便。ProguardGui界⾯化⼯具使⽤
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论