在衡阳待的那些年,身边所看到的大概可分为三类人,三类是急速反复的做业务方法论,唯有功能能够写出来,每天多次重复上班,不想过多的去提心吊胆;还有三类是急速的深思归纳和学习,不只逗留在做的层级上,是或者说的喜欢做这行,且觉得非常有趣。没有甚么好与坏,只是我们的崇尚不同罢了。但假如他们想去大一点的公司,或者找一份薪水稍稍高些的工作,后面他们就会有许多坎要去迈,其中一个是写作源代码,因此这期他们主要来深入探讨一下阅读源代码的 许多坐姿。在或者说走上那条路以后,希望他们能明确几点:
没有人一上来就能看不懂源代码,他们都是从 Hello World 开始的,因此没有甚么死路能走,不外乎是看他们谁花的天数多,谁更愿提心吊胆。我们都是上班,咋他们薪水拿得低工资又好,而他们大小周,偶而还需要上工天天。反之亦然五六年他们拿 20k,我他们却只拿了 10k。注意我说的是 20k ,以后写过一则该文 《从3K到30K,23岁的岁数我到底经历了甚么》 这次反之亦然怕某些哥们儿会喷,哪有因此高?他们心中要有幸福的意志,要有急速向上的青春活力。能力提升过程中他们能由此获得许多东西,内心深处也Sitapur强大,关键是他们在做项目的这时候,确实会要随手很多,这就能用做小钱和天数,大前提是他们愿拿天数去换。
一.短序
首先来介绍许多看源代码的工具,第一个是他们的应用软件 Android Studio ,这里他们以具体的示例来说,假定现在我想看 setContentView 的源代码,因此他们能直接介入到源代码的方法里面去:
这时假如再雷西县跟发现是一个tcsh,他们必须要找出实现类,一般而言他们能搜寻(ctrl + F)找出其建立示例的地方:
是黄色的,这个这时候他们再也根本无法雷西县跟了(一遇到红难堪症就犯了,肾得慌),遇到这种情况他们能试一试自上而下的搜寻(holds shift)
但许多情况下他们自上而下搜寻也搜寻不到,接下来给我们介绍第二个工具,他们能在线浏览源代码写作:http://androidxref.com 这里面不光有 Java 层的源代码还有 native 层的源代码
在线查看一般都是比较精确要看哪个类的这时候,并不能满足他们快速查看的需求。我就想在 Android Studio 中看,能急速快速的往下介入。其实他们在下载 sdk 的这时候一般都会下载源代码,只不过刚好 android.jar 包中没有这个 class 类的源代码,因此他们才找不到而已。这个这时候他们需要一个比较完整的 android.jar ,用来替换他们 sdk 中的 android.jar 文件,关键是这个 jar 怎么来?最好的方式是他们去编译,但许多哥们儿可能觉得他们编译成本高,因此他们也能去 github 上下载。
https://github.com/anggrayudi/android-hidden-api 把原来的保存一份改下命名,把下载的复制进去,然后重启 Android Studio 再去看看,发现不仅没有报红而且能点击了。到后面这些还是无法满足他们的需求,比如现在他们已经把 C++ 进阶学完了,我想跟到 native 层的源代码去看看,比如去看看底层的 Binder 驱动,或者去看看类的加载机制,我再送我们一个链接,里面所有的源代码基本都能找出:
https://pan.baidu.com/s/1tGtBt5Y1G50yI10EkVRPAw再啰嗦几句,假如他们对源代码非常感兴趣,我建议我们还是他们去编译源代码,这样他们就能利用 Android Studio 去调试跟踪源代码,屡试不爽。
二.前辈力量
该文的开头有提到,没有人一上来就能看不懂源代码,他们都是从 Hello World 开始的,因此没有甚么死路能走,不外乎是看他们谁花的天数多,谁更愿提心吊胆。别看网上有许多大牛写了许多分析源代码的该文,但其实他们都是经过反复提心吊胆,才能写出那一则形如流水却很抽象的该文。因此他们写了因此多分析源代码的该文,录了因此多直播课程,不外乎是他们在背后花了许多天数罢了。只要你愿我能行的,你也能行。
当然刚一开始我并不建议我们他们去看源代码,我记得他们第一次看源代码的这时候,点击进去是一脸蒙 B。因此刚一开始他们需要借助前辈的力量,跟着大牛的思路去看源代码,也是我们通常所说的老司机带带我。
有几点需要提醒我们是,有些该文可能篇幅比较长,要有耐心急速反复的多看几遍。当然有时也不必在一棵树上吊死,其他树上也能多试几次。其次他们找许多稍稍靠谱一点的,写作量多许多的该文,排版稍稍好点,图文并茂的。最后,不管他们的该文写得有多好有多清晰多牛掰,始终不是他们他们的,也有可能存在 bug 。这也是我为甚么建议我们看写作量稍稍高些的该文,因为有问题我们会评论提出来,会经过许多次的修正调整。他们最好他们亲身去实践,他们做做笔记或者写写该文,把它或者说变成他们的知识,这样提升的速度是非常快的,屡试不爽。
三.惯用套路
每个人写作源代码的思路都会有些不一样,坐姿也会有所不同,下面我仅代表个人的观点谈谈我的惯用套路,假如他们想去分析 glide 这个开源库,假定现在网上的资料也根本无法满足他们了:
第一步会去画 UML 时序图,相信他们在分析 glide 源代码的这时候,刚开始可能连访问网络的码头都找不到。画时序图不光能防止他们沉入茫茫大海,还能让整个加载显示流程都非常清晰,好记性不如画流程图。
第二步会去画 UML 类图,每个第三方库在其架构设计上,都会有其值得借鉴的地方。如 retrofit 这个开源库,虽然类文件并不多,但里面的封装解耦思想,都能够在他们实际的开发过程中派上用场。
第三步会去抓细节,比如 Glide 怎么压缩适配图片的,缓存怎么处理的,是如何加载 gif 图片的,怎么解析视频封面的。他们在开发过程中遇到的许多问题,源代码会给他们许多更好的解决方案。
第四步会去参考模仿,并不是建议我们去多次重复造轮子,比如他们知道了 IOC 的实现原理,就能完美的解决 mvp 中多 prsenter 的情况;清楚了 RxPermission 的实现方式他们就能很轻松的写出类似 RxPay 和 RxShare 等等。
第五步会去深思现有的架构设计,他们在写项目的这时候,往往由于天数的原因,只是考虑了怎么实现,能实现能按时上线就好。随着业务的急速修改增加,可能已经没有了高蛋白低脂肪。当然随着经验的增长考虑的也会多许多,但仍然需要急速的深思和学习。
四.随心所欲
当他们写作了大量的源代码和第三方开源库后,他们就能打通任督二脉,学习的速度会越来越快。当同事遇到许多棘手的 bug ,他们能从源代码的角度去分析解决;许多难以实现的需求,他们也能很快的找出解决方案。这时他们要么是在大公司镀金,要么是在小公司做负责人,是或者说的喜欢工作、学习和提心吊胆。
原创作者:红橙Darren(曾辉)
原文链接:
https://www.jianshu.com/p/8012d5d38b01