1 个不稳定版本
使用旧的 Rust 2015
0.1.0 | 2018 年 9 月 17 日 |
---|
在 #dex 中排名 #6
38KB
773 行(不包括注释)
Dex Diff
一个用于比较 Android dex 类文件的程序。该项目的目的是帮助创建可重复的 Android 构建。具有相同源代码的两个构建可能具有导致哈希值不同的细微差异。该程序将帮助识别这些差异。
命令行
要运行,请输入以下命令
dexd classes.dex classes2.dex
将 classes.dex 和 classes2.dex 替换为您的 dex 文件名。
摘要输出
.dex 类文件被分为 18 个编码块。dexd 将检查两个不同的 dex 文件之间的每个块是否相同。这有助于缩小问题的范围。
以下是一个真实示例,其中注释部分在应相同的构建中不匹配。
TYPE_HEADER_ITEM (DIFF) TYPE_STRING_ID_ITEM (OK) TYPE_TYPE_ID_ITEM (OK) TYPE_PROTO_ID_ITEM (OK) TYPE_FIELD_ID_ITEM (OK) TYPE_METHOD_ID_ITEM (OK) TYPE_CLASS_DEF_ITEM (DIFF) Matches = 2757 Mismatch = 3391 TYPE_MAP_LIST (OK) TYPE_TYPE_LIST (OK) TYPE_ANNOTATION_SET_REF_LIST (DIFF) Matches = 266 Mismatch = 613 TYPE_ANNOTATION_SET_ITEM (DIFF) Matches = 3491 Mismatch = 6108 TYPE_CLASS_DATA_ITEM (OK) TYPE_CODE_ITEM (OK) TYPE_STRING_DATA_ITEM (OK) TYPE_DEBUG_INFO_ITEM (OK) TYPE_ANNOTATION_ITEM (OK) TYPE_ENCODED_ARRAY_ITEM (DIFF) TYPE_ANNOTATIONS_DIRECTORY_ITEM (DIFF) Matches = 2057 Mismatch = 3182
匹配/不匹配给出匹配项的数量,而不是字节数。
详细日志
对于以下块,dexd 将输出它在元素之间找到的确切差异。
- CLASS_DEF_ITEM
- ANNOTATION_SET_REF_LIST
- ANNOTATION_SET_ITEM
- ANNOTATIONS_DIRECTORY_ITEM
这些块中的每一个在 ./target/dexd 目录下都有相应的 txt 文件。
输出将包含项的对 ({item1}, {item2}),其中 item1(来自第一个 dex 文件)应与 item2(来自第二个 dex 文件)相同。
在下面的情况中,我们看到第一个配对的 AnnotationSetItem 中的项目数量不同。第二个配对具有相同数量的项目,但指向不同的偏移量。
( AnnotationSetItem { size: 1, entries: [ AnnotationOffItem { annotation_off: 1333860 } ] }, AnnotationSetItem { size: 3, entries: [ AnnotationOffItem { annotation_off: 1333400 }, AnnotationOffItem { annotation_off: 1333408 }, AnnotationOffItem { annotation_off: 1333408 } ] } ), ( AnnotationSetItem { size: 1, entries: [ AnnotationOffItem { annotation_off: 1333860 } ] }, AnnotationSetItem { size: 1, entries: [ AnnotationOffItem { annotation_off: 1335352 } ] } ),
未来工作
在未来版本中,我计划添加更多块,最终覆盖所有 18 个块。还将添加其他功能,以确定 dex 类差异是否无关紧要(如排序)或重要(如代码或资源的更改)。
其他信息
依赖项
~1MB