如何读懂Framework源码?如何从应用深入到Framework?

如何读懂Framework源码?

首先,我也是一个应用层开发者,我想大部分有“如何读懂Framework源码?”这个疑问的,应该大都是应用层开发。

那对于我们来讲,读源码最大的问题,其实是没有应用场景,或者说短期来看成本高,收益底,容易半途而废

针对这个问题,首先是要要有一定的定力和研究精神,打算拿下哪部分的源码分析,即使遇到再多的问题,也要想办法解决,自己定的目标,跪着也要完成 其次,就是从什么方向入手,正如题主所说,源码很多,ndroid11的aosp整个下载下来,有150G左右,所以找入手点很重要,否则只会把源码下载完成之后就让它在硬盘里吃灰了

(上图为Android11的aosp源码大小)

针对应用层开发来讲,我这里提供几个面试比较常问,也比较容易上手的入手点

  1. 四大组件启动流程
  2. 应用启动流程
  3. 系统启动流程
  4. 音频相关内容

这里看上去的4个小点,其实真正做起来至少要半年的时间,因为里面涉及的内容既多又深,就第一点来讲,Activity启动流程就够你搞至少两周了,这里面会涉及ActivityThread ,AMS ,Zygote, Binder跨进程调用等一系列知识

这里再额外提一句,看到weishu大佬回答说不要关注各种流程的跟踪,其实我是不认同的,当然这只是小弟我基于自身知识和认知的看法

对于广大的应用层开发者也是一样,我们要明白自身的定位,小白走小白的路,大佬走大佬的路,个人认为,不论是跟各种系统流程的调用链也好,还是按系统服务去整块梳理也好,这些都是“过程”,而我们的目标,是深入framework源码,试问连调用链都没跟过,怎么深入源码?

当然,我也同意weishu大佬说的,要分析其后面涉及的思想和原理,但是这是第二层了,没有第一层的基础就想干第二层的事情,无异于空中楼阁,痴人说梦

回到正题上来,我们已经搞定了从什么地方入手,第二个要解决的问题是,我们需要具备什么样的基础,才能读懂源码,或者有能力去读源码

目前新版本的AOSP底层代码基本上都用C++重构过了,因此如果你想深入到native层,比如我们最常提到的handler,其实在native层也有一套实现,取消息的时候会通过管道机制进行唤醒通知,避免死等阻塞问题 那是不是说我们必须要先有C++或C语言基础才能去读源码呢?我认为,有基础自然好,没有也不会有太大影响,边度边补相关知识,可能比学完C++再来继续读源码效率要更高

因此,在我看来,不论你基础如何,只要有应用层开发经验,有探索和研究Framework的兴趣和欲望,这就够了。只要开始,就是进步

第三点我要讲的是,深入到什么程度是合适的。我在读源码的过程中,经常会跟着单个调用链越挖越深,比如在研究系统启动流程的时候,甚至到了虚拟机层面和汇编层面,但是一般来讲,我们不需要挖这么深,一来是没有必要,二来确实会花费大量精力,且很难见到成效

因此我在研究某个点的时候,会把这个点拆分成一个个的小问题,举一个具体的例子,在研究SystemServer相关流程的时候,我给自己提了这些问题

  1. SystemServer是如何被fork出来的
  2. SystemServer做了些什么事情
  3. SystemServiceManage
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值