Android调试release包

使用Android Studio对Debug包进行断点调试比较简单,这里介绍一下如何对release包进行断点调试。

背景什么的就不谈了,为什么要对着release包断点调试,debug包他不香吗?身不由己,不提也罢。

前提

  1. 一台root过的手机
  2. 应用源码,至少要有部分未混淆的源码。
  3. release包打包时保留了代码行数信息
  4. 应用release安装包。

将release包安装到root手机上,打开开发环境,开始对release包的断点调试之旅!

我这里有一台root手机,打开logcat可以看到当前正在运行的所有的进程,包括系统进程。


root手机上可以看到所有进程信息

打开调试窗口,可以看到我们的应用进程。(注意IDE内源码应用的包名必须与待调试应用一致)


选择要调试的应用进程

要在release包中保留源码的行数信息,只需要在防混淆代码中添加下面两句
-keepattributes SourceFile,LineNumberTable
-renamesourcefileattribute SourceFile
在IDE自动添加的默认proguard-rules.pro中,这两句话是以注释的形式存在的,同时也包含了对这两句话作用的注释说明。

断点,找准位置!

要进行断点,首先要找到一个未被混淆的位置。诚然,可以在proguard-rules中添加防混淆代码,禁止混淆待调试的代码,但是这样就违背了混淆代码的初衷了,通常情况下并不可取。

但是即使不添加额外的代码,也是有很多地方没有被混淆的,这就是Activity、Service等四大组件以及自定义View类等需要使用反射进行调用的代码

这里我选择了一个Activity的onCreate方法:


打开Activity,成功停在了onCreate上!


单步调试已混淆代码

能断点就能单步调试,到了这里已经解决了很大的问题了。但是我们要调试的代码可能已经被混淆了,怎么办呢?

我们来看一个单步调试深入混淆代码的例子:


通过单步进入已混淆代码

当前断点停留在了已混淆的代码上。因为是通过单步进入这里的,所以实际上是知道这一行对应的源码的,并且从断点信息上也可以看到这个类名被修改为了g,而行数在91行。

此时,仍然可以对着代码行数继续进行单步调试。但是为了更直观的进行断点跟踪,或者跟踪代码中的异步操作流程,可以通过修改类名,这样就可以继续在源码上进行单步了。
下面我将源码类名修改为g,可以看到成功的断在了91行。

修改已混淆的类名以便断点调试

如果手里有编译时的mapping文件,可以将类名直接修改为混淆后的名称,然后愉快的在代码中进行断点,如果没有,就从Activity、View等入口处乖乖的单步调试找类名吧。

非阻塞断点

使用某为手机,在Activity的生命周期方法上断点的时,如果中断时间超过10秒,应用会直接崩溃退出。(这是手机自身的问题,作为Android开发者,一定也了解蓝绿厂手机对于开发者的恶意。在这里强烈推荐某米,这是我用过的对开发者最友好的手机。)

虽然手机不行,但是问题还是要解决的。阻塞断点不可行,可以修改为非阻塞断点。在断点上右击,取消勾选Suspend选项,断点就变成非阻塞的了。

设置非阻塞断点

非阻塞断点有什么用?可以输出log,可以执行任意代码!
首先勾选"Evaluate and log",并在下面的框里面输入 “非阻塞断点!”


在断点处输出log

每次代码执行到这一行的时候,都会在debug窗口的Console标签下输出"非阻塞断点":


断点处输出log

除了输出文本log,也可以输出当前运行时的各种变量信息、也可以修改各种变量的值,只要你能拿到变量的正常名称。也可以执行各种代码,值得一提的是,在这里可以直接调用私有方法、修改私有变量,而不需要使用反射。使用方法很简单,就不再废话了。

当然阻塞断点也是可以执行代码与输出log的。关于断点的其他选项功能,可以自己探索一下,很简单,但是可以体会到探索的乐趣,何乐而不为!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,427评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,551评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,747评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,939评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,955评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,737评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,448评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,352评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,834评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,992评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,133评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,815评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,477评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,022评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,147评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,398评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,077评论 2 355