工具的链接https://blog.csdn.net/doubledong1994/article/details/104410638
https://github.com/doubledong94/android-source-reader
如果类中的函数中没有调用其它函数,只有对属性的读取与赋值,那这个类会非常容易读,但大部分类中的函数都会调用别的函数,代码的复用也鼓励函数调用,这时当你想弄懂一个函数,却看到里面调用的尽是些你不认识的函数,就像你做英语阅读想结合上下文猜单词意思的时候你发现上下文你也不认识。这时你想的可能是:我硬着头多读几个函数,函数读的多了就看啥都眼熟了。这样做是有问题的:一个1m大小的类有800个函数,它们产生的调用关系上万,想从这么多调用关系中看出什么经验,抓住什么重点,人力去做太过为难;而且没有意义的东西容易被忘,读到后面忘了前面的事情难免发生。
这个工具的目的就是在你想去看一个类时,告诉你重点在哪里,先去看什么。
一个类中的重要的(也是先去看的)函数有两种:1. 没有被类内其他函数调用过的函数,2. 没有调用过类内其他函数的函数。第一种函数必然是将函数的功能对外的,读它们可以看出这个类提供了哪些功能,第二类函数就像是最底层的工人,读它们你可以看出这个类是如何实现功能的。你可能觉得第一种函数你可以通过public修饰词知道有哪些,但public修饰词不能告诉你这个函数牵动了多少其他函数,又被多少函数牵动过(这里的牵动的意思是:a 调用 b,b 调用 c,那么可以说 a 牵动了 b 和 c )。下面的截图以类android.view.View为例,看看这个工具的使用方式。
method dependency in 的意思是按照函数牵动其他函数的数量给没有被调用过的函数排序
method dependency out 的意思是按照函数被其他函数牵动的数量给没有调用过其他函数的函数排序
每个函数后面的两个数字分别是它牵动过的函数的数量(in)与被其他函数牵动过的函数数量(out),因为算法问题,1表示没有。
这时你就可以按照这个函数顺序去读了,out 的值越大,说明这个函数对类中的其它函数越有用,当然要先读,in 的值越大,越能从这个函数中看出这个类要干嘛,当然也要先读。
这时读函数可以参考另一篇文章https://blog.csdn.net/doubledong1994/article/details/104797270(如何使用我的工具读一个复杂的函数)来读一个函数,也可以在 method dependency in 列表中点击你要读的函数,它们展开如下图
它会展开让你看到这个函数牵动过的函数,也是按 in 值排序,后面也跟有函数的 in 值和 out 值 ,你能快速的、粗滤的查看它们的调用关系。
method dependency out 列表也可以展开
它展开的内容是这个函数被调用的情况了。
暂时只做到这么多,下一步的计划是给函数分类,或者看看类与类之间的关系如何能从它们的相互调用关系中得到。