《Android框架揭秘》——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初始化过程、各模块间如何相互作用等内容时,均以此图所描述的启动过程为基础。

对照图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。

时间: 2024-09-25 19:12:56

《Android框架揭秘》——1.2节通过启动过程分析Android Framework的相关文章

《Android框架揭秘》——1.1节Android源代码组成

1.1 Android源代码组成Android框架揭秘那么,我们该如何学习Android框架呢?其实,学习Android框架时,最准确.最权威的参考资料就是Android的源代码,这些源代码从http://android.git.kernel.org/可免费下载.关于这方面的内容,请参考第2章中的相关部分. Android主要源代码组成如下. Kernel:Android Linux内核2.6bionic:Android标准C运行支持库bootloader:Android内核加载器参考build

《Android框架揭秘》——导读

目 录 第1章 Android Framework概要 1.1 Android源代码组成1.2 通过启动过程分析Android Framework 第2章 搭建Android开发环境 2.1 主机环境构成 2.2 搭建Android平台编译环境 2.3 搭建Android SDK开发环境 2.4 开发Android应用程序 2.5 应用程序Framework源码级别调试 2.6 小结 第3章 init进程第4章 JNI与NDK第5章 Zygote第6章 Android服务概要第7章 Androi

《Android框架揭秘》——2.4节开发Android应用程序

2.4 开发Android应用程序Android框架揭秘在上一节中,我们已经安装好Eclipse.Eclipse ADT插件.Android SDK,搭建好了Android应用程序开发环境.下面我们将编写一个Hello应用程序,并在模拟器中运行它,以测试开发环境是否搭建成功. 编写Hello应用程序在开始编写Hello应用程序之前,首先创建Android工程,在Eclipse菜单栏中,依次选择File>New> Project>Android Project命令,如图2-16所示. 在N

《Android框架揭秘》——2.1节主机环境构成

2.1 主机环境构成Android框架揭秘虽然Android开发环境多种多样,但本书构建Android平台.模拟器的驱动,以及对应用程序Framework的调试都是在Ubuntu Linux1操作系统平台上进行的.由于大部分机器都运行在微软公司的Windows XP操作系统下,所以需要先在Windows XP操作系统下安装VirtualBox虚拟机,再在此虚拟机上安装Ubuntu Linux操作系统. 首先简单地讲一下在Windows XP操作系统下如何安装VirtualBox虚拟机,然后再讲解

《Android框架揭秘》——2.2节搭建Android平台编译环境

2.2 搭建Android平台编译环境Android框架揭秘前面,我们讲解了在Windows平台下安装虚拟机,以及在虚拟机下安装Ubuntu的相关知识.下面我们将讲解Android所需要的一些编译工具,以及下载Android平台源码的方法. 2.2.1 编译工具在Ubuntu Linux(32-bit x86环境)中编译Android平台之前,首先要在Linux中安装如下工具或包. 2.2.2 安装RepoAndroid源代码十分庞大,通过Git版本控制工具管理源码,Android是由kerne

《Android框架揭秘》——2.6节小结

2.6 小结Android框架揭秘本章主要讲解的内容有Android平台编译.Android SDK安装,以及调试应用程序Framework的方法,其中用到的主要程序整理如下. VirtualBox:一款运行在Windows平台下的虚拟机软件,用于安装Ubuntu操作系统,以便编译Android平台源码. Ubuntu:一款以桌面为主的Linux操作系统,是编译Android源码所需的环境. Git:一个版本控制工具,采用分布式版本库的方式,管理Android源码. Repo:一个Python脚

《Android安全技术揭秘与防范》—第8章8.节什么是Hook技术

第8章 动态注入技术 Android安全技术揭秘与防范 我们在讨论动态注入技术的时候,APIHook的技术由来已久,在操作系统未能提供所需功能的情况下,利用APIHook的手段来实现某种必需的功能也算是一种不得已的办法.在Windows平台下开发电子词典的光标取词功能,这项功能就是利用Hook API的技术把系统的字符串输出函数替换成了电子词典中的函数,从而能得到屏幕上任何位置的字符串.无论是16位的Windows95,还是32位的Windws NT,都有办法向整个系统或特定的目标进程中"注入&

《Android安全技术揭秘与防范》—第8章8.2节常用的Hook工具

8.2 常用的Hook工具 在日常工作学习中,我们希望使用Hook技术来完成某功能其实是相当烦琐的,但也并不是不可能的.我们这里没有手动地重新书写一个Hook工具,而是使用到了第三方提供的框架来做演示.Android的Hook技术虽然发展不久,但是也出现了很多的Hook框架工具.本节我们就具体介绍一下目前常用到的Hook框架. 8.2.1 Xposed框架 Xposed框架是一款可以在不修改APK的情况下影响程序运行(修改系统)的框架服务,通过替换/system/bin/app_process

《Android安全技术揭秘与防范》—第8章8.3节HookAndroid应用

8.3 HookAndroid应用 前面我们介绍过Cydiasubstrate框架提供在Java层Hook的能力,其中主要是提供了三个比较重要的方法,MS.hookClassLoad.MS.hookMethod.MS.moveUnderClassLoader.三个方法的具体介绍如表8-2所示. 几个方法的具体参数与返回值,我们可以看如下的方法具体定义. * Hook一个指定的Class * * @paramname Class的包名+类名,如android.content.res.Resourc