mtk android framework分析,Android Framework 如何学习,如何从应用深入到Framework?

做过三年framework,自身总结了一套学习方法,大致如下三点。勤加练习,一般性模块可以看的非常快。

1、高度抽象,构建框架

2、重要函数,深究细节

3、善用工具,及时总结

下班再补充具体细节~

----------------

5月29更新

非常抱歉拖了这么久,真的比较忙。。。

Android源码非常庞大,但设计很精妙。纵向分层,横向模块化,使得整个源码更易更新和维护。在手机厂商做framework的更倾向于说自己是做Android系统的,维护的模块主要包括ActivityManagerService、WindowManagerService、PackageManagerService、PowerManagerService、SurfaceFlinger、通信模块、多媒体模块等。Android系统良好的模块化设计使得各个模块负责人只需搞懂自己的模块就可以胜任工作。但是搞定自己的模块并不那么容易,对于新人一般要大概做半年才能掌握其精要,有的做了一年发现还有很多点没有掌握,这也是很常见的。

对于应用开发者来说,他们并不需要修改系统代码,学习framework只是为了了解并理解某个API调用底层的运行机制,要学到这个深度级别还是比较容易的。

首先必须了解一些背景知识。1Android系统采用C/S架构;2绝大部分IPC通信采用Binder通信;3核心Service大多运行在System_server进程;4核心Service代码大部分都在frameworks/base/services目录下;⑤别一上来就看Binder!!!6别一开始看源码就钻牛角尖!!!

以下便是我的学习方法,不保证适合其他人,供参考。

首先,大概了解下该Service是干什么的。我会搜一些好的分析文章收藏起来,大概浏览下该Service为上层应用提供了什么功能?(这些文章并不会去挨个读,这跟绝大多数人习惯不一样,他们一般是一边看分析文章一边看源码)。在源码里找到源码文件,大概看下核心几个文件开头的注释,注释一般会说的非常清楚这个是干嘛的。(我用source insight看源码)

然后,可以尝试写一个小demo,方便调试Service内部方法或抓取系统日志来追踪代码流程。运行在system_server进程中的Java代码均可使用Android studio调试,当然必须是自己编译的image才行。MTK平台手机部分service是可以通过adb shell dumpsys XXX log XX来开启对应service的log。

接着,从核心API调用入手,一步一步分析源码,理出一个从应用端到Service端,最后回到应用端的函数调用链。这条调用链必定很长很长,有非常多的分支,还会出现非常多的类,这个时候就要抓住主线不放,细枝末节可以不管。借助UML工具了,一般画两个图就够了,一个是类图,一个是时序图。画图要精简,只画重要的主线分支时序图和主要的类关系。这个步骤最难的是理出主线分支调用,切记钻牛角尖偏离目标任务,只需理出一个client-->service-->client的框架即可。将时序图画出来后,整个框架便构建出来了。(我用starUML工具)

然后,在上面的框架中必定有几个非常关键的函数,把它搞定。搞定方法就是一行一行读代码,读懂每一行并不容易,需要联系上下文进行理解。从重要函数中要理清service是如何管理target的,比如AMS是使用Stack和Task来管理Activity的,使用两个队列来处理广播,扮演连接者将client和目标ContentProvider建立起连接等。这个过程也是最花时间的,因为你需要从源码里面尽可能地还原作者的设计思想,还原的越彻底,理解的越透彻。一般我是一边理解一边用笔记记录自己的理解。(我用有道云笔记)

最后,整理出一篇笔记,方便以后回顾。在前面两步做完,图有了,分析也有了,稍微整理下便成了一篇文档。一般情况下是这样的,今天你理解的差不多了,一个月后你估计只记得大概个轮廓,细节全忘了,两个月后估计连轮廓都忘了。相信我,这时最管用的就是那两个图了,一看就能让你想起80%,所以我非常喜欢画类图和时序图。

最后的最后,将最开始搜集的那些文章利用零碎时间看一遍,相信我你会发现很多文章分析并不那么准确。做完这些以后有什么想更进一步理解的点,只需花极少时间便能搞定,对于写作能力好的,便可以发文章了。

你可能感兴趣的:(mtk,android,framework分析)