【原】tinker dex檔案格式的dump工具tinker-dex-dump,dextinker-dex-dump
序言
Tinker是推出的熱更新開源項目,同其它熱更新方案相比具有補丁包小,支援類,so,資源檔的替換等優點。其中在類替換的方案裡自主研發了DexDiff演算法,使得補丁包變的更小。DexDiff演算法最終產生的產物雖然也以.dex作為格式尾碼,但和實際虛擬機器中的dex檔案是二種完全不同的格式。
關於tinker-dex-dump
tinker-dex-dump是針對dexdiff產生的.dex格式檔案,查看其內部資料的工具。主要目的是協助大家對dexdiff產生的dex格式有一個更加直觀的瞭解。如果使用該工具能讓你更容易瞭解tinker相關原理,那該工具的目的也就達到了,也算是個人對Tinker的致敬。該工具已上傳到github,github地址為https://github.com/LaurenceYang/tinker-dex-dump
tinker-dex-dump的使用方法
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名字
--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
範例二:顯示StringData地區資訊
java -jar tinker-dex-dump.jar --dex classes.dex --section StringData
範例三:顯示協助資訊
java -jar tinker-dex-dump.jar --help
tinker dex格式參考
tinker dex格式主要包括兩大部分:頭部和各個section地區的巨集指令清單,如: