各路SDK厂商福利,现有一款神器,可以一键合成apk文件和aar 文件以及SDK初始化代码描述文件,运行起来就是集成好SDK的APP了。
主要解决问题,SDK厂商兼容性测试,新开发的sdk想去测试一些大厂App,比如拼多多。那么该reverseToy神器就是你需要的,
GITHUB https://github.com/dyglcc/reverseToy
简单介绍一些实现原理:
站在巨人的肩膀上,在大神Connor Tumbleson的apktool的基础上修改而来。
实现整体思路:
通过使用aapt工具将aar文件打包未一个apk文件,然后通过合并arsc,合并arsc后产生一个新旧id的mapping文件,替换aar的smal文件的旧id,注入application初始化代码,拷贝资源文件,res,assets文件,so库,最后打压缩包签名。
首先说明一下apk文件的整体目录结构,有arsc文件,dex文件,res文件夹assets文件夹,arsc是整个app用到资源项目,
dex文件可以通过smali工具打包到dex,res和assets通过copy文件即可完成合并,
第一步:
最复杂是arsc二进制文件的合并,需要合并stringBlock,合并spect type,计算二进制头文件的字节数,否则会解析出错。
第二步:
接下来是合并AndroidManifest.xml文件,将aar文件中的permissions、activity、service、feature、provider、receiver等合并到apk的AndroidManifest.xml文件中。
第三步:
资源id替换,在合并arsc文件会产生一个mapping文件,这是一个aar资源被重新编排后会产生新的资源id,合并资源文件步骤,会将aar资源的二进制文件,比如,res下面的xml文件中的旧的id替换为新的id,并重新写二进制文件。
第四步:
smali文件处理,这一步将dex文件解析,并找到application的smali文件,加入SDK初始化代码,加入方式采用json的描述配置文件方式,将代码的初始化配置为一个json文本,打包会将json文件放在assets文件夹下面,启动解析并用反射方式执行SDK初始化代码。
下图是吆喝科技AB测试初始化代码描述方式:
SDK初始化描述文件最后将sdk的所有代码,打包为dex文件,并压缩为zip包,签名
还有额外的一些功能,比如更新sdk代码,和设置debuggable为true等功能方法开发者用户去调试。
想用的朋友可以去github下载realease包 ,目前最新版本1.0.3
GITHUB https://github.com/dyglcc/reverseToy
觉得不错的朋友在GITHUB帮忙点个赞。
网友评论