androidstudio使用经验一(androidstudio断点调试进阶)-10年程序员之环境配置分享

转载或者引用本文内容请注明来源及原作者

估计做过android应用的都用过断点调试.注意,我这里说的,不是正常的调试.正常的调试网上的博文肯定很多,我如果在这里再重复,没有意义.另外, 在看我接下来的博文之前,最好了解清楚在AS中是如何断点调试的.

AS虽然优点很多,但是也有一个比较恶心的地方,就是往往下载一个工程,
因为各种原因,你得花很长时间才能把工程运行起来,甚至有时候AS自己建立的本地工程,
居然在本地就编译不了,都是因为gradle需要各种联网,各种下载之后才能编译.
但是我们要链接到google实在是太难了.笔者看见有的同事搞的没办法放弃AS,去选择eclipse的.

笔者想说的AS调试是针对android系统源码原生应用的调试.
这里说的经验,可能对于开发android应用的人来说,可能帮助不大.但是对于开发android os应用的人来说,是一种革命性的进步.因为:例如要把Camera应用看懂,如果通过断点来看代码,
效率肯定是比看log的方式提高很多的.
而Android 原生的应用想导入AS运行起来打断点.实在是太困难了,过程复杂,耗时长.
当然网上也提供了办法.网上的办法是把整个android系统源码导入AS.
笔者做过这种操作,整个流程走下来,的确可以断点,但是实在太费力了.不到迫不得已都不会做这个操作.

是否有一种办法,简单设置下,就可以对android原生系统应用做断点呢?例如对Launcher3做断点

答案是有的

大家是否发现AS是可以把SDK的源码关联到app工程呢?可能大家通过AS下载SDK的源码关联了工程最后发现
在真机上面运行的时候发现sdk源码对不上.原因是真机的源码和google的源码是有区别的.

到这里,可能有的人就想到了,是否可以把Launcher3的源码当做sdk的一部分呢?答案是肯定的.
只要把设置下sdk源码的路径即可.
关键流程如下:

1.重新设置sdk源码路径, 或者把Launcher3的源码合并到sdk源码中
2.关联要断点的进程
3.在AS中打开要断点的文件,设置断点
4,运行app跑到断点的代码.
大家即可以看到断点停住,还可以看到变量的值,甚至可以单步运行调试什么的

具体流程如下:
下面写的流程是在ubuntu上面操作的.windows应该类似的.

1.设置源码路径:
找到文件: $HDSHOME/.AndroidStudio3.4/config/options/jdk.table.xml

文件中有如下代码:

 <sourcePath>
    <root type="composite">
      <root url="file://$USER_HOME$/Android/Sdk/sources/android-19" type="simple" />
    </root>
  </sourcePath>

上面是对应sdk19的.因为
我的工程在gradle中这样指定sdk版本:targetSdkVersion 19
修改sdk源码路径.

 <sourcePath>
    <root type="composite">
      <root url="file:///dpan/projectA/packages/apps/Launcher3/src" type="simple" />
    </root>
  </sourcePath>

然后重启androidstudio.

2.随便找一个AS工程打开,先看看当前的工程是使用sdk什么版本,这个版本关系到上面
AS主动去找哪一个sdk的源码.一定要配对好

3.打开android studio中Attach Debugger to Android Process按钮.选择Launcher3进程.
4.设置断点.操作Launcher3,让程序跑到断点文件.即可断点发生.

调试系统源码,一般需要debug版本.不然选择不了Launcher3进程
通过上面的办法,其实也可以实现断点调试framework中的源码

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值