android详细架构和作用,安卓架构/分区理解/作用

[toc]目录

安卓架构图

谷歌官方架构图

大概安卓架构图

从上到下依次为:

核心应用层:

这一层就是大家平常所接触的各种各样的系统自带应用,比如联系人,电话,音乐等。应用层往下就是开发人员所接触的。

框架层(framework):

这一层是Android系统的核心,它提供了整个Android系统运作的机制,像窗口管理,程序安装包管理,开发人员所接触的Activity, Service, broadcast等等。

JNI层:

JNI层是Java程序和底层操作系统通信的一个机制,它使得Java代码可以调用C/C++代码来访问底层操作系统的API。

Dalvik/Art虚拟机:

Android开发使用Java语言,应用程序的Java代码会被编译成dex虚拟机字节码,这些字节码由虚拟机解释执行。

本地库:

本地库一般是由C/C++语言所开发,直接编译成相应CPU的机器码,这其中包含标准C库,用以绘制图形的skia库,浏览器核心引擎webkit等。

HAL:

硬件抽象层,为了和各个厂家的不同硬件工作,Android定义了一套硬件接口,比如说为了使用相机,厂家的相机驱动必须提供的接口方法。这样使得上层的代码可以独立于不同的硬件运行。

厂家适配层:

本来Android定义的HAL层是直接和厂家提供的设备驱动打交道的,但是目前厂家不想开源HAL部分的代码,因此很多厂家都提供了一个我称之为厂家适配层的代码,这样在HAL层接口的实现只是一个简单的对厂家适配层接口函数的调用。

内核:

这一层就是大家熟悉的Linux内核,内核中包含有各种硬件驱动,这些驱动不同的手机厂商不同的手机是不一样的。Linux内核是支持驱动模块化机制的,简单的说就是允许用户动态的加载或者卸载某个硬件驱动,但是目前来看,手机厂商除了提供WIFI驱动单独加载外,其它驱动都是和内核绑定在一起的。

安卓分区

常用分区

fastboot:

fastboot是android定义的一种简单的刷机协议,用户可以通过fastboot命令行工具来进行刷机。比如说fastboot flash boot boot.img这个命令就是把boot.img的内容刷写到boot分区中

recovery:

recovery是android定义的一个标准刷机协议。当进入recovery模式时,secondary stage bootloader从recovery分区开始启动,recovery分区实际上是一个简单的Linux系统,当内核启动完毕后,开始执行第一个程序init(init程序是Linux系统所有程序的老祖宗)。init会启动一个叫做recovery的程序(recovery模式的名称也由此而来)。通过recovery程序,用户可以执行清除数据,安装刷机包等操作。一般的手机厂商都提供一个简单的recovery刷机

在正常分区或内核分区被破坏,不能正常启动时,可以进入此分区进行恢复,在此分区可以执行adb 命令他相当与一个简易的OS或blos,可以认为是一个boot分区的替代品,通过他可以让我们在这一分区进行备份维护和恢复,我们常说的三方rec就是将替换系统的recovery替换成自己的。

boot:

此分区可以保证手机正常启动,他包含了kernel(内核) 和 ramdisk(虚拟内存盘:通过软件将一部分内存(RAM)模拟为硬盘来使用的一种技术,可以极大的提高在其上进行的文件访问的速度),如果没有此分区,手机通常不能正常启动。只有必要的时候,才去通过Recovery软件擦除(format)这个分区,一旦擦除,设备只有再重新安装一个新的boot分区,可以通过安装一个包含boot分区的ROM来实现,否则无法启动安卓系统。

system:

此分区用来存放除kernel和ramdisk以外的系统相关配置,他包括了用户界面、手机预装的软件等。擦除这个分区将会删除整个系统,但不会导致不能启动。

详细介绍一下system目录下的各种文件作用:

/system/priv-app

特权App,比system_app权限还要高,其不仅System_app标识是true,同时还置了Priv-app标识。

