Android源码(1)-Android源码学习指南

一. 准备

  • Java/C/C++基础,Java Framwork和C++ Framework, 一部分Lib则采用C.
  • Linux相关知识,Android是基于Linux内核
  • MakeFile知识,Android采用make编译,可以看到很多Android.mk类似的文件
  • Source insight,源码阅读工具神器。(我个人mac电脑是用git + Android stadio)
  • StartUML,类图工具(mac omniGraffle)
  • ProcessOn/Visio,流程图工具

二. 入门学习

三. 进阶学习

Android架构图

  • Application层,和用户直接交互,Java开发
  • Java Framework层,Android api
  • C++ Framework/Libraries层,这一层提供动态库,Android运行库,Dalvik虚拟机等,也叫Native层
  • Linux Kernel 层,Android是基于Linux内核,其核心进程管理,内存管理,文件管理,设备管理,网络协议,驱动之类

四. Android框架

学习整体概念框架
Android架构图

4.1 Loader层

  1. Boot ROM
    上电后,BootRom被激活,引导芯片代码从(固化在ROM)执行,加载引导程序到RAM

  2. BootLoader 引导程序
    BootLoader 是启动Android系统之前的引导程序,引导程序是厂商设定,针对特定的主板和芯片。BootLoader主要作用是检查RAM,初始化硬件参数等功能

4.2 Kernel层
Kernel 层启动流程:

1
2
alps/kernel/init/main.c
start_kernel() ==> rest_init() ==> kernel_thread(kernel_init) ==> kernel_init()

0号进程:

1
2
3
swapper进程(pid=0):又称为idle进程,即空闲进程,由系统自动创建,运行在内核态。
系统初始化过程kernel由无到有的第一个进程,也是唯一一个没有通过fork或kernel_thread产生的进程。
swapper进程用于初始化进程管理,内存管理,加载Display,Camera Driver,Binder Driver等工作

1号进程:

1
init进程(pid=1):由0号进程通过kernel_thread创建,在内核空间完成初始化,加载init程序,并最终运行在用户空间,init进程是所有用户进程的鼻祖

2号进程:

1
2
kthreadd进程(pid=2):又0号进程通过kernel_thread创建,是linux系统的内核进程,会创建内核工作线程kworkder,软中断线程ksoftirqd,thermal等内核守护进程。
kthreadd运行在内核空间,负责所有内核线程的调度和管理,kthreadd进程是所有内核进程的鼻祖

4.3 Native层

Native层主要是一号进程,并且由其孵化出一系例daemon进程,还有一些列native service

  • init会孵化ueventd,lodd,healthd,installd,adbd,lmkd等用户守护进程
  • init进程还启动servicemanager,bootanim,mediaserver等重要本地服务
  • init进程孵化Zygote进程,Zygote进程是Android系统的第一个进程,是所有Java进程父进程

4.4 Java层

  • zygote是第一个Java进程,并且是所有Java进程的父进程,由init进程解析init.rc文件后fork
  • System Server进程,是由Zygote进程fork而来,System Server是Zygote孵化的第一个进程。System Server 负责启动和管理整个Java framework,包含ActivityManager,PackageManager,WindowManager等服务

4.5 Application层
Zygote进程孵化出第一个app进程是Launcher,Zygote进程还会创建Brower,phone,Email等App进程,每个app进程都是由Zygote进程Fork生成的

五. 学习计划

5.1 四大组件
Android 应用的四大组件Activity,service,Broadcast Receiver,Content provider。

  • 四大组件基础知识
    • Android 四大组件
  • Android组件 - Activity
  • Android组件 - Service
  • Android组件 - Broadcast Receiver
  • Android组件 - Content Provider

5.2 消息处理机制

  • Android消息处理机制Looper,Handler,Message介绍
    • Android消息机制

5.3 IPC处理机制

  • Binder机制
    • Binder实用指南(1)-理解篇
    • Binder实用指南(2)-实战篇
  • Socket通讯

5.4 系统启动

  • Android系统启动总结,包含如何启动init进程,如何启动zygote和system_server进程:
  • init进程相关包含init rc语法
  • Zygote进程相关知识
  • system_server进程
  • DVM的启动

5.5 系统服务

  • Android系统服务 - ActivityManagerService
    • AMS启动流程
    • AMS的activity调度
  • Android系统服务 - PackageManagerService
    • PackageManagerService启动流程
    • 应用程序安装流程
    • 应用程序卸载流程
    • installd守护进程
  • Android系统服务 - WindowManagerService
    • Surface view 原理
  • Android系统服务 - SurfaceFlinger推图
  • Input系统
    • InputReader介绍
    • InputDispatcher介绍
  • Android系统服务 - PowermanagerService
  • Android系统服务 - UserManagerService
  • MediaServer
    • AudioFlinger-处理上层AudioTrack创建的音频
    • MediaPlayService服务:StageFrightPlayer本地播放,NuPlayer在线播放

5.6 安全机制

  • Android系统build阶段签名机制
  • ApK签名机制
  • APK逆向 - smali注入

5.7 问题分析

  • ANR问题原理与分析
  • Crash/Exception问题分析
    • Java Exception
    • Native Exception
    • Kernel Panic
  • LowMemoryKiller

5.8 工具篇

  • Android.mk介绍
  • 理解和使用systrace

5.9 其他

  • Android智能指针