Android 系统架构

android 源码-android四个层级与源码对应关系 **** android系统架构:应用层(system app)、应用框架层(Java API Framework)、系统运行库层(native层)、硬件抽象层(HAL)、Linux内核层。 一、应用层(system app) 应用层就是App应用程序,这里包括了系统级内嵌的App和常规开发人员的非系统级的App。 源码位置:/android/packages 二、应用框架层(Java API Framework) 应用框架层为开发应用程序提供常规的API,开发人员可以通过应用框架层开发应用,也可以称为J 阅读详情

首语

由于工作内容的转变,使得我向Android系统方向转变,对于一个Android系统工程师,了解Android整个系统架构是必然的。本篇是Android系统学习的开篇,Android系统庞大且复杂,但是能对Android的认识更深,更全面。开启Android系统之旅吧!

推荐Android系统干货博主:Gityuan

系统架构

Android系统架构分为五层。从上往下依次是应用层、应用框架层、系统运行库层、硬件抽象层和Linux内核层。

Android系统架构

应用层(System Apps)

系统内置的应用程序以及非系统级的应用程序都属于应用层,负责与用户进行直接交互。

应用框架层(Java API Framework)

应用框架层为开发人员提供了开发应用程序所需要的API,我们平成开发应用程序都是调用这一层提供的API,当然也包括系统应用。这一层是由Java代码编写的,可以称为Java Framework。

它所提供的组件如下:

名称功能描述
Activity Manager(活动管理器)管理各个应用程序生命周期,以及常用的导航回退功能
Location Manager(位置管理器)提供地理位置及定位功能服务
Package Manager(包管理器)管理所有安装在Android系统的应用程序
Notification Manager(通知管理器)使得应用程序在通知栏显示自定义的提示消息
Resource Manager(资源管理器)提供应用程序使用的各种非代码资源,如本地化字符串、图片、布局文件、颜色文件等
Telephony Manager(电话管理器)管理所有的移动设备功能
Window Manager(窗口管理器)管理所有的窗口程序
Content Provider(内容提供者)Android四大组件之一。使得不同应用程序之间共享数据
View System(视图系统)构建应用程序的基本组件
系统运行库层(Native)

从上图可以看出,系统运行库层分为两部分,分别是C/C++程序库和Android运行时库。

C/C++程序库

C/C++库被Android系统中的不同组件使用,并通过应用程序框架为开发者提供服务。以下为主要的C/C++程序库:

名称功能描述
OpenGL ES3D 绘图函数库
Libc从BSD继承来的标准C系统函数库,专门为嵌入式Linux的设备定制
Media Framework多媒体库,支持多种常用的音频、视频格式录制和回放
SQLite轻型的关系型数据引擎
SGL底层的2D图形渲染引擎
SSL安全套接层,是一种为网络通信提供安全及数据完整性的安全协议
Free Type可移植的字体引擎,提供统一的接口来访问多种字体格式文件
Webkit浏览器网页排版引擎,包含WebCore排版引擎和JSCore引擎。
OpenMax ALOpenMax是一个多媒体应用程序的框架标准,OpenMax分为3层:
第一层:OpenMax DL(Development Layer,开发层)
第二层:OpenMax IL(Integration Layer,集成层)
第三层:OpenMax AL(Appliction Layer,应用层)
Android运行时库

从上图可以看出,运行时库分为核心库和ART。

核心库

核心库提供了Java语言核心库的大多数功能,开发者使用Java语言编写应用程序。

ART

Android 5.0后,Dalvik虚拟机被ART取代。与JVM相比,Dalvik虚拟机(DVM)是专门为移动设备定制的,允许在有限的内存同时运行多个虚拟机的实例,并且每一个Dalvik应用作为一个独立的Linux进程执行。这样可以防止虚拟机崩溃的时候所有程序都关闭。ART与DVM的机制有所不同,DVM中的应用每次运行时,字节码都需要通过即时编译器(JIT)转化为机器码,使得应用程序运行效率降低。在ART中,系统安装应用时会进行依次预编译(AOT),将字节码预先编译成机器码并存储在本地,这样不需要每次运行执行编译,提高运行效率。

硬件抽象层(HAL)

硬件抽象层是位于操作系统内核与硬件电路之间的接口层,目的在于将硬件抽象化。为了保护硬件厂商的知识产权,它隐藏了特定平台的硬件接口细节,为操作系统提供虚拟硬件平台,使其具有硬件无关性,可在多种平台上进行移植。从软硬件测试的角度来看,软硬件的测试工作都可分别基于硬件抽象层来完成,使得软硬件测试工作的并行进行成为可能。通俗来讲,就是将控制硬件的动作放在硬件抽象层中。

Linux内核层(Linux Kernel)

Android的核心服务基于Linux内核层,这一层为android设备的各种硬件提供了底层的强大驱动,如显示驱动、音频驱动、照相机驱动、蓝牙驱动、Wi-Fi驱动、电源管理等。在此基础上添加了部分Android专用的驱动,如Binder、Alarm、Logger等。系统的安全性、内存管理、进程管理、网络协议栈和驱动模型都依赖该内核。

Android版本

版本号代号API
Android 14.0U34
Android 13.0T33
Android 12.0LS32
Android 12.0S31
Android 11.0R30
Android 10.0Q29
Android 9.0Pie28
Android 8.1Oreo27
Android 8.0Oreo26
Android 7.1.1Nougat25
Android 7.0Nougat24
Android 6.0Marshmallow23
Android 5.1Lollipop22
Android 5.0Lollipop21
Android 4.4WKitKat Wear20
Android 4.4KitKat19
Android 4.3Jelly Bean18
Android 4.2Jelly Bean17
Android 4.1Jelly Bean16
Android 4.0.3IceCreamSandwich15
Android 4.0IceCreamSandwich14
Android 3.2Honeycomb13
Android 3.1Honeycomb12
Android 3.0Honeycomb11
Android 2.3.3Gingerbread10
Android 2.3Gingerbread9
Android 2.2Froyo8
Android 2.1Eclair7

系统源码目录

关于Android源码下载,可以参考:Windows下安装Ubuntu、图形界面、下载Android源码,看这一篇就够了

目录基于Android13。

整体结构
源码根目录描述
artART运行环境
bionic系统C库
bootable启动引导相关代码
build系统编译规则及generic等基础开发包配置
ctsAndroid 兼容性测试套件标准
dalvikDalvik 虚拟机
developers开发者目录
development应用程序相关
device设备相关配置
docs参考文档
external开源模组相关
frameworks应用程序框架,Android系统核心部分
hardware硬件抽象层代码
kernel内核层,包括设备驱动、硬件抽象层、系统调用等方面的代码
libcore核心库相关文件
libnativehelper动态库,实现JNI库的基础
packages应用程序包
out编译代码输出目录,可自定义
pdkPlug Development Kit,本地开发套件
platform_testing平台测试
prebuiltsX86和ARM架构下预编译的一些资源
sdkSDK和模拟器
system底层文件系统库、应用和组件
test存放测试代码和测试工具
toolchain工具链文件
tools工具文件

还有一个重要的目录vendor,存放厂商定制代码。

应用层(packages)

应用层是Android系统的最上层,开发者开发的应用和系统内置的应用都在应用层。源码根目录中的packages目录对应着系统应用层。

packages目录描述
apps核心应用程序
modules独立、可插拔的应用程序模块
inputmethods输入法目录
providers内容提供者目录
screensavers屏幕保护
services通信服务
wallpapers壁纸
应用框架层(frameworks/base)

应用框架层是系统的核心部分,向上提供接口给应用层调用,向下与C/C++程序库及硬件抽象层进行通信,主要实现代码在frameworks/base和frameworks/av这两个目录下,frameworks的目录结构如下:

