[Android] 开启R8优化下如何获得原始异常堆栈跟踪
什么是R8
以下介绍来自DeepSeek
R8 是 Android 平台上的代码优化和混淆工具,它是 ProGuard 的替代品,专门为 Kotlin 和 Java 代码设计。以下是关于 R8 优化的关键信息:
主要功能:
-
代码缩减 (Shrinking):
移除未使用的类、字段、方法和属性
减小应用体积 -
优化 (Optimization):
内联方法
移除死代码
简化类结构
优化控制流 -
混淆 (Obfuscation):
重命名类和成员为短名称
增加逆向工程难度 -
资源缩减:
与资源缩减工具配合移除未使用的资源
总而言之,就是能够缩减安装包体积,优化代码以及提高应用运行速度
但同样的,因为使用混淆,在捕捉异常时会受到混淆的影响导致无法定位到具体代码行
一般来说,开发时所编译的debug版不开启R8,而用于发布的release版适合开启R8。但当release版出现崩溃收集日志时就会受到R8的影响。
解决方案
在开启R8优化后编译release版时会生成一个mapping文件,该文件记录了混淆时所有对应的方法,使用该文件即可对记录的堆栈跟踪信息进行反混淆。
文件一般位于app/build/outputs/mapping/release/mapping.txt
在clean build后会重新生成,建议按版本妥善保管
反混淆会使用到retrace
工具,该工具为Android sdk自带工具,位于$ANDROID_HOME%\cmdline-tools\latest\bin\retrace.bat
或者$ANDROID_HOME%\tools\proguard\bin\retrace.bat
(旧版)
如果没有找到可能是没有安装该工具,进入Android studio设置
->语言和框架
->Android SDK
,在SDK Tool
标签下勾选Android SDK Command-line Tools(latest)
进行安装。
然后进行反混淆,命令如下:
1 | retrace.bat -verbose mapping.txt crash_logs.txt > deobfuscated.txt |
反混淆完成后打开deobfuscated.txt
即可看到正常的堆栈跟踪信息。
在Android studio内打开分析堆栈跟踪或线程转储
对话框,将反混淆的内容粘贴进去即可让Android studio快速定位到代码行
后记
这下既可以享受R8的优化也不怕日志收集受到混淆的干扰了
Use this card to join MyBlog and participate in a pleasant discussion together .
Welcome to GoodBoyboy 's Blog,wish you a nice day .