mapping.txt文件解读
链接
R8
Android Gradle Plugin 3.4.0之后,默认使用R8替代原来的ProGuard,R8在编译过程中主要执行:
Code shrinking (or tree-shaking): 检测及删除无用代码
Resource shrinking: 检测及删除无用资源,包括 Code shrinking 删除的代码中引用到的资源
Obfuscation: 混淆即使用简单字符替代原来的类名、方法名和变量名,减少(复用)字符串常量
Optimization: 代码优化,例如方法内联等
同时R8编译之后也会压缩LineNumberTable,导致我们读取崩溃栈信息的时候异常头疼,因为代码行数有可能完全对不上。好在R8在混淆的时候会另外输出一个mapping.txt文件,记录混淆的信息(包括代码行数变化信息),因此我们可以通过该文件逆向解析崩溃栈。
mapping文件格式
classline
fieldline * N
methodline * M
复制代码
__mapping.txt__文件的格式如上所示:__classline__是类信息,紧接着是__N__个__fieldline__的变量信息,以及__M__个__methodline__的方法信息。
originalclassname -> obfuscatedclassname:
复制代码
__classline__的格式如上所示:由一个 -> 分隔:前半部分是原始类名,后半部分是混淆之后的类名
originalfieldtype original