Android混淆代码错误堆栈还原

前言

相信做过app的同学对代码混淆应该不陌生吧,如果陌生就自行百度,这里不做普及。我们先思考一个问题,如果我们把代码混淆了,如果出错了怎么定位问题?答案非常简单,只要稍微实践下你就明白了,下面就是给你整理的对混淆代码错误堆栈还原的方法。

如何混淆?

Android Studio实现混淆很简单,只需要在build.gradle进行如下配置即可:

 buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

这个是在发布模式下去混淆代码的,如果想在调试模式下混淆代码,就增加一个debug的配置即可:

debug {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }

mapping.txt文件

mapping文件是我们要实现混淆代码还原必须要关注的一个文件,它里面存放着源码到混淆之后的代码的映射信息,这个文件是在我们执行proguard之后产生的,产生的位置如下图所示:

这里写图片描述

制造一个混淆代码的Crash

这里写图片描述

这里写图片描述

启动MainActivity的时候就会直接Crash并抛出以下异常:

这里写图片描述

是不是发现出错的堆栈完全看不懂呢,如果你不会还原的话,你可能根本就定位不到出错的位置。

怎么还原?

一个字,简单。利用SDK给我提供的工具就可以,大家要有一颗发现美的眼睛啊,SDK提供了很多有用的工具哦。我们来到sdk/tools/proguard/bin目录下,会发现三个bat文件:

这里写图片描述

我们直接双击打开proguardgui.bat文件,通过gui来完成我们的还原工作:

这里写图片描述

哇,好神奇啊,竟然被还原了。但是你有没有发现,那个Unknown Source还在,根本不知道出错行在哪,怎么办?先思考下为什么会出现Unknown Source?原因是我们在Proguard的时候没有保留源文件名及行号,所以我们只需要在proguard-rules.pro文件增加以下配置:

-keepattributes SourceFile,LineNumberTable

然后我们再次编译源码,再还原一次:

这里写图片描述

完美!

总结

是不是发现总有些自己讲不清楚说明白的东西?我们获取知识都是先从问为什么开始,本篇文章讲的只是开发中的一个解决问题的技巧,但你想想如果有很多这种混淆的异常,难道你要一个一个去看,拜托太低效啦。下篇告诉你如果通过Bugly配置Mapping文件,实现线上堆栈还原,让你解决问题的速度变得杠杠的。最后,送个鸡汤:程序员是为解决问题而存在的,而不是为了解决编程问题,你的价值取决于你能解决多少问题

这里写图片描述

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小巫技术博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值