本章主要介绍了安卓的系统架构和体系
Android源代码查看网站:
* [Android OS](https://www.androidos.net.cn/)
* [Android XRef](http://androidxref.com )
* http://www.grepcode.com/
可以鄙人的另一篇文章[下载Android源码以及查看源码](https://www.kancloud.cn/alex_wsc/android_source/402530)
#### **Android 系统架构**:
* **Linux层:**
Linux 层, Android 最低层最核心的部分。当我们打开手机Setting ,选择about phone 边项,这一选项所显示的内核版本,就是我们所用的Linux 内核的版本。Lim以层包含了Android 系统的核心服务,包插硬件驱动、进程管理、安全系统,等等。
* **Dalvik 和 ART:**
* Dalvik好比是一辆可折叠的自行车,平时是折叠的,只有骑的时候,才需要组装起来用。Dalvik 包含了一整套的Android 运行环境虑拟机,每个App 都会分配Dalvik 虚拟机来保证互相之间不受干扰,并保持独立。它的特点是在运行时编译。
* ART好比是一辆组装好了的自行车,装好就可以骑了。在Android 5.X 版本开始, ART 模式已经取代了Dalvik , ART采用的是安装时就进行编译,以后运行时就不用编译了,
#### **Android APP组件架构:**
在应用层,Android 的App组件架构,通常就是我们所说的Android 四大组件, 指的是Activity 、BroadCastReciever、ContentProvider 和Service ,它们是组成一个Android App的最基本元素。
Android系统还提供了一个信使-Intent ,作为信息传边的载体。组件与组件之间通过Intent来通信、传递信息、交换数据,正是通过这样一种方式,四大组件形成了各自独立而又紧密联系的关系,让整个Android系统“活”了起来。
**应用运行上下文对象**
在程序中,我们可以理解为当前对象在程序中所处的一个环境,一个与系统交互的过程。
Android系统的上下文对象,即在Context中,为我们封装这样一个“语境”。Activity、Service、Application 都是继承自Context。
Android 应用程序会在如下所示的几个时间点创建应用上下文Context 。
* 创建Application
* 创建Activity
* 创建Service
当应用程序第一次启动时, Android系统都会创建一个Application对象,同时创建Application Context,所有的组件都共同拥有这样一个Context对象,这个应用上下文对象贯穿整个应用进程的生命周期,为应用全局提供功能和环境支峙。而创建Activity 和Service 组件时,系统也会给它们提供运行的上下文环境,即创建Aclivily实例、Service实例的Context对象。所以很多读者在Activity中获取Context 对象时,可以直接使用this ,而在匿名内部类中,就必须指定XXXXActivity.this才可以获得该Activity的Context对象。当然,你也可以跑过getApplicationContext()方也来获取整个App的Context,但是通过getApplicationContext()应也获得的是整个应用的上下文引用,这与某个组件的上下文引用,在某些时候还是有区别的。
#### **Android系统源代码目录:**
**要想看完整个Android的源代码,你要懂C、懂脚本、懂Java**,不仅软硬兼施,而且有一颗耐得住寂寞、忍得了枯燥的心。所以,对于大多数人来说,我们只需要了解它的框架结构,出了问题知道从哪里着手解决就可以了。
**目录结构**:
* Makefile (描述Android各个组件间的联系并指导它们进行自动化编译)
* bionic (bionic C库)
* bootable (启动引导相关代码)
* build (系统编译规则等基础开发包配置)
* cts (Google兼容性测试标准)
* dalvik (Dalvik虚拟机)
* development (应用程序开发相关)
* external (android使用的一些开源模块)
* frameworks (Framework框架核心)
* hardware (厂商硬件适配层HAL)
* out (编译完成后的代码输出目录)
* packages (应用程序包)
* prebuilt (x86和arm架构下预编译资源)
* sdk (sdk及模拟器)
* system (底层文件系统库、应用及组件)
* vendor (厂商定制代码)
>[info] 注意:并不是所有的源代码结构都是这样。只有AOSP的Android项目才是过样一个结构,有些芯片厂商如MTK,它们的同录结构就与此不同。
**Makefile 机制**
Android与很多语言一样,引入了Makefile 机制。那么Makefile到底有什么好处呢?我们先看一下对Makefile 的解释:一个像Android这样的大型工程,它的源文件不计其数,不同的功能、模块,按类型分别放置在不同的目录中,这些模块通常会有-个叫Makefile的文件来进行管理。它定义了一系列的规则来指定模块,哪些文件需要编译,以及这些文件该按照怎样的顺序去编译。甚至,它还可以配置更复杂的功能操作,比如定义编译规则,打包规则等,因为Makefile 就像一个shell脚本,不仅可以使用自己的语法, 也能调用操作系统的命令。
可以看到, Makefile最大的好处就是自动化编译,同时还可以做到可控制的编译,Android通过Makefile来描述Android各个组件间的联系并指导它们进行自动化编译。Makefile的语法,指定了各个源代码该如何连接并生成相应的可执行徨序。这时候大家再来看看我们前面列出的Android源代码目录结构,每个目录中,还会包含更多的日录,而它的每一个最小的功能单位的目录下,都会有-个Makefile文件, 这样每一级向上,通过过样一个个Makefile文件,就把整个源代码有条不紊地联系在一·起了。
#### **Android系统目录**:
* /system/app/ 存放一些系统的app
* /system/bin/ 存放的主要是Linux自带的组件
* /system/build.prop/ 系统的属性信息
* /system/fonts/ 系统字体存放目录 root后可下载TTF格式字体替换原字体,达到修改系统字体的效果
* /system/framwork/ 系统核心文件、框架层
* /system/lib/ 存放几乎所有共享库(.so)文件
* /system/media/ 系统提示音和系统铃声
* /system/usr/ 保存用户的配置文件
* /data/app/ 包含用户的大部分数据信息、用户安装的app和升级的app
* /data/data/ 包含app的数据信息、文件信息、数据库信息等,以包名的方式来区分各个应用
* /data/system/ 手机各项系统信息
* /data/misc/ 保存大部分wifi和vpn信息
本章对于开发的内容介绍的不多 就写这么多了!