融合SDK
我们的SDK其实也可以称为聚合SDK,CP游戏方通过接入聚合SDK,然后通过打包工具将游戏分发到更多渠道上,例如小米,华为,oppo,应用宝等等渠道。
以下只是打包工具融合的逻辑,没有具体代码。
打包工具流程
1.使用apktool反编译游戏母包apk,SDK渠道包apk
2.复制SDK中的资源到游戏母包
copy_file_list = ['/res', '/assets', 'kotlin', 'original', 'unknown', '/lib']
可以把上面的文件夹内容直接复制到游戏母包中,其中res/values文件不用复制,因为里边的资源文件需要合并
# value文件下需要合并的文件名称 res_list = ['styles.xml', 'attrs.xml', 'colors.xml', 'dimens.xml', 'drawables.xml', 'integers.xml', 'strings.xml', 'arrays.xml', 'ids.xml', 'bools.xml']
可以写一个脚本将SDK中的资源合并进去,以母包的资源为主,例如
游戏母包:<string name="app_name">母包</string>
SDK包:<string name="app_name">sdk</string>
合并结果是<string name="app_name">母包</string>
以此类推,其它xml资源合并也是以母包为主。
3.合并smali文件
-
删除游戏母包中聚合sdk的文件,因为渠道SDK会重新复制进来,防止smali文件分包的时候没法覆盖掉旧的
-
把SDK文件中的smali文件复制到游戏母包,直接覆盖原文件
-
把smali文件进行分包操作,例如只有一个smali文件夹,扫描里边的方法数,如果方法数超过50000就新建一个smali_calss2文件夹放置超过的文件。然后循环扫描smali文件夹,超过方法数就新建,直至都不超过
4.合并public.xml文件,并逆向修改R文件的值
- 反编译后res/values/ 下会生成 public.xml文件,将sdk中的public.xml合并到母包中,具体合并规则,可以查看下面的连接,看里边的重新重新赋值的规则或者自行百度查看合并规则Android SDK 二次打包替换SDK 合并资源文件public.xml和Ids.xml的合并 并对合并的public.xml 重新进行id赋值_已经写好的安卓软件腾讯sdk怎么替换-CSDN博客
- 遍历所有的smali文件,逆向修改R文件的值
smali_file_name = f'R${res_type}.smali'
<public type="style" name="AppTheme" id="0x7f0c0164" />
例如:res_type指的是style,string,layout等等。找到R文件的smali,把对应的AppTheme的值逆向修改为public.xml中的
5.合并AndroidManifest.xml
6.修改app信息,名称,版本号等
1.版本号和名称直接修改apktool.xml
7.特殊处理
1.处理渠道的配置文件等等
2.添加启动页面