Tinker是微信推出的热更新开源项目,同其它热更新方案相比具有补丁包小,支持类,so,资源文件的替换等优点。其中在类替换的方案里自主研发了DexDiff算法,使得补丁包变的更小。DexDiff算法最终生成的产物虽然也以.dex作为格式后缀,但和实际虚拟机中的dex文件是二种完全不同的格式。
tinker-dex-dump是针对dexdiff生成的.dex格式文件,查看其内部数据的工具。主要目的是帮助大家对dexdiff生成的dex格式有一个更加直观的了解。如果使用该工具能让你更容易了解tinker相关原理,那该工具的目的也就达到了,也算是个人对Tinker的致敬。
1、首先下载tinker-dex-dump.jar文件
2、通过命令行方式执行
java -jar tinker-dex-dump.jar --dex *.dex [--header] [--section section-name]
--dex 必选项,后接需要dump的dex路径
--header 可选项,显示header区域信息
--section 可选项,显示section区域信息,后接要显示的section名字
- StringData
- TypeId
- ProtoId
- FieldId
- MethodId
- ClassDef
- TypeList
- AnnotationSetRefList
- AnnotationSet
- ClassData
- Code
- DebugInfo
- Annotation
- StaticValue
- AnnotationsDirectory
java -jar tinker-dex-dump.jar --dex classes.dex --header
java -jar tinker-dex-dump.jar --dex classes.dex --section StringData
java -jar tinker-dex-dump.jar --help
tinker dex格式主要包括两大部分:头部和各个section区域的操作列表,如下图:
更多关于tinker dex格式可以参考Tinker项目的DexPatchGenerator文件
1、复杂区域如ClassData等的表现形式
也欢迎大家多多提出意见