frameworks/base目录描述
apct_tests存放自动化测试相关代码及测试用例
apexAPEX(Android Package Executable)模块,一种新的Android应用打包格式,用于将系统组件和服务以及供应商组件和服务封装为单独的模块
api定义API
boot操作系统的启动代码和基本类库
cmds重要命令,如am、app_proce等
config系统的配置文件和数据结构
core核心库
data字体、声音等数据文件
docs文档
drm数字版权管理(DRM)的代码和类库
errorprone错误处理和异常处理的代码和类库
graphics图形图像有关
identity身份验证和授权的代码和类库
keystore数据签名证书相关
libs库
location地理位置相关库
media多媒体相关库
mimeMIME(多用途互联网邮件扩展)类型的定义和配置信息
mms短信和多媒体消息服务的代码和类库
native本地库
nfc-extrasNFC相关
obex蓝牙传输
omapiOMADP(Open Mobile Alliance Device Provider)的API接口和类库
opengl2D/3D图形API
packages设置、TTS、SystemUI、VPN程序等
proto系统中的各种协议和数据结构的定义和配置信息
rsRenderScript(渲染脚本)的代码和类库
samples各种示例代码和演示程序
saxxml解析器
services系统服务
startopStartOp(启动操作)的代码和类库
telecomTelecom(电话通信)的代码和类库
telephony电话通信管理
test-runner测试工具相关
tests与测试相关
tools工具
wifiWi-Fi 无线网络
C/C++程序库部分

系统运行库层的C/C++程序库的类型繁多,功能强大。以下是比较常用且重要的C/C++程序库。

目录位置描述
bionicGoogle开发的系统C库,以BSD许可形式开源
frameworks/av/media系统媒体库
frameworks/native/opengl第三方图形渲染库
frameworks/native/services/surfaceflinger图形显示库,负责图形渲染、叠加和绘制功能
external/sqlite轻量级关系型数据库SQLite的C++实现

源码阅读

源码阅读有在线阅读和本地阅读两种方式。在线阅读推荐官方:https://cs.android.com

本地阅读就是将代码下载到本地,然后通过Android Studio去阅读。以下是阅读环境配置:

1.更改内存设置,把内存调整到8GB及以上

2.在源码根目录,编译idegen模块

source build/envsetup.sh
mmm development/tools/idegen/

编译成功后在 /out/host/linux-x86/framework 目录下会生成 idegen.jar 文件。

3.执行sh脚本,它将使用这个jar生成所需的 .ipr 文件:

development/tools/idegen/idegen.sh

成功后,源码根目录可以找到 android.iml 和 android.ipr 两个文件,用Android Studio打开 android.ipr文件即可,等待一段时间的扫描就可以了。

总结

以上都是学习Android系统源码的必备基础,掌握它们才能更好的深入学习Android系统源码,如有问题欢迎批评指正。后续会学习Android系统启动、AMS、WMS等源码,真正走进Android系统源码的世界。

【新手入门】Android基础知识(一):系统架构 摘要:Android系统采用分层架构设计,底层以Linux内核为基础,提供安全、内存管理等核心服务。硬件抽象层(HAL)封装驱动细节,原生C/C++库提供图形渲染、多媒体等关键功能。Android运行时(ART)通过预编译优化应用性能。Java API框架层为应用开发提供Activity管理、UI组件等核心服务。应用层包含系统应用和第三方应用,通过SDK接口开发。各层通过系统调用和JNI技术实现互联,形成完整的Android生态系统。 阅读详情

相关推荐

Framework学习(一)Android 系统架构,安卓开发中遇到最难的问题

自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…

2401_84149381的博客 1087

Android系统架构

Android系统架构 Android系统架构分为五层,从下到上依次是应用层、应用框架层、系统运行库层、硬件抽象层和Linux内核层。 应用层(System Apps) 系统内置的应用程序以及非系统级别的应用程序都属于应用层,负责与用户进行直接交互,通常都是用Java进行开发的。 应用框架层(Java API Framework) **应用框架层是为开发人员提供了开发应用程序所需要的API,**我们平时开发应用程序都是调用着一层所提供的API,当然也包括系统应用。这一层是由Java代码编写的,可以称为Ja

xingyu19911016的博客 1万+

Windows加域迁移避坑指南:Profwiz工具实战中的5个常见问题与解决方案

本文详细解析了使用Profwiz工具进行Windows加域迁移时的5个常见问题及解决方案,包括临时配置文件生成、密码策略冲突、SID冲突等。通过实战案例和优化技巧,帮助IT运维团队高效完成账户配置文件迁移,确保Active Directory环境下的数据完整性和权限无缝衔接。

q9r0s的博客 512

Android系统架构简介

Android系统架构价绍

byte轻骑兵的技术小窝 1万+

电化学阻抗谱(EIS)在锂离子电池中的应用

摘要电化学阻抗谱(electrochemical impedance spectroscopy, EIS)是一种重要的电化学测试方法,在锂离子电池动力学反应机理研究及动力学参数测量等方面具有广泛的应用。在锂离子电池运行过程中,各反应步骤的动力学参数及时间常数不同,而EIS可以在较宽的频率范围内对体系施加小幅正弦激励信号,使得在特定频率下突出特定时间常数的电极过程,从而将复杂的电极过程分离,实现单一电极过程动力学的分析。通过对交流阻抗信息的研究,也可以为锂离子电池及其他电池的应用与管理、电化学过程设计及电极材

qiushireader的博客 2649

Libero SoC v2021.1离线安装与IP核配置全攻略

本文详细介绍了Libero SoC v2021.1在离线环境下的完整安装与配置流程。核心内容包括如何选择正确的离线安装包、获取并配置许可证、安装与挂载MegaVault IP库,以及将ModelSim仿真器切换至免费SE模式的关键步骤。文章旨在帮助内网开发者避开常见陷阱,顺利完成FPGA开发环境的搭建。

weixin_29279101的博客 406

安卓进阶之android系统架构

安卓进阶知识之android系统架构学习的笔记,结合了《进阶之光》、一些博客、官方文档和个人的理解

Suzy_MM的博客 3347

VINS-Fusion实战:从零搭建无人机视觉SLAM系统(附ROS配置全流程)

本文详细介绍了如何从零开始为无人机搭建基于VINS-Fusion的视觉SLAM系统。内容涵盖硬件选型(重点推荐双目相机与IMU搭配)、ROS环境配置、传感器标定、核心参数调优以及实际飞行测试与问题排解全流程,旨在帮助开发者实现稳定、精确的无人机自主定位与导航。

wasm7browser的博客 213

【Android面试八股文】Android系统架构【一】

Android系统架构。

2501_90212852的博客 979

知识存储之Apache Jena

知识图谱的存储可以分为基于表结构的存储和基于图结构的存储。1️⃣基于表结构的存储基于表结构的存储利用二维的数据表对知识图谱中的数据进行存储。根据不同的设计原则,知识图谱可以具有不同的表结构:💨知识图谱实质上是一个个的三元组,一种简单直接的存储方式是设计一张三元组表用于存储所有三元组,有不少比较成熟的产品利用该形式存储知识图谱,包括Jena、Oracle、Virtuoso等。💨为每种类型构建一张表,同一类型的实例存放在相同的表中。

Puzzle的博客 6064

传统方式部署 Hadoop 高可用集群

传统方式部署 Hadoop 高可用集群

寂夜了无痕的博客 265

安卓Android的系统架构详细解析

Android 是Google开发的基于Linux平台的开源手机操作系统。它包括操作系统、用户界面和应用程序 —— 移动电话工作所需的全部软件,而且不存在任何以往阻碍移动产业创新的专有权障碍。Android采用WebKit浏览器引擎,具备触摸屏、高级图形显示和上网功能,用户能够在手机上查看电子邮件、搜索网址和观看视频节目等,比iPhone等其他手机更强调搜索功能,界面更强大,可以说是一种融入全部W

Android小家 1万+

海康VisionMaster与西门子PLC1200进行S7通信

通信是连通算法平台和外部设备的重要渠道,在海康VisionMaster算法平台中既支持外部数据的读入也支持数据的写出,当通信构建起来以后既可以把软件处理结果发送给外界,又可以通过外界发送字符来触发相机拍照或者软件运行。 本文以西门子PLC1200作为外部设备为例,讲解海康VisionMaster与西门子PLC1200进行S7通信。......

haier123888的博客 1万+

【Android】Android系统性学习——Android系统架构

部分内容参考《Android进阶解密》 – 刘望舒。

xuanyulevel6的博客 1万+

Vibe Writing 手把手教程:Obsidian + Claudian + Skill

本文介绍了Vibe Writing的实操教程,主要使用Obsidian+Claudian+Skill组合。教程包含工具安装配置(Obsidian、Claudian插件)、核心工作流(选题-调研-写作-发布)和效果对比。重点展示了Claude Code生成的文本更具"人味"和场景感,优于其他AI工具。作者强调工具只是辅助,内容灵魂仍需个人思考积累。附有公众号排版和全网发布工具推荐,以及自动配图生成方案。

296

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Android系统架构概述

目录: 1、Android系统架构 2、Android类库 3、四大组件 Android技术交流群653583088,加入立即免费领取如何让【你的Android系统框架优雅十倍】资料 1、Android系统架构 从架构图看出架构分为五个部分,由下往上依次为: Linux Kernel:Android基于Linux提供核心系统服务,例如:安全、内存管理、进程管理、网络堆栈、驱动模型。Linux Kernel也作为硬件和软件之间的抽象层,它隐藏具体g硬件细节而为上层提供统一的服务。 Android Runtim

m0_57767600的博客 424

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Android系统架构-[Android取经之路]

系列文章: [1] Android系统架构 [2]Android是怎么启动的 [3]Android 10.0系统启动之init进程 [4]Android10.0系统启动之Zygote进程 [5]Android 10.0 系统启动之SystemServer进程 [6]Android 10.0 系统服务之ActivityMnagerService [7]Android10....

IngresGe 的专栏 2万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

1 Android系统架构与分层

android系统架构与分层如下: 图1 android系统架构与分层 软件从底层到上层分为:Uboot,Linux Kernel和Android OS。 1 Uboot 将flash中的kernel搬到内存,引导kernel的启动;而cpu会引导uboot的启动,cpu中有一段固化的rom,可以从usb,sdcard,flash中引导uboot启动。 2 Linux Kernel 将底层硬件抽象为文件,向上提供接口。 3 Android OS 从底层到上层分为: 3.1 H

u012906122的专栏 4809

python 安卓应用层_Android 系统架构的演变历程

Android是一种以Linux与JAVA为基础的开放源代码操作系统。Android分为应用层、应用框架层、系统运行库层和Linux内核层。今天大家一起来大致回顾一下Android系统架构的演变历程。一、android和linux内核Android是基于Linux内核的操作系统,但是它与Linux之间还是有很大的差别,比如Android在Linux内核的基础上添加了自己所特有的驱动程序。Andro...

weixin_39623244的博客 241

Android快速入门 基础知识,系统架构(快速开发第一个安卓应用程序)

尤其是非计算机专业的同学,面试官一上来肯定是问你基础,要是基础表现不好很容易被扣上基础不扎实的帽子,常见的就那些,只要你平时认真思考过基本上面试是没太大问题的。,尤其是非计算机专业的同学,面试官一上来肯定是问你基础,要是基础表现不好很容易被扣上基础不扎实的帽子,常见的就那些,只要你平时认真思考过基本上面试是没太大问题的。,全部都是精华中的精华,我能面试到现在2-2资深开发人员跟我整理的这本Android核心知识点有密不可分的关系,在这里本着共赢的心态分享给各位朋友。

m0_60388292的博客 1504

【Android】Android系统架构

简介Android系统结构

byadom_IT的博客 974
上一篇: SettingsProvider
下一篇: Android系统启动
八归少年
八归少年 新星创作者: 操作系统技术领域 新星创作者: 操作系统技术领域
博客等级 码龄9年 9011粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

八归少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值