全网最全最通俗易懂的Android Framework知识点汇总,入门到精通,完全学会 |
您所在的位置:网站首页 › 安卓底层开发是什么软件 › 全网最全最通俗易懂的Android Framework知识点汇总,入门到精通,完全学会 |
一、认识Framework层
Framework其实可以简单的理解为一些API的库房,android开发人员将一些基本功能实现,通过接口提供给上层调用,可以重复的调用我们可以称Framework层才真正是Java语言实现的层,在这层里定义的API都是用Java语言编写。但是又因为它包含了JNI的方法,JNI用C/C++编写接口,根据函数表查询调用核心库层里的底层方法,最终访问到Linux内核。那么Framework层的作用就有2个。 用Java语言编写一些规范化的模块封装成框架,供APP层开发者调用开发出具有特殊业务的手机应用。 用Java Native Interface调用core lib层的本地方法,JNI的库是在Dalvik虚拟机启动时加载进去的,Dalvik会直接去寻址这个JNI方法,然后去调用。 二,核心内容掌握程度Android源码非常庞大,但设计很精妙。纵向分层,横向模块化,使得整个源码更易更新和维护。在手机厂商做framework的更倾向于说自己是做Android系统的,维护的模块主要包括ActivityManagerService、WindowManagerService、PackageManagerService、PowerManagerService、SurfaceFlinger、通信模块、多媒体模块等。Android系统良好的模块化设计使得各个模块负责人只需搞懂自己的模块就可以胜任工作。但是搞定自己的模块并不那么容易,对于新人一般要大概做半年才能掌握其精要,有的做了一年发现还有很多点没有掌握,这也是很常见的。 首先必须了解一些背景知识。1.Android系统采用C/S架构;2.绝大部分IPC通信采用Binder通信;3.核心Service大多运行在System_server进程;4.核心Service代码大部分都在frameworks/base/services目录下;5.别一上来就看Binder!!!6.别一开始看源码就钻牛角尖!!! 以下便是我的学习方法,不保证适合其他人,供参考。1、首先,大概了解下该Service是干什么的。我会搜一些好的分析文章收藏起来,大概浏览下该Service为上层应用提供了什么功能?(这些文章并不会去挨个读,这跟绝大多数人习惯不一样,他们一般是一边看分析文章一边看源码)。在源码里找到源码文件,大概看下核心几个文件开头的注释,注释一般会说的非常清楚这个是干嘛的。(我用source insight看源码) 2、然后,可以尝试写一个小demo,方便调试Service内部方法或抓取系统日志来追踪代码流程。运行在system_server进程中的Java代码均可使用Android studio调试,当然必须是自己编译的image才行。MTK平台手机部分service是可以通过adb shell dumpsys XXX log XX来开启对应service的log 3、接着,从核心API调用入手,一步一步分析源码,理出一个从应用端到Service端,最后回到应用端的函数调用链。这条调用链必定很长很长,有非常多的分支,还会出现非常多的类,这个时候就要抓住主线不放,细枝末节可以不管。借助UML工具了,一般画两个图就够了,一个是类图,一个是时序图。画图要精简,只画重要的主线分支时序图和主要的类关系。这个步骤最难的是理出主线分支调用,切记钻牛角尖偏离目标任务,只需理出一个client–>service–>client的框架即可。将时序图画出来后,整个框架便构建出来了。(我用starUML工具) 4、然后,在上面的框架中必定有几个非常关键的函数,把它搞定。搞定方法就是一行一行读代码,读懂每一行并不容易,需要联系上下文进行理解。从重要函数中要理清service是如何管理target的,比如AMS是使用Stack和Task来管理Activity的,使用两个队列来处理广播,扮演连接者将client和目标ContentProvider建立起连接等。这个过程也是最花时间的,因为你需要从源码里面尽可能地还原作者的设计思想,还原的越彻底,理解的越透彻。一般我是一边理解一边用笔记记录自己的理解。(我用有道云笔记) 5、最后,整理出一篇笔记,方便以后回顾。在前面两步做完,图有了,分析也有了,稍微整理下便成了一篇文档。一般情况下是这样的,今天你理解的差不多了,一个月后你估计只记得大概个轮廓,细节全忘了,两个月后估计连轮廓都忘了。相信我,这时最管用的就是那两个图了,一看就能让你想起80%,所以我非常喜欢画类图和时序图。 而下面便是我自己整理出来的一份笔记资料。 首先给大家贴一个阿里P7大佬整理的Frmaework内核源码知识体系图,大家都知道一句话叫做方向不对,努力白费。希望大家可以根据下面这份系统的Android Framework学习路线图进行学习,这样建立的知识体系才够牢固! 学习规划同时也给大家准备好了对应的Framework源码学习手册:大佬整理的《Android Framework内核源码》 本学习手册旨在通过实例和案例介绍 Android Framework 的核心概念和技术,从而帮助开发者更好地理解 Android 应用程序的设计和开发。 该手册适合具有一定 Android 应用开发经验的程序员,希望能通过深入学习 Android Framework 来帮助开发者更好地理解和掌握这一技术。 第一章 系统启动流程分析 第一节 Android启动概览第二节 init.rc解析第三节 Zygote第四节 面试题 第二章 跨进程通信IPC解析 第一节 Sercice 还可以这么理解第二节 Binder基础第三节 Binder应用第四节 AIDL应用(上)第五节 AIDL应用(下)第六节 Messenger原理及应用第七节 服务端回调第八节 获取服务(IBinder)第九节 Binder面试题全解析 第三章 Handler源码解析 第一节 源码分析第二节 难点问题第三节Handler常问面试题 第四章 AMS 源码解析 第一节 引言第二节 Android架构第三节 通信方式第四节 系统启动系列第五节 AMS第六节 AMS 面试题解析 第五章 WMS源码解析 第一节 WMS与activity启动流程第二节 WMS绘制原理第三节 WMS角色与实例化过程第四节 WMS工作原理… 第六章 Surface源码解析 第一节 创建流程及软硬件绘制第二节 双缓冲及SurfaceView解析第三节 Android图形系统综述… 第七章 基于Android12.0的SurfaceFlinger源码解析 第一节 应用建立和SurfaceFlinger的沟通桥梁第二节 SurfaceFlinger的启动和消息队列处理机制第三节 SurfaceFlinger 之 VSync(上)第四节 SurfaceFlinger之VSync(中)第五节 SurfaceFlinger之VSync(下)… 第八章 PKMS源码解析第一节 PKMS调用方式 第二节 PKMS启动过程分析 第三节 APK的扫描 第四节 APK的安装 第五节 PKMS之权限扫描 第六节 静默安装 第七节 requestPermissons源码流程解析 第八节 PKMS面试题 第九章 InputManagerService源码解析 第一节 Android Input输入事件处理流程(1)第一节 Android Input输入事件处理流程(2)第一节 Android Input输入事件处理流程(3) 第十章 DisplayManagerService源码解析 第一节 DisplayManagerService启动第二节 DisplayAdapter和DisplayDevice的创建第三节 DMS部分亮灭屏流程第四节 亮度调节第五节 Proximity Sensor灭屏原理第六节 Logical Display和Physical Display配置的更新 有需要完整学习资料的朋友,可以扫描下方二维码免费领取!!! |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |