《Android框架揭秘》——1.2节通过启动过程分析Android Framework-阿里云开发者社区

开发者社区> 开发与运维> 正文
登录阅读全文

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

简介:

本节书摘来自异步社区《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。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享: