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之后产生的,产生的位置如下图所示:

15432fc6af33d8f8de08f2a3bf3f206e1472473988.png

制造一个混淆代码的Crash

1472473903_74_w583_h352.png
1472473911_11_w538_h261.png

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

1472473919_91_w742_h337.png

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

怎么还原?

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

1472473927_49_w152_h103.png

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

1472473955_78_w1002_h780.png

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

-keepattributes SourceFile,LineNumberTable

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

1472473965_26_w1003_h780.png

完美!

总结

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android混淆代码错误堆栈还原 http://blog.csdn.net/wwj_748/article/de...
    格老子阅读 411评论 0 0
  • 声明 这篇文章更多的是做一个整理,内容来自于ProGuard官方文档以及各种博客等,相关文章的链接在参考目录里,感...
    夷陵小祖阅读 3,736评论 0 23
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,526评论 25 709
  • 没有你,我的个签发给谁看,唉,不知道你是否明白,我所谓的个签都是发给你看的,那都是我想说的话。只是不知道如何开口。...
    忠贞阅读 78评论 0 1
  • 人都习惯性的去听想听到的、看想看到的,以至于其所隐含的东西不去进行思考。都说人生而自由,却不知后一句:但无往不在枷...
    Mr黄_1792阅读 929评论 0 0