《Android框架揭秘》——1.2节通过启动过程分析Android Framework

article/2025/11/10 11:20:59

本节书摘来自异步社区《Android框架揭秘》一书中的第1章,第1.2节通过启动过程分析Android Framework,作者 金泰延 , 宋亨周 , 朴知勋 , 李白 , 林起永,更多章节内容可以访问云栖社区“异步社区”公众号查看

1.2 通过启动过程分析Android Framework
Android框架揭秘
Android源码数量极其庞大,以Android 2.2为例,除去Linux代码,代码数量大于4GB。若想理解和掌握这么庞大的Android系统,需要耗费大量的时间,付出极大的努力。并且,到现在为止,也没有相关资料对Android Frame作系统完整的讲解说明。

那么,分析Android Framework用什么方法好呢?回答这一问题之前,先回想一下我们是如何分析他人编写的程序代码的。在分析程序代码时,我们通常从程序的入口main()函数开始,一点点地理清程序流,把握程序的运行过程。同样,在分析结构庞大的Android Framework时,也要从Android平台启动过程着手。Android启动过程包含从Linux内核加载到Home应用程序启动的整个过程,依次分析这一过程,有利于我们系统地理解Android Framework运行的原理。

如图1-3所示,简单地描述了Android启动过程,本书在后续章节中讲解Android Framework初始化过程、各模块间如何相互作用等内容时,均以此图所描述的启动过程为基础。


0ad74beca6eb1ec290e6e9461355ada604ec56fb

对照图1-3 Android启动过程图,简单地讲解一下。

1.Linux内核

Android是基于Linux内核的系统平台。启动时,首先通过bootloader(系统加载器),加载Linux内核。在Linux加载启动时,与普通的Linux启动过程相同,先初始化内核,然后调用init进程。

2.init

Android init进程对各种设备进行初始化,运行Android Framework所需用的各种Daemon、Context Manager、Media Server、Zygote等。

以下是init进程执行的Daemon进程。

USB Daemon (usbd):管理USB连接。
Android Debug Bridge Daemon (adbd):Android Debug Bridge连接管理。
Debugger Daemon (debuggerd):启动Debugger系统。
Radio Interface Layer Daemon (rild):管理无线通信连接。
3.Context Manager

Context Manager是一个管理Android系统服务的重要进程。系统服务是组成Android Framework的重要组件,提供从相机、音频、视频处理到各种应用程序制作所需要的重要的API。

Context Manager提供运行于Android内的各种系统服务信息。应用程序或Framework内部模块在调用系统服务时,需要先向服务管理器申请,而后通过Binder IPC(Interprocess communication)调用系统服务。

在系统启动时,Android所有系统服务都要把各自的handle信息注册到Context Manager,此时,Binder IPC用来进行进程间的通信。

4.Media Server

Media Server用于运行基于C/C++ 的本地系统服务,如Audio Flinger(负责音频输出)、Camera等。

5.Zygote

Zygote进程用于缩短Android应用程序加载的时间,每当执行Java应用程序时,Zygote就会派生出一个子进程来执行应用程序,该子进程就是用来执行Java应用程序的虚拟机。

6.System Server

System Server是Android系统的一个核心进程,它是由Zygote进程创建的,在Android启动过程中位于Zygote之后。在System Server中可以看到它建立的Android中的大部分服务,如Activity Manager Service(管理应用程序的生命周期)、Location Manager Service(提供终端的地理位置信息)等。

为了将运行在System Server中的Java系统服务提供给Android应用程序或Framework内部模块调用,需要先将它们注册到Context Manager中。

在通过Binder IPC将Java系统服务注册到基于C语言的服务管理器时,需要使用JNI(Java Native Interface)本地编程接口。JNI允许Java代码与其他编程语言(如C、C++、汇编语言)编写的应用程序和库进行交互操作。

以上就是对Android启动过程以及Framework初始化的简单介绍。当然这仅仅是Android启动过程的一部分,如图1-3所示,当所有Java系统服务加载完毕后,Activity Manager Service会运行HOME应用,启动过程继续进行。这部分已超出本书所要讨论的范围,如果读者感兴趣,请参照Android源码进行分析。

出于篇幅的考量,本书不可能对Android Framework所有模块的所有动作作出说明。即便如此,沿着本书提供的思路,参考相关章节内容,分析相关源码,你会很快、很容易地掌握Android Framework。


http://chatgpt.dhexx.cn/article/oWUMAT0c.shtml

相关文章

《Android框架揭秘》——2.5节应用程序Framework源码级别调试

本节书摘来自异步社区《Android框架揭秘》一书中的第2章,第2.5节应用程序Framework源码级别调试,作者 金泰延 , 宋亨周 , 朴知勋 , 李白 , 林起永,更多章节内容可以访问云栖社区“异步社区”公众号查看 2.5 应用程序Framework源码级别调试An…

《Android框架揭秘》读书笔记--在Java中调用C库函数

简介 以下试验在Ubuntu16.04 x86,jdk安装:sudo apt-get install openjdk-9-jdk-headless,原书介绍的是在win系统实现。 步骤 第一步:编写Java代码第二步:编译Java代码第三步:生成C语言头文件第四步&#…

Android 框架揭秘 --读书笔记

Android 框架揭秘 Insied the Android Framework 转载于:https://www.cnblogs.com/drduan/p/4788554.html

android框架揭秘!Android开发者跳槽指南一线互联网公司面经总结

前言概要: 1,进大公司还是小公司,真的有的选? 2,校招的潜规则 3,校招想进大厂怎么办 4,社招的潜规则 5,社招想进大厂怎么办? 面试部门 岗位:商业化 - 高级 …

《Android框架揭秘》——导读

本节书摘来自异步社区《Android框架揭秘》一书中的目录,作者 金泰延 , 宋亨周 , 朴知勋 , 李白 , 林起永,更多章节内容可以访问云栖社区“异步社区”公众号查看 目 录 第1章 Android Framework概要 1.1 Android源代码组成1.2 通过启动过程分析Android…

Android框架揭秘读书笔记

Android启动过程 1.linux内核,加载linux内核 2 init 进程对各种设备进行初始化, 执行Daemon进程,管理USB、ADB链接管理器、Debugger系统、rild管理无线通信链接 Content Manager进程,提供运行Android各种系统服务信息 Media …

android框架揭秘!连续四年百度Android岗必问面试题!实战篇

前言 今天想停下代码,写点脑袋里不断浮现出来的一些看法。 也就是最近在微博和知乎上老看到“互联网寒冬”的说法。要么是看到啥公司薪水无法如期发放了,要么是看到别人说什么“裁员了,没有交接,签字然后电脑还了就走人&#xf…

字节大佬封神之作《Android Framework高级开发笔记》,完整版开放下载

在现阶段的Android开发工作中,无论是底层,还是应用层,Framework都至关重要。Framework的火热程度,相信我也不必再赘述。 为帮助大家深度学习Framework背景及它的巨大作用,这里分享一份《Android Framework高级开发笔记…

ANDROID框架揭秘

本书通过对Android系统源代码的分析,主要介绍Android框架的初始化过程及 主要组件的工作原理。作者直接分析和整理了Android框架的主要源代码,并详细讲 解了理解框架工作原理所需的各种基础知识和构成实际Android平台骨干的服务框架。 其中的主要内容包括…

用Java写linux命令行cd,java执行linux命令cd

java执行linux命令cd [2021-01-31 01:51:23] 简介: php去除nbsp的方法:首先创建一个PHP代码示例文件;然后通过“preg_replace("/(\s|\&nbsp\;| |\xc2\xa0)/", " ", strip_tags($val));”方法去除所有nbsp即可。推荐&#xff1…

Linux 常用命令与教程

http://c.biancheng.net/view/705.html C语言编程网的教程很好 还有菜鸟教程的 还有这个 https://mp.weixin.qq.com/s/7bSwKiPmtJbs7FtRWZZqpA 讲的也不错 https://baike.baidu.com/item/PS/8850709 百度百科 搜索一个linux命令 会出来这个 〇、序言:命令基本格式…

最强的linux命令总结.pdf

白月光-焰灵姬 来源:掘金- Lion https://juejin.cn/post/6938385978004340744 | 编辑:五角钱的程序员 前言 Linux 的学习对于一个程序员的重要性是不言而喻的。前端开发相比后端开发,接触 Linux机会相对较少,因此往往容易忽视它。…

linux命令 视频教程,常用的linux命令视频教程

常用的linux命令视频教程 [2021-02-19 11:27:41] 简介: php去除nbsp的方法:首先创建一个PHP代码示例文件;然后通过“preg_replace("/(\s|\&nbsp\;| |\xc2\xa0)/", " ", strip_tags($val));”方法去除所有nbsp即可。推荐&#…

ps 命令详解

From:http://blog.chinaunix.net/uid-25681671-id-3201927.html 进程和作业管理命令:http://man.linuxde.net/sub/进程和作业管理 Linux 关于 进程/线程 的命令 kill 和 pgrep 和 pidof 和 awk 和 pkill 和 killall:https://blog.csdn.net/fr…

Linux命令详解词典高频命令(三)

ln(link) 功能说明:链接文件或目录。 语法:$ ln [参数] [被链接文件] [链接目录] 包名称:coreutils 相关命令:cp,lndir,symlinks 补充说明:ln命令用在链接文件或目录,如同时指定两个以上的文件或目录&…

Linux命令详解词典高频命令(1)

参考机械工业出版社,施威铭研究室著的《Linux命令详解词典》 列出了其中的一些高频命令供自己学习 alias 功能说明:设置命令的别名。 语 法:-$ alias [别名][命令] 包 名 称:bash 相关命令:unalias 命令说明&#xf…

linux命令 语法 pdf,Linux命令详解词典pdf

摘要 精选381个命令,详细列出1729个范例,提供3种查询索引,适合各种Linux发行版。 Linux命令详解词典 内容简介 本书精选了381个Linux命令,详细罗列1729个范例,并提供3种查询索引方式。本书详细列出Linux命令的参数、功…

linux命令详解词典pdf,[计算机]linux命令详解词典

[计算机]linux命令详解词典 (42页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 22.9 积分 linux命令详解词典cat cdchmod chowncp cut名称:cat使用权限:所有使用者使用方式…

【基础篇】linux常用命令大全及命令说明

对于刚接触linux来说,命令是必不可少的。在linux中很多东西都是要用命令来控制,接下来就将我所了解到的常用命令列举一下,供大家参考: 一、基础命令 su root : 进入管理员用户 cd :切换到当前用户的主目录 cd 目录…

Linux命令详解词典高频命令(2)

grep 功能说明:查找文件里符合条件的字符串 语 法:# grep [参数] [查找范例] *[文件类型] 包 命 令:grep 相关命令:egrep,fgrep,rgrep 补充说明:命令用于査找内容包含指定范本样式的文件,如果发现某文件的…