最近的一段时间里,我在研究 Android 配套工具和 Android Studio 相关的实现,以及它们如何配合完成一个 APK 的构建。因为整个系统各个模块之间的关系过于复杂,除此,不同模块之间也包含了大量的代码 —— 无论是从行数上,还是从函数长度上来说。
从总体的思路上来说,在进入代码阅读之前,我们需要:
从而我们才能理解主流程(脉络)。针对于此,我们会发现一些不同的模式:
它们并不是互相独立的,往往是结合一起使用的。
借鉴他人
这种模式,可以实现快速地学习。它存在的一些明显的缺点是:
所以,它适用于你想快速了解某一部分的功能,从而了解全貌,随后我们就可以深入某一部分进行了解。
在这种模式之下,我推荐:通过购买、阅读书籍的方式来学习。如果能买到书便是一件幸运的事,因为它已经经过了系统性的加工。唯一的问题可能是上面的代码有些老旧。但是,它更加的系统化、完整,方便我们理解,并减少搜索资料的成本。
为什么不是网上找资料?:
如果你能直接找到详细的资料,毕竟花费的时间足够短的话,那么也是没问题的。
源码学习
源码学习是一个需要花费大量时间和精力的事情,除非万不得已,否则我也不想用这种方式。因为,我们会缺少大量的上下文,这些上下文可能导致我们理解出现一些误差。
前期准备:
源码学习是一个非常重的学习模式。我们要花费大量的时间:
所以,还有一些不错的犯懒的姿势:
通过书籍来加强。我一直觉得对于学习来说,阅读书籍是最理想的方式。因为寻找资料需要成本,而多数的书都会起到一个索引的目的。
寻找相似的轮子。一个有意思的技术,必然有很多公司、很多人都研究过。他们都会尝试去创造类似的轮子。唯一的问题是,我们要学习到什么程度,如果只是理解的话,那么看看别人重复的轮子也是可以的;如果是为了深入的话,那么还得回过头去看看源码
借助测试调试
对于调试来说,我们还会面临的一个挑战是:诸如我这样的入门级 MBP 配置,对于大型系统来说编译根本不够用。应对这种问题的一个比较良好的姿势是:通过 IDE 调试测试来完成对部分代码的调试。(PS:这种方式也适用于业务代码的开发)
如果我们可以在应用的入口中创建某一模块对应的测试,那么我们就可以快速调试整个应用了。
fork 主流程
对于我来说,我觉得只阅读源码是一种只为了解决一时问题的方式。同时,像我这样的凡人,对于某些知识和内容,只要不使用,我可能隔个十天半个月,我就忘光了(虽然我一直觉得这是一件好事)。
边阅读代码,边 fork 项目,我们还会有一些挑战:
所以,还有一些模式:
README 输出
为了方便我们查阅和其他/她人使用,我往往会把相关的内容记录到项目的 README 上。
这样一来,其他/她人在学习的过程中还能 GET 到相似的思路。
结论
最后,简单做一些成本对比:
模式 | 成本 | 性价比 | 主要场景 |
---|---|---|---|
借鉴他人 | 低 | 高 | 学习 |
阅读源码学习 | 高 | 低 | 理解思想 |
fork 主流程 | 高 | 低 | 理解、模仿 |
借助测试调试 | 较高 | 中 | 理解、模仿 |
一些结合模式:
阅读二手资料,根据二手资料理解主脉络
编写主流程调用链,理解架构设计理想
借助开源软件的测试调试,理解参数及流程
……
本文转载自微信公众号「phodal」,可以通过以下二维码关注。转载本文请联系phodal公众号。
今天工作时,有个临时加的好友问我,怎么利用web页面获取访问者的qq。 以前没有...
需求: 这里以项目的需求为例,基本的需求如下: 分为左右值,包含左右值,正整...
对于php开发小白来说搭建一个php运行环境就是一道坎! 因为要做php开发,搭建一...
本文主要是讲述 Vue.js 3.0 中一个组件是如何转变为页面中真实 DOM 节点的。对于...
一维数组中重复元素的去除 前言 一、基本思路 二、步骤 1.设置判断数组Arr[ ]: 2...
本文实例为大家分享了ajax三级联动展示的具体代码,供大家参考,具体内容如下 1....
事情经过 有天,我们公司外区的一个销售C说他8月3号以前的工作流记录找不到了。...
'#################################### '函数:ishttp[str] '参数:str,待处理...
1.我该努力了,不为别的,就为了以后我想要的东西,我会自己给自己。 2.有些人...
本文实例讲述了Thinkphp 框架扩展之标签库驱动原理与用法。分享给大家供大家参考...