android 例子源码_AS调试系统源码的三种方式,你知道几种?

点击上方“刘望舒”,选择“星标”

 多点在看,就是真爱

作者: 刘望舒 |  来源:刘望舒的博客

AOSP基础系列

老读者都知道,我的技术博客从2016年开始就没写过不成系列的文章,这些系列文章组成了目前Android领域最全面深入的原创知识体系,更恐怖的是这个体系还在不断的成长,关于这个知识体系可以点击 阅读原文 了解。

在《Android进阶解密》中,我介绍了不少系统源码的知识,也简单介绍了如何阅读源码,但是我想很多同学想更多的了解系统源码的下载、阅读、调试,因此我又写了Android AOSP基础系列。今天我给大家带来的就是这个系列的最后一篇文章,讲解的是Android Studio调试系统源码的三种方式,本系列剩余的文章如下所示。

趁周末,用VirtualBox安装 Ubuntu吧!

是时候下载Android 9.0系统源码了

如何方便快速的整编Android 9.0系统源码?

不会查看系统源码,还搞什么Android?

接下来是正文。

前言

作为应用开发,我们将AOSP源码下载下来后,去查看源码已经足够用,如果想更进一步,可以学习调试源码,这样有助于了解系统源码和原理。调试系统源码的方式有很多种,这次分享出来的是比较适合应用开发的三种,分别是AOSP源码项目调试、导入部分源码调试、新建Android项目调试。

需要注意的是,这三种方法都不需要整编系统源码,甚至有的方法只需要下载部分源码就可以了,哪个方法更适合你呢?看完本篇文章就会有答案了。

1. AOSP源码项目调试

这种调试方法的前提是要将AOSP源码下载下来,关于下载AOSP源码,可以查看是时候下载Android 9.0系统源码了这篇文章,另外还需要将AOSP源码导入到Android Studio中,并且配置SDK和JDK,这个在不会查看系统源码,还搞什么Android?讲过,因为这篇文章多次用到配置SDK和JDK这一知识点,再次讲一遍。

1.1 配置SDK和JDK

由于我们下载的是9.0的AOSP源码,SDK版本也应该对应为API 28,如果没有就去SDK Manager下载即可。
点击File -> Project Structure-->SDKs配置项目的JDK、SDK。
创建一个新的JDK,这里取名为1.8(No Libraries),删除其中classpath标签页下面的所有jar文件。

4e3a5d0a83e4c574ce90cc7058b35e1b.png

接着设置将Android SDK的Java SDK设置为1.8(No Libraries),这样Android源码使用的Java就是Android源码中的。

6d89eb4c0d332185948142f69de31b14.png

确保的项目的SDK为源码对应的SDK。

7cbbafbbea21c71f2cc9b80f91d9f596.png
1.2 新建Android工程配置

实际上不按如下配置也可以调试源码,但是打开AS时会在Event Log处报错且不能消除提醒,因此这里建议还是要配置下。
在File-->Project Structure-->Modules中添加一个Android FrameWork:

67e4e6398eb4956a8a16cbde5eab9a9c.png

修改Manifest file等路径为下图中类似的路径,因为我们常调试这个目录所以这么设置,你也可以设置其他的路径。

72fe13534396a5feb4de2434c3b164b9.png

在AS最顶部的工具条中选择Edit Configurations

fa99af25904dc9b21d7f3f944bd6d180.png
1.png

在Run/Debug Configurations弹框中点击左上角的加号,添加一个Android App配置,按下图进行配置:

ff94e5151ffefa0a635e56f1f28aac08.png
1.3 调试源码

打开Genymotion,运行Android 9.0的模拟器。
应用程序的启动过程是大部分开发都熟悉的知识点,如果还不熟悉可以看Android深入四大组件(六)Android8.0 根Activity启动过程(前篇)和AndroidAndroid深入四大组件(七)Android8.0 根Activity启动过程(后篇)这两篇文章。
本篇文章的调试源码部分都以这个知识点为基础进行调试。
应用程序的启动时会调用ActivityStarter的startActivityMayWait方法,下图是AMS到ApplicationThread的调用链。

f6f4163a5b860d718b04ceab65337815.png
5.png

ctrl+N 查找类ActivityStarter,在ActivityStarter的startActivityMayWait方法上打断点,也可以在其他地方打断点,比如AMS的startActivity方法,这里只是举一个例子。

0b9ee854ef77a52068b3d409dfe50f54.png

点击菜单的Run-->Attach Debugger to Android Process或者上方工具条的Attach Debugger to Android Process图标,

勾选Show all processer,选择system_process,如下图所示。

5031fd80e551df0453441454ba35b840.png

在Genymotion模拟器中点击Gallery应用,我们设的断点就会生效,就可以愉快的进行调试了。

8e16ebc93e8ccbcb7cc01bc11afbd2f5.png

2. 导入部分源码进行调试

第一种方法需要对源码的idegen模块进行单编,生成android.ipr以便于AS导入AOSP全部源码。事实上,我们平常调试源码也用不到AOSP全部源码,导入部分源码也可以调试。这里导入最常用的frameworks/base目录作为举例。

在当前项目File-->New-->Import project,或者关闭当前项目,选择Import project,如下图所示。

67117ee289bbd99bb795ae0d4c8af091.png

选择导入frameworks/base目录,一路Next:

704fce5b05ebec1091a0d4abb60b39cd.png
10.png

这是AS会列出frameworks/base目录下的所有项目,因为要调试ActivityStarter类,这里只需要导入frameworks/base/services/core/java就可以了。

3b314ec7579141ad6246ad3cb53cef2a.png

剩下一路Next就可以了,项目加载进来后,按照本文1.1小节来配置项目的JDK、SDK。接下来的调试步骤和1.3小节是一样的。

3. 新建Android项目进行调试

如果我们没有下载源码,或者不想导入那么多源码,也可以新建一个Android项目来进行调试,步骤如下:

  1. File --> New --> New Project,一路Next就可以了。

  2. 新建一个包,因为要调试ActivityStarter类,包名称就为ActivityStarter的包名com.android.server.am。

  3. 将9.0版本的ActivityStarter类复制到包中,如果没有下载源码,可以从http://androidxref.com 中下载。

  4. 按照1.3节的内容开始调试。

4.总结

这篇文章介绍了3种调试源码的方法,作为应用开发来说,这三种调试方法就够用了,总体来说都是大同小异,适合不同需求的开发人员,按照我个人的理解,最推崇第一种方法,毕竟这种方法一劳永逸。好了AOSP基础系列就讲到这,接下来你可以开始阅读和调试源码了,建议从Android系统启动系列开始。

----------  END  ----------

推荐文章

移动开发的跨平台技术演进

阿里专家Android转Web前端的一些思考

为什么有些程序员悄悄度过了中年危机?难道是996......

分享大前端、Java、Android等技术,

关注职业发展和行业动态。

9ac28a4d1b687f616dd2fed7bd3fc5f6.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值