🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
本章主要介绍了安卓的系统架构和体系 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信息 本章对于开发的内容介绍的不多 就写这么多了!