还原Proguard混淆过的堆栈

代码混淆后,也会导致Crash堆栈信息被混淆,难以阅读,增加定位问题位置的难度,一个混淆后的Crash堆栈信息类似这样,核心的信息都没了。为了解决这个问题,可以使用<SDK目录>\tools\proguard\bin下的proguardgui.bat脚本将Crash堆栈信息还原到混淆前的状态。步骤如下:

1.双击打开脚本,选择左边的ReTrace选项

2.选择Mapping file文件,也就是混淆后打包后在app module/build/outputs/mapping/release下生成的mapping.txt

3.拷贝混淆后的堆栈信息

4.点击右下角的ReTrace!按钮,完成Crash堆栈信息的追溯

如下图中间部分就是追溯到的原Crash堆栈信息::

需要注意的是混淆的堆栈信息必须是原始的不带有时间等信息的堆栈,本例如下:

--------- beginning of crash
FATAL EXCEPTION: main
Process: com.icfun.game.cn, PID: 4731
java.lang.IllegalStateException: The application's PagerAdapter changed the adapter's contents without calling PagerAdapter#notifyDataSetChanged! Expected adapter item count: 0, found: 1 Pager id: com.icfun.game.cn:id/most_earn_game_viewpager Pager class: class android.support.v4.view.ViewPager Problematic adapter: class com.icfun.game.main.page.main.adapter.b.d$a
	at android.support.v4.view.ViewPager.a(ViewPager.java:1137)
	at android.support.v4.view.ViewPager.b(ViewPager.java:1086)
	at android.support.v4.view.ViewPager.onTouchEvent(ViewPager.java:2190)
	at android.view.View.dispatchTouchEvent(View.java:11721)
	at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2955)
	at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2636)
	at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2961)
	at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2593)
	at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2961)
	at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2593)
	at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2961)
	at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2593)
	at com.scwang.smartrefresh.layout.SmartRefreshLayout.dispatchTouchEvent(SmartRefreshLayout.java:864)
	at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2961)
	at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2593)
	at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2961)
	at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2593)

获取的方法使用如下adb命令:

adb logcat -v raw > 1.txt 

即为原始堆栈信息。

adb命令相关用法:https://developer.android.com/studio/command-line/logcat?hl=zh-cn#outputFormat

参考文章:

https://juejin.im/entry/5a4adacb51882538fe632107

https://juejin.im/post/5a5c08ca6fb9a01ca47a7834

https://medium.com/androiddevelopers/practical-proguard-rules-examples-5640a3907dc9

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值