前语

之前共享过我转framework的阅历,能够看这儿《我是怎么从Android开发转framework开发的》,今日依据自己实践作业感受整理出一份framework的学习路线和办法,仅供参考,如有不足,还望指正。

Android架构

做framework开发,首要有必要清楚Android体系架构

framework学习路线和方法

这儿概括一下,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相关的材料,但我看了一下,大多都不体系,并且恰饭居多,依据我个人的经验总结出以下一些学习办法以及学习小技巧。

首要有条件的话最好买一本framework相关的书本,一个是由于书本会比较体系性,不会存在有头无尾的状况,二是书本稍微威望一点,过错率会相对较低,假如一开始你就接受一个过错的观点,后面会很难更正过来。个人引荐《深化了解Android内核设计思想》这本书,我个人也看过这本书,感觉写得十分好,需求留意的是,这本书是以Android N的源码来打开的,所以下载源码的时分主张也下载Android N的源码。

framework学习路线和方法

然后依据作者的思路和实践你download下来的源码进行学习,阅览源码的时分不必纠结每一行代码的意思,只需求找到主线即可,由于一个类或许一个办法或许涉及到多个模块的功用,你只需求找到你研讨的那个模块的代码即可。假如你是从app开发转到framework,那么主张先从app的发动进口开始看起,一路追踪到Activity的创立以及onCreate()办法的执行,阅览过程中或许会比较晦涩难明,但不必纠结,主要是感受一些framework层怎么过渡到app层,这样让framework和Application衔接到一同,更容易感受到framework的轮廓和边界。

在体系性学习的过程中遇到一些边边角角知识点不懂的,能够网上查阅相关材料,扩展自己对framework的知识面。

很重要的一点,每学习完一个模块都需求对当前学习内容进行总结,最好是能绘出模块的架构图和流程图,总结能加深你对源码的了解。这儿引荐运用Android Studio的plantUML插件来完结,插件官网有运用教程。

framework学习路线和方法

总结

学习framework是一件十分单调的工作,原因在于相比于app开发的coding,framework更侧重于对源码的reading,但学习它能让咱们更深化的了解Android体系,增加本身的知识储备,下降自己在职业中的可替代性,延伸自己的职业生涯,提高本身身价。假如你有主意学习framework,或许咱们能够一同生长。