最近在学习design library里面新的控件和布局的时候,看到运行原理涉及到content等的时候就会看不下去了,因为不知道系统运行原理,所以不知道这么去理解它处在哪一层,操作的是什么东西。所以抽时间来学习下整体的运行原理:系统结构,启动流程,activity,view的加载,以及他们之间的关系。
系统架构
首先看下系统结构图
从上到下分别为:应用层,框架层,系统库层,硬件抽象层,内核。
应用层:手机里面的所有应用,就是系统和用户的直接交互的层面。
框架层:为开发人员提供开发应用所需要的api,这一层由java编写。
Activity Manager(活动管理器) 管理各个应用程序生命周期以及导航回退功能。
Location Manager(位置管理器) 提供地理位置以及定位功能服务
Package Manager(包管理器) 管理所有安装在系统中的应用程序
Notification Manager(通知管理器)管理应用程序在状态栏显示自定义信息
Resourse Manager(资源管理器) 提供应用程序使用的所有非代码资源(本地化的字符串、图片等)
Telephone Manager(电话管理器) 管理移动设备功能
Window Manager(窗口管理器) 管理所有的窗口
Content Providers(内容提供者) 使得不同应用程序之间可以共享数据
View System(视图系统) 构建应用程序的基本组件
使用java通过jni调用C/C++库实现特定功能并对特定的功能模块进行封装,方便开发应用时调用
系统运行库层分为两部分:
1 C/C++程序库:C/C++程序库能被Android中不同的组件使用,通过应用程序框架为开发者提供服务
OpenGL ES 3D绘图函数库
Libc 为基于linux的设备定制的从BSD继承来的标准C系统函数库
Media FrameWork 多媒体库,用于视频音频编码和解析
SQLite 轻型的数据库引擎
SGL 底层的2D图形渲染引擎
SSL 安全套接层,保护网络安全和数据完整性
FreeType 可移植的字体引擎,提供统一接口访问多种字体格式文件
使用内核驱动硬件完成各种操作和渲染。
2 android运行时库
运行时库分为核心库和ART。核心库提供java语言核心库的大多数功能,这样就用java语言写出来的代码才能被识别。ART在安装应用时,把应用编译成机器码,能运行应用。对java代码的识别和编译。
Linux 内核层
Android的核心系统服务基于简化的linux内核,在此基础上添加了Android专用的驱动。系统安全,内存管理,进程管理,网络通信,驱动等都依赖于内核。通过硬件抽象层来驱动和使用硬件。
硬件抽象层
硬件抽象层是位于操作系统内核与硬件电路之间的接口层,目的是通过硬件的抽象化隐藏特定平台的接口细节来保护硬件厂商的知识产权,隐藏了接口细节保护了自己的代码也防止了硬件结构被他人知道。硬件抽象层控制着硬件的运行。暴露操作硬件的接口。
各层之间的逻辑是这样的,我是用我肤浅的见解来谈的,不对之处还望指正:
首先使用java编写应用代码,实现各种逻辑。java实现的逻辑是在运行时由运行时库来解析;逻辑之间连接的节点需要做的事情,都需要调用各种管理器进行操作,从而实现特定的功能;各种管理器也是由java编写的,使用java实现逻辑,逻辑节点的功能调用C/C++库进行实际的实现,管理器只暴露调用的接口给应用调用。
linux kernel调用硬件抽象层的接口驱动着机器,C/C++库调用驱动接口完成功能,框架层使用java通过jni调用C/C++库接口完成特定的功能块,应用调用框架接口实现具体的功能。
系统目录
android7.0完整目录,不同系统版本都是类似的
应用层文件:
从目录可以看出系统应用和第三方应用输入法应用等都在此
应用层框架目录
框架都是实现某种功能模块。
C/C++库目录
C/C++程序目录位置。