学习自
《Android进阶解密》
架构
Framework层暴露给应用层的能力
- Activity Manager:管理各个应用生命周期,以及常用的导航回退功能
- Location Manager
- Package Manager:管理所有安装的App
- Notification Manager
- Resource Manager
- Telephony Manager
- Window Manager
- Content Provider
- View System:UI绘制系统
以上只是暴露的API,其实现非常复杂,Framework的很多一部分还是C实现的
运行时
C支持库
- OpenGL ES:3D渲染
- Libc:嵌入式Linux专用C支持库
- Media Framework
- SQLite
- SGL:2D渲染
- SSL
- FreeType:字体引擎
运行时库 = Java核心库能力 + 虚拟机
5.0以前是Dalvik,5.0后是ART
Dalvik区别于JVM,专门为移动端定制,每个进程都是一个Dalvik虚拟机
Dalvik的应用每次运行时,都通过JIT,把字节码转换为机器码
ART的应用,在安装时,用AOT,一次把所有字节码转换为机器码
前者运行慢,后者安装慢
在后来的版本,出现了混合编译,各取所长
硬件抽象
这一层是操作系统内核、硬件电路之间的接口层
抽象了硬件
一来屏蔽不同设备上硬件的差异
而来保护硬件厂商的知识产权
Linux内核
在Linux内核的基础上,定制了移动端的各个驱动
Android系统的安全、内存管理、进程管理、网络协议栈、驱动模型都依赖这一层
源码根目录
art
bionic:系统C库
bootable:启动引导相关代码
build:系统编译规则、generic等基础开发包配置
cts:兼容性测试套件标准
dalvik
developers
development
device
docs:
external:开源模组
frameworks
hardware
libcore
libnativehelper:实现JNI库的基础
out
pdk:本地开发套件
platform_testing
prebuilts:X86和ARM架构下预编译的一些资源
sdk
packages:应用层
system
toolchain
tools
makefile
应用层目录
apps
experimental:三方程序
inputmethods:输入法
providers
screensavers:屏幕保护
services
wallpapers
应用框架层目录
api
core
docs
include
libs
media
nfc-extras:与NFC相关
opengl
sax
telephony
tests
vr
cmds
data:字体、声音等数据文件
graphics
keystore
location
native
obex:蓝牙
packages:设置、TTS、VPN等
services
test-runner
tools
wifi
C/C++程序库目录
bionic:Google开发的系统C库,以BSD许可形式开源
frameworks/av/media
frameworks/native/opengl
frameworks/native/services/surfaceflinger
external/splite
手机厂商最倾向于改动art/和hardware/目录
收获
阅读并理解抽象的Android系统架构图
看似无用,实则有用
看似简单,实则困难
随着对Android理解的加深,对Android架构的认识也会发生变化
建议在不同的学习阶段,都要温故此图,并得到更新的理解
后记
有什么写得错误、让人费解或遗漏的地方,希望可以不吝赐教,我会马上更改