一. 准备
- 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官方培训 Android training(https://developer.android.com/training/index.html)
- 胡凯发起的 Android官方培训课程中文版(http://hukai.me/android-training-course-in-chinese/index.html)
三. 进阶学习
- Application层,和用户直接交互,Java开发
- Java Framework层,Android api
- C++ Framework/Libraries层,这一层提供动态库,Android运行库,Dalvik虚拟机等,也叫Native层
- Linux Kernel 层,Android是基于Linux内核,其核心进程管理,内存管理,文件管理,设备管理,网络协议,驱动之类
四. Android框架
学习整体概念框架
4.1 Loader层
Boot ROM
上电后,BootRom被激活,引导芯片代码从(固化在ROM)执行,加载引导程序到RAMBootLoader 引导程序
BootLoader 是启动Android系统之前的引导程序,引导程序是厂商设定,针对特定的主板和芯片。BootLoader主要作用是检查RAM,初始化硬件参数等功能
4.2 Kernel层
Kernel 层启动流程:
1 | alps/kernel/init/main.c |
0号进程:
1 | swapper进程(pid=0):又称为idle进程,即空闲进程,由系统自动创建,运行在内核态。 |
1号进程:
1 | init进程(pid=1):由0号进程通过kernel_thread创建,在内核空间完成初始化,加载init程序,并最终运行在用户空间,init进程是所有用户进程的鼻祖 |
2号进程:
1 | kthreadd进程(pid=2):又0号进程通过kernel_thread创建,是linux系统的内核进程,会创建内核工作线程kworkder,软中断线程ksoftirqd,thermal等内核守护进程。 |
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智能指针