前语
之前共享过我转framework的阅历,能够看这儿《我是怎么从Android开发转framework开发的》,今日依据自己实践作业感受整理出一份framework的学习路线和办法,仅供参考,如有不足,还望指正。
Android架构
做framework开发,首要有必要清楚Android体系架构
这儿概括一下,Android架构共分五层,分别是:
-
应用层(Application)
各种上层运转的的app,包含体系内置app和第三方app,例如Launcher、Settings等
-
结构层(Java Framework)
提供给应用层运用的Java库,例如WMS,AMS,PMS,各种View等
-
Native层/Android运转环境
提供给Java Framework层运用的C/C++库,例如OpenGL
-
HAL层(硬件笼统层)
为Java Framework层提供硬件功用,例如相机、蓝牙、各种传感器等
-
内核层
支撑Android体系运转的Linux内核
具体说明可到Google官网查看官方对点评平台架构的说明developer.android.google.cn/guide/platf…
而咱们常说的framework开发其实大多数指的是中心三层的开发,即结构层、Native层、HAL层,可想而知,framework开发的内容是十分多的,那么什么场景下需求framework开发呢,或许说framework开发能做些什么呢
开发内容
简单来说,假如需求修正Android源码,都需求framework开发支持,具体场景包含:
- 体系定制,比方MIUI、Flyme、ColorOS、OriginOS Ocean
- 硬件接入,常见的如车载体系的温度、车速传感器等,不同厂商的硬件标准也或许不同
- 体系裁剪,其实也能够说是体系定制的一种,把Android中不需求的一些模块裁掉以提升体系的流畅性
学习路线
语言基本功
语言基本功关于阅览Android源码是最根底的,framework开发写代码或许不是许多,但阅览源码是粗茶淡饭的作业,所以需求有扎实的语言功底,其中包含:
-
Java
Java Framework作为framework开发的进口,中心功用都是用Java写的,假如你是从app开发转framework开发,这一点肯定不是问题。
-
C/C++
由于native层和hal层都是c/c++写的。假如没有c/c++根底,也能够先从java framework做起,慢慢过渡到native层,期间需求大量补习c/c++根底。
重要技术
-
常用的Linux指令和adb指令
首要,Android本身是依据Linux的,其次framework开发作业都是在Linux体系中完结的,包含编译和调试,假如深化学习Linux体系,那肯定是有很大协助的。
-
Android源码目录结构
搞清楚每个目录下都有些什么模块,全体感受Android架构
-
Android源码下载、编译、烧录
framework开发无非就是下载源码、阅览源码、修正源码、编译源码、烧写lib/镜像
-
熟练掌握Android中的重要模块
Android是一个很巨大的体系,包含许多的模块,彻底了解所有模块是好不容易的,但一些常用的模块有必要需求掌握的,比方
- Android发动流程:中心进程(init、logd、adbd、servicemanager、zygote)以及进程之间的父子关系
- 重要服务:servicemanager、PackageManagerService等
- App发动流程
- SystemProperties,体系特点
其他的依据实践作业中接触到的模块来深化学习,比方
- WiFi
- Bluetooth,蓝牙
- Telephony,通话
- Settings,体系设置
- Launcher,桌面
- Media,包含Camera,Video,Audio
- Display,图像显示Surface相关
- Storage,存储
- Sensor,传感器
-
JNI
java与C/C++相互调用
-
IPC(Inter-Process Communication)
进程间通讯,主要了解binder(AIDL、HIDL)
-
logcat日志抓取和剖析
通常处理一个体系bug时,首要会依据体系logcat日志来定位原因
学习办法
网上有许多framework相关的材料,但我看了一下,大多都不体系,并且恰饭居多,依据我个人的经验总结出以下一些学习办法以及学习小技巧。
首要有条件的话最好买一本framework相关的书本,一个是由于书本会比较体系性,不会存在有头无尾的状况,二是书本稍微威望一点,过错率会相对较低,假如一开始你就接受一个过错的观点,后面会很难更正过来。个人引荐《深化了解Android内核设计思想》这本书,我个人也看过这本书,感觉写得十分好,需求留意的是,这本书是以Android N的源码来打开的,所以下载源码的时分主张也下载Android N的源码。
然后依据作者的思路和实践你download下来的源码进行学习,阅览源码的时分不必纠结每一行代码的意思,只需求找到主线即可,由于一个类或许一个办法或许涉及到多个模块的功用,你只需求找到你研讨的那个模块的代码即可。假如你是从app开发转到framework,那么主张先从app的发动进口开始看起,一路追踪到Activity的创立以及onCreate()办法的执行,阅览过程中或许会比较晦涩难明,但不必纠结,主要是感受一些framework层怎么过渡到app层,这样让framework和Application衔接到一同,更容易感受到framework的轮廓和边界。
在体系性学习的过程中遇到一些边边角角知识点不懂的,能够网上查阅相关材料,扩展自己对framework的知识面。
很重要的一点,每学习完一个模块都需求对当前学习内容进行总结,最好是能绘出模块的架构图和流程图,总结能加深你对源码的了解。这儿引荐运用Android Studio的plantUML插件来完结,插件官网有运用教程。
总结
学习framework是一件十分单调的工作,原因在于相比于app开发的coding,framework更侧重于对源码的reading,但学习它能让咱们更深化的了解Android体系,增加本身的知识储备,下降自己在职业中的可替代性,延伸自己的职业生涯,提高本身身价。假如你有主意学习framework,或许咱们能够一同生长。