2015-12-23 17:13:58 688浏览
Android源码数量极其庞大,以Android 2.2为例,除去Linux代码,代码数量大于4GB。若想理解和掌握这么庞大的Android系统,需要耗费大量的时间,付出极大的努力。并且,到现在为止,也没有相关资料对Android Frame作系统完整的讲解说明。
那么,分析Android Framework用什么方法好呢?回答这一问题之前,先回想一下我们是如何分析他人编写的程序代码的。在分析程序代码时,我们通常从程序的入口main()函数开始,一点点地理清程序流,把握程序的运行过程。同样,在Android开发者分析结构庞大的Android Framework时,也要从Android平台启动过程着手。Android启动过程包含从Linux内核加载到Home应用程序启动的整个过程,依次分析这一过程,有利于我们系统地理解Android Framework运行的原理。
从零开始学Android之通过启动过程分析Android Framework:
一、Linux内核
Android是基于Linux内核的系统平台。启动时,首先通过bootloader(系统加载器),加载Linux内核。在Linux加载启动时,与普通的Linux启动过程相同,先初始化内核,然后调用init进程。
二、mlt
Android init进程对各种设备进行初始化,运行Android Framework所需用的各种Daemon、Context Manager、Media Server、Zygote等。以下是init进程执行的Daemon进程。
1、USB Daemon(usbd):管理USB连接。
2、Android Debug Bridge Daemon(adbd):Android Debug Bridge连接管理。
3、Debugger Daemon(debuggerd):启动Debugger系统。
4、Radio Interface Layer Daemon(rild):管理无线通信连接。
三、Context Manager
Context Manager是一个管理Android系统服务的重要进程。系统服务是组成Android Framework的重要组件,提供从相机、音频、视频处理到各种应用程序制作所需要的重要的API。Context Manager提供运行于Android内的各种系统服务信息。应用程序或Framework内部模块在调用系统服务时,需要先向服务管理器申请,而后通过Binder IPC(Interprocesscommunication)调用系统服务。在系统启动时,Android所有系统服务都要把各自的handle信息注册到Context Manager,此时,Binder IPC用来进行进程问的通信。
四、Media Server
Media Server用于运行基于C/C++的本地系统服务,如Audio Flinger(负责音频输出)、Camera等。
五、Zygote
Zygote进程用于缩短Android应用栩芋加载的时间,每当执行Java应用程序时,Zygote就会派生出‘个子进程来执行应用程序,该子进程就是用来执行Java应用程序的虚拟机。
六、System Server
System Server是Android系统的‘个核心进程,它是由Zygote进程创建的,在Android启动过程中位于Zygote之后。在System Server中可以看到它建立的Android中的大部分服务,如Activity Manager Service(管理应用程序的生命周期)、Location Manager Service(提供终端的地理位置信息)等。
以上就是对Android启动过程以及Framework初始化的简单介绍。当然这仅仅是Android启动过程的一部分,当所有Java系统服务加载完毕后,Activity Manager Service会运行HOME应用,启动过程继续进行。如果读者感兴趣,请参照扣丁学堂Android在线课程讲述的源码进行分析。