您当前的位置: 首页 >  ar
  • 0浏览

    0关注

    674博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

还原Proguard混淆过的堆栈

沙漠一只雕得儿得儿 发布时间:2019-02-22 20:34:33 ,浏览量:0

代码混淆后,也会导致Crash堆栈信息被混淆,难以阅读,增加定位问题位置的难度,一个混淆后的Crash堆栈信息类似这样,核心的信息都没了。为了解决这个问题,可以使用\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

关注
打赏
1657159701
查看更多评论
立即登录/注册

微信扫码登录

0.0415s