Android层次架构

本文详细介绍了Android的四层架构:应用程序层、应用程序框架层、系统运行库层和Linux核心层,涵盖各层的主要功能和组件,如Activity、Content Providers、Dalvik虚拟机以及Linux内核的Binder和电源管理等。

一直以来对于android 的架构层次只是简单的知道分为那几个层次,并没有太大的关注内部的一些东西,今天花了点时间又看了看,便随手记录了下。

Android开源和兼容性技术负责人Dan Morrill在Android开发手册兼容性部分所解释的,“Android并不是传统的Linux风格的一个规范或分发版本,也不是一系列可重用的组件集成,Android是一个用于连接设备的软件块。‘’具体看看每个层次吧。

1

android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和linux核心层。
蓝 色的代表java程序,黄色的代码为运行JAVA程序而实现的虚拟机,绿色部分为C/C++语言编写的程序库,红色的代码内核(linux内 核+driver)。在Application Framework之下,由C/C++的程序库组成,通过JNI完成从JAVA到C的调用。

1) 应用程序
所有的应用程序都是使用JAVA语言编写的,每一个应用程序由一个或者多个活动组成,活动必须以Activity类为超类,活动类似于操作系统上的进程,但是活动比操作系统的进程要更为灵活,与进程类似的是,活动在多种状态之间进行切换。
利用JAVA的跨平台性质,基于Android框架开发的应用程序可以不用编译运行于任何一台安装有android系统的平台,这点正是Android的精髓所在。

2) 应用程序框架
应用程序的架构设计简化了组件的重用;任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块(不过得遵循框架的安全性限制)。帮助程序员快速的开发程序,并且该应用程序重用机制也使用户可以方便的替换程序组件。
隐藏在每个应用后面的是一系列的服务和系统, 其中包括;
 a.丰富而又可扩展的视图(Views),可以用来构建应用程序, 它包括列表(lists),网格(grids),文本框(text boxes),按钮(buttons), 甚至可嵌入的web浏览器。
 b.内容提供器(Content Providers)使得应用程序可以访问另一个应用程序的数据(如联系人数据库), 或者共享它们自己的数据。
 c.资源管理器(Resource Manager)提供非代码资源的访问,如本地字符串,图形,和布局文件(layout files)。
 d.通知管理器(Notification Manager)使得应用程序可以在状态栏中显示自定义的提示信息。
 e.活动管理器(Activity Manager)用来管理应用程序生命周期并提供常用的导航回退功能。

3) 系统运行库
 a)程序库
    Android包含一些C/C++库,这些库能被Android系统中不同的组件使用。它们通过Android应用程序框架为开发者提供服务。
    以下是一些核心库:
    主要包括基本的C库、以及多媒体库以支持各种多媒体格式、位图和矢量字体、2D和3D图形引擎、浏览器、数据库支持。
 1.Bionic系统C库。
 2.媒体库,基于PacketVideo OpenCORE。
 3.Surface Manager 顾名思义,用于管理Surface。
 4.Webkit,LibWebCore 浏览器,基于Webkit引擎。
 5.SGL 底层的2D图形引擎
 6.3D libraries 基于OpenGL ES 1.0 APIs实现
 7.FreeType 位图(bitmap)和矢量(vector)字体显示。
 8.SQLite 一个对于所有应用程序可用,功能强劲的轻型关系型数据库引擎。
 
   另外这里还有一个硬件抽象层。其实Android并非所有的设备驱动都放在linux内核里面,有一部分实现在用户空间,
   这么做的主要原因是可以避开Linux所遵循的GPL协议,一般情况下如果要将Android移植到其他硬件去运行,
   只需要实现这部分代码即可。包括:显示器驱动,声音,相机,GPS,GSM等等。
 
  b)Android 运行库
  Android 包括了一个核心库,该核心库提供了JAVA编程语言核心库的大多数功能。
  每一个 Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。
  Dalvik被设计成一个设备可以同时高效地运行多个虚拟系统。    
  Dalvik虚拟机执行(.dex)的Dalvik可执行文件,该格式文件针对小内存使用做了优化。
  同时虚拟机是基于寄存器的,所有的类都经由JAVA编译器编译,然后通过SDK中的 "dx" 工具转化成.dex格式由虚拟机执行。
  Dalvik虚拟机依赖于linux内核的一些功能,比如线程机制和底层内存管理机制。
  