/system/app

核心应用程序档(*.apk: Android应用程序包),都是放在这。像是Phone、Alarm Clock, Browser, Contacts 等等。

/system/framework

这里放 Android 系统的核心程序库,就是上图中application framework部分的库。像是core.jar, framework-res.apk, framework.jar等等。

system/lib

存放Library部分的库,存放的是所有动态链接库(.so文件),这些.SO是JNI层,Dalvik虚拟机,本地库,HAL层所需要的,因为系统应用/system/app下的apk是不会解压的SO到程序的目录下,所以其相应用的SO,都应放在/system/lib 下面。当一个系统apk的SO加载时,会从此目录下寻找对应用的SO文件(比如libc.so,libart.so);

/system/media/audio/(notification, alarms, ringtones, ui)

这里放系统的声音档,像是闹铃声,来电铃声等等。这些声音档,多是 ogg 格式。

/system/bin

存放的是一些可执行文件,基本上是由C/C++编写的。比如存放安卓启动需要的一些文件app_process(解析Zygoto启动文件)。还有些 命令行 或者 adb 执行的文件比如 cat 命令

system/xbin

存放的是一些扩展的可执行文件,既该目录可以为空。很多Root的手机 就是通过在这个目录或者在bin目录添加su文件来获取Root权限

system/build.prop

属性配置文件。它们都定义了一些属性值,代码可以读取或者修改这些属性值。属性值有一些命名规范:

ro开头的表示只读属性,即这些属性的值代码是无法修改的。

persist开头的表示这些属性值会保存在文件中,这样重新启动之后这些值还保留。

其它的属性一般以所属的类别开头,这些属性是可读可写的,但是对它们的修改重启之后不会保留。

一般手机型号,Cpu,硬件信息 之类的配置文件都保存在这里。

system/etc

目录存放一些配置文件,和属性配置文件不一样,这下面的配置文件可能稍微没那么的有规律。一般来说,一些脚本程序,还有大家所熟悉GPS配置文件(gps.conf)和APN配置文件(apns-conf.xml)放在这个目录。

data:

也叫Userdata分区,此分区包含了用户的数据信息,如:联系人、短信、设置、用户安装的程序的,擦除此分区,相当于手机恢复出厂设置。

cache:

此分区是安卓系统缓存区,他保存系统最常访问的数据和应用程序。擦除这个分区,不会影响个人数据,只是删除了这个分区中已经保存的缓存内容,缓存内容会在后续手机使用过程中重新自动生成。

bootload:

刷机主要分区,有对应的刷机命令 ,可以在这个分区对其他分区进行操作起到刷机的目的

(比如刷入三方Rec就是替换在此分区下进行的)

常用命令有:

adb devices——查看手机是否连接上

adb reboot bootloader——将手机重启到Fastboot模式

fastboot devices——查看Fastboot模式下连接的手机

刷入不同分区的命令:

fastboot flash system system.img

fastboot flash boot boot.img

fastboot flash radio radio.img

fastboot erase frp # 擦除 frp 分区,frp 即 Factory Reset Protection,用于防止用户信息在手机丢失后外泄

fastboot format data # 格式化 data 分区

fastboot flashing lock # 设备上锁,刷机完毕

fastboot continue # 自动重启设备

modem:

实现手机必需的通信功能,大家通常所的刷RADIO就是刷写modem分区,在所有适配的ROM中这部分是不动,否则会造成通话不稳定;

misc:

此分区包含了一些系统设置和系统功能启用禁用的相关设置。这些设置包括CID(运营商或区域识别码)、USB设置和一些硬件设置等等。这是一个很重要的分区,如果此分区损坏或者部分数据丢失,手机的一些特定功能可能不能正常工作。

sdcard:

此分区为内部存储,可以存放相片、视频、文档、ROM安装包等,擦除这个分区是完全安全的

你可能感兴趣的:(android详细架构和作用)