在U8SDK聚合框架中,为了让渠道SDK能够被多个游戏公用,我们底解耦了游戏层和SDK层逻辑。这样有什么好处呢? 比如我是发行商,我发行了5款游戏,这5款游戏都上架了我合作的20家渠道联运平台。那么在SDK接入和升级成本这块,我的成本是可控的,而不是随着我发行游戏数量的增加而增加。
对于这5个游戏来说, 他们都只需要接入U8SDK框架即可, 这样游戏层接入的时间成本和接普通的一个联运SDK的时间成本是一致的,快的话一天就可以搞定,慢的话两三天就可以搞定了。
游戏层中接入了U8SDK框架之后, 就可以给我们出母包了(Android平台是母包apk,iOS平台是母工程),然后我们就可以拿着母包通过U8SDK一键打包工具打出各个联运平台的渠道包了。那么这篇博客我们就来简单说一下U8SDK聚合框架中一键打包工具的分包原理(Android平台)。 如果您对iOS平台的分包感兴趣,可以参考我们另一篇博客:U8SDK iOS打包工具原理
我们先看下整个打包工具的分包过程:
U8SDK打包工具分包过程
游戏A,游戏B,游戏C是三款不同的游戏,对于他们来说,只需要调用U8SDK抽象层提供的接口,就完成了所有SDK的接入工作。
我们知道,各个渠道SDK针对不同的游戏,都有不同的APPID,APPKEY等配置信息。这些配置信息,我们可以在U8SDK打包工具中进行设置。打包的时候,选择对应的游戏和对应的渠道,就可以通过打包工具打出对应联运平台的渠道包了。
在打包工具将游戏母包apk打包成渠道包的过程中,他主要做了哪些事情呢?
U8SDK 打包工具原理
1、打包工具的输入是母包apk。游戏里面引入sdk抽象层的jar包,调用抽象层的接口。完成接入,然后打成apk。
2、打包工具会首先用apktool -d 对母包进行反编译。反编译到该渠道对应的临时工作目录中
3、重命名包名。我们知道在AndroidManifet.xml中的package就是包名,为了防止后面我们重新生成R文件导致冲突,我们对每个渠道都设置一个后缀。比如UC,后缀叫.uc。当乐,后缀.dl 等等。如果渠道SDK有明确要求,使用他们提供的后缀,那就使用他们提供的后缀。如果没有,就自己设置一个。
4、处理渠道SDK和插件SDK。
1)处理依赖关系:如果渠道SDK配置了gradle依赖,那么会先将配置的gradle依赖中的jar包或者aar下载到本地临时目录。
2)处理代码: 将SDK中jar、aar等中代码编译成smali文件,合并到反编译临时目录中。
3)合并非res目录资源:合并assets, so文件,以及AndroidManifest.xml。
5、生成游戏中需要使用的配置。
1)对于之前SDK目录中config.xml中配置的APPID,APPKEY等信息,根据需要,对于需要添加到AndroidManifest.xml中的,我们就将他添加到AndroidManifest.xml中的meta-data中。对于其他参数,我们会在assets目录下生成一个develop_config.properties文件。
2)对于SDK目录下config.xml中配置的插件信息,我们会在assets目录下,生成一个plugin_info.xml文件。这样SDK抽象层会读取这个配置来实例化对应的插件。
6、合并资源。 打包工具打包的时候, 需要将母包、渠道SDK、插件SDK中的资源进行精细化地合并,防止资源冲突。
7、重新生成R文件。部分渠道需要支持他们的闪屏画面。根据我们的闪屏解决方案(后面会专门来说),我们需要重新生成R文件,来索引我们的闪屏资源图片等信息。
8、重新打包,采用apktool -b重新将合并之后的资源和代码,进行打包
9、签名和优化。部分渠道要求使用他们提供的签名文件,所以,我们对签名文件也采用了配置。可以根据不同的渠道来配置不同的签名文件。
10、执行完上面的步骤,一个渠道包就生成了。
通过上面这个打包流程,我们就知道单个渠道包是如何生成的了。那么,像第一张图片中所表示的那样,我们的打包工具是如何同时打出各个不同渠道SDK的渠道包的呢?
打包多渠道
到这里,我相信你对U8SDK打包工具的原理已经有了一个简单的了解。如果你对U8SDK打包工具感兴趣也可以看我们录制的视频教程哦:U8SDK Android打包客户端视频教程
我们会在B站不定期录制手游联运聚合SDK相关的视频教程,如果您对U8SDK手游联运聚合SDK感兴趣, 可以关注一下哦:U8SDK视频教程
如果您是手游SDK技术开发同学或者对手游聚合SDK开发感兴趣,也欢迎关注U8SDK技术博客:www.uustory.com, 或者可以加入我们的聚合SDK技术交流QQ群:207609068(1600+手游SDK相关技术人员)













网友评论