4) Linux 内核
Android 的核心系统服务依赖于 Linux 2.6 内核 ,如安全性,内存管理,进程管理, 网络协议栈和驱动模型。 
Linux 内核也同时作为硬件和软件栈之间的抽象层。其外还对其做了部分修改,主要涉及两部分修改:
   a)Binder   
  (IPC):提供有效的进程间通信,虽然linux内核本身已经提供了这些功能,但Android系统很多服务都需要用到该功能,为了某种原因
  其实现了自己的一套。
   b)电源管理:为手持设备节省能耗。

 

最后在谈谈Android所采用的语言,其应用开发采用java语言,我们所说的java一般包含三个部分:
a) java语言:即其语法,其写代码的程式
b) java虚拟机:为了实现一次编译到处可以运行的原则,java在编译连接以后并没有产生目标机器语言,而是采用了Java bytecode
    这种Java共用指令,这时就需要一个虚拟机来执行改指令。
c) 库:跟我们常用的C语言一样提供一些常用的库
后两者结合就是Java Runtime Environment。

<think>我们被要求回答关于Android系统架构分层图解的问题。根据引用[1],Android基于Linux内核,并增加了自己的驱动程序。分层架构的好处是上层使用下层提供的服务,同时屏蔽下层细节的变化。 引用[1]中提到:Android系统架构(图解)。Android基于Linux提供核心系统服务,例如安全、内存管理、进程管理、网络堆栈、驱动模型。除了标准的Linux内核外,Android还增加了内核的驱动程序,如Binder驱动等。Linux内核作为硬件和软件之间的抽象层,为上层提供统一的服务。 此外,引用[2]提到分层架构是“整洁面向对象分层架构”,每一层都依托在其下层之上,上层使用下层的服务,而下层对上层一无所知。 根据Android官方文档,Android系统架构通常被分为五层(从上到下): 1. 应用层(Applications) 2. 应用框架层(Application Framework) 3. 系统运行库层(Libraries)和Android运行时(Android Runtime) 4. 硬件抽象层(HAL) 5. Linux内核层(Linux Kernel) 但是,引用[1]中提到的分层是: - Linux内核层(包括Android增加的驱动) - 硬件抽象层(在引用中没有明确提到,但在其他资料中,HAL是位于内核和系统库之间的一层,用于避免直接使用内核驱动,提供标准接口) - 系统运行库层(包括各种库和Android运行时) - 应用框架层 - 应用层 然而,引用[1]中并没有明确划分出硬件抽象层(HAL),但根据Android官方架构,HAL是存在的。因此,我们结合引用[1]和官方资料,将Android架构分为以下五层: 1. **应用层(Applications)**:包含所有安装在设备上的应用程序,如系统自带的联系人、短信等应用,以及用户自己安装的应用。 2. **应用框架层(Application Framework)**:提供开发Android应用所需的高级API,包括活动管理器(Activity Manager)、窗口管理器(Window Manager)、内容提供者(Content Providers)、视图系统(View System)、通知管理器(Notification Manager)等。开发者通过这一层与Android系统交互。 3. **系统运行库层(Libraries)和Android运行时(Android Runtime)**: - **系统运行库(Libraries)**:包含一组C/C++库,如Surface Manager(管理显示子系统)、Media Framework(媒体框架)、SQLite(数据库引擎)、OpenGL ES(3D图形库)等。 - **Android运行时(Android Runtime)**:在Android 5.0之前,使用的是Dalvik虚拟机,之后改为ART(Android Runtime)。ART负责运行应用程序。每个应用都在自己的进程中运行,拥有自己的ART实例。ART执行的是Dalvik可执行文件(DEX格式),该格式专为内存和电池效率优化。 4. **硬件抽象层(Hardware Abstraction Layer, HAL)**:HAL提供标准接口,将硬件驱动与Android框架分离。这样,硬件厂商可以针对设备实现特定的功能,而无需修改上层代码。例如,相机HAL、音频HAL等。 5. **Linux内核层(Linux Kernel)**:Android基于Linux内核,提供核心系统服务,如安全、内存管理、进程管理、网络堆栈、驱动模型等。Android对Linux内核进行了增强,添加了如Binder(IPC)驱动、电源管理、摄像头驱动等。 分层架构的好处是,每一层都为其上层提供服务,同时隐藏实现细节。这样,当底层发生变化时,上层不需要改变,符合“高内聚、低耦合”的设计原则[^1][^2]。 因此,我们可以用以下图解来表示Android系统架构分层(从上到下): ``` +------------------------+ | 应用层 | (Applications: 系统应用和第三方应用) +------------------------+ | 应用框架层 | (Application Framework: Activity Manager, Window Manager, etc.) +------------------------+ | 系统运行库层 | (Libraries: OpenGL, SQLite, etc.) | 和Android运行时 | (Android Runtime: ART) +------------------------+ | 硬件抽象层(HAL) | (Hardware Abstraction Layer) +------------------------+ | Linux内核层 | (Linux Kernel with Android drivers) +------------------------+ ``` 注意:在引用[1]中,图形系统(如显示驱动)是在Linux内核层中提到的,而在分层中,图形相关的库(如OpenGL)属于系统运行库层。同时,硬件抽象层(HAL)在引用[1]中没有明确提及,但在Android官方架构中是重要的一层,它位于内核和系统运行库之间,为上层提供统一的硬件访问接口。 另外,引用[3]和[4]分别提到了四大组件和相机系统架构,但这里我们主要关注整体分层,因此不深入展开。 综上所述,Android系统架构分为五层,每一层都依赖于下一层,并为其上层提供服务。</think>### Android系统架构分层图解 Android系统采用分层架构设计,各层职责明确,上层依赖下层服务,下层对上层透明。根据官方文档和核心引用[^1][^2],Android架构主要分为以下五层(从上到下): #### 1. **应用层(Applications)** - **功能**:包含所有用户可见的应用程序,如系统自带应用(电话、短信)和第三方应用。 - **特点**:通过标准API与下层交互,完全独立于硬件细节。 - **组件**:Activity、Service、BroadcastReceiver、ContentProvider(四大组件)[^3]。 #### 2. **应用框架层(Application Framework)** - **功能**:提供开发APP所需的高级API(如活动管理器、通知管理器)。 - **核心服务**: - `ActivityManager`:管理应用生命周期(启动/销毁Activity)[^3]。 - `WindowManager`:管理窗口视图。 - `ContentProvider`:跨应用数据共享[^3]。 - **设计原则**:通过Binder IPC驱动与下层通信[^1]。 #### 3. **系统运行库层(Libraries & Android Runtime)** - **原生库(Native Libraries)**: - `OpenGL ES`:3D图形渲染。 - `SQLite`:轻量级数据库。 - `Media Framework`:音视频编解码。 - **Android Runtime**: - **ART虚拟机**(Android 5.0+):取代Dalvik,执行DEX字节码,支持AOT编译提升性能。 - **核心库**:提供Java API功能(如文件I/O、网络)。 #### 4. **硬件抽象层(HAL)** - **功能**:为标准Linux内核驱动提供统一接口,屏蔽硬件差异[^1][^4]。 - **关键模块**: - 相机HAL(Camera HAL):连接Camera2 API与驱动[^4]。 - 音频HAL、传感器HAL。 - **优势**:硬件厂商只需实现HAL接口,无需修改上层框架。 #### 5. **Linux内核层(Linux Kernel)** - **基础**:基于Linux内核(安全性、进程管理、内存管理)。 - **Android增强驱动**: - `Binder IPC`:跨进程通信核心[^1]。 - `电源管理`:优化电池使用。 - `显示/输入驱动`:触控、屏幕渲染。 - **作用**:直接管理硬件(CPU、内存、I/O设备)。 ### 分层架构优势 - **高内聚低耦合**:每层仅依赖下层服务,下层变化不影响上层[^2]。 - **硬件兼容性**:HAL层隔离硬件差异,简化设备适配[^4]。 - **开发效率**:应用层开发者无需关注底层实现。 ### 架构图解 ```plaintext +-------------------------------------+ | 应用层 (Applications) | → 用户交互界面 | (系统应用: 电话/短信;第三方应用) | +-------------------------------------+ | 应用框架层 (Framework) | → 提供API(ActivityManager等) | (Activity, Service, ContentProvider)| +-------------------------------------+ | 系统运行库层 (Libraries & ART) | → 原生库 + ART虚拟机 | (OpenGL, SQLite, Media Framework) | +-------------------------------------+ | 硬件抽象层 (HAL) | → 标准化硬件接口 | (Camera HAL, Audio HAL, Sensor) | +-------------------------------------+ | Linux内核层 (Kernel) | → 核心驱动(Binder, 电源管理等) | (进程调度, 内存管理, 网络协议栈) | +-------------------------------------+ ↓ 物理硬件层 (CPU, 摄像头, 传感器等) ``` ### 引用说明 - **Linux内核与驱动**:Android扩展了标准Linux内核,添加Binder等专用驱动以支持移动设备特性[^1]。 - **HAL层价值**:相机系统通过HAL实现Camera2 API与硬件解耦,提升灵活性和性能[^4]。 - **组件通信**:四大组件(如Activity与Service)通过Binder IPC跨进程协作[^3]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值