前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android混淆代码错误堆栈还原

Android混淆代码错误堆栈还原

作者头像
巫山老妖
发布2018-07-20 10:53:54
1.9K0
发布2018-07-20 10:53:54
举报
文章被收录于专栏:小巫技术博客小巫技术博客

前言

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

如何混淆?

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

代码语言:javascript
复制
 buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

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

代码语言:javascript
复制
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文件增加以下配置:

代码语言:javascript
复制
-keepattributes SourceFile,LineNumberTable

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

完美!

总结

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-08-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小巫技术博客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
    • 如何混淆?
      • mapping.txt文件
        • 制造一个混淆代码的Crash
          • 怎么还原?
          • 总结
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档