本书详细分析了Android内核的内部机制,包括窗口管理系统、Activity管理系统、输入法框架、编译系统等,为Android内核定制及高级应用程序开发提供技术参考。
本书适合于所有Android相关的工程师及产品经理,还可作为相关培训机构的教材。
1. 什么是Android内核
Android操作系统是基于Linux实现的,然而Android的核心价值却不是Linux,所以说,Android的内核不是指Linux,本书不是一本介绍Linux的书。这就好比苹果的操作系统iOS是基于Unix实现的,然而iOS的核心价值却不是Unix。
那么,Android的内核是什么,它的核心价值都包含什么?
大家听过和Android内核最多的词语应该是“Android Framework”以及“Dalvik虚拟机”,那么,这两个核心部分从内部运行机制的角度来看,到底扮演着什么角色,彼此之间如何协同工作呢?了解清楚了这些,也就了解了所谓Android的核心价值,即Android内核。
从进程的角度来看,Android的运行环境如下图所示:
当Linux内核启动后,此时系统的状态和普通的Linux系统基本相同,通过配置Linux中的init.rc文件,可以指定内核启动后都要执行什么程序,而这之后所启动的程序才是Android系统和普通Linux应用系统的区别。
init.rc中所启动的一个重要进程被称作zygote进程,如上图中红色边框所示,zygote这个英文单词的意思是“受精卵”,本书将其称为“种子进程”,从进程的角度来看,种子进程仅仅是一个Linux进程而已,它和一个只包含main()函数的C程序所产生的进程是同一个级别,如上图中双实线边框所示。
种子进程里面所运行的程序基本上就是Android内核的精华所在,其内部主要完成了两件事情。第一件事情是装载了一段程序代码,这些代码都是用C语言写的,这段代码的作用只是为了能够执行Java编译器编译出的字节码,这段代码就是传说中的Java虚拟机,在Android中称为Dalvik虚拟机。
第二件事情必须基于第一件事情之后,即当Dalvik虚拟机代码初始化完成后,从一个名为ZygoteInit.java类中的main()函数中开始执行。这里大家就奇怪了,Dalvik虚拟机如何知道ZygoteInit这个Java类在哪个Jar包里面?实际上,这个Jar包的目录位置信息正是在init.rc中进行配置的,只不过没有直接指定,而是使用一个标志符,当这个标志符是“zygote”时,Dalvik虚拟机就会从“硬编码”的字符串中得到ZygoteInit类所在的Jar包,而这个Jar包正是framework.jar。
http://www.u966.com/download/chengxu/041W63H014.html?1397809277
本书适合于所有Android相关的工程师及产品经理,还可作为相关培训机构的教材。
1. 什么是Android内核
Android操作系统是基于Linux实现的,然而Android的核心价值却不是Linux,所以说,Android的内核不是指Linux,本书不是一本介绍Linux的书。这就好比苹果的操作系统iOS是基于Unix实现的,然而iOS的核心价值却不是Unix。
那么,Android的内核是什么,它的核心价值都包含什么?
大家听过和Android内核最多的词语应该是“Android Framework”以及“Dalvik虚拟机”,那么,这两个核心部分从内部运行机制的角度来看,到底扮演着什么角色,彼此之间如何协同工作呢?了解清楚了这些,也就了解了所谓Android的核心价值,即Android内核。
从进程的角度来看,Android的运行环境如下图所示:
当Linux内核启动后,此时系统的状态和普通的Linux系统基本相同,通过配置Linux中的init.rc文件,可以指定内核启动后都要执行什么程序,而这之后所启动的程序才是Android系统和普通Linux应用系统的区别。
init.rc中所启动的一个重要进程被称作zygote进程,如上图中红色边框所示,zygote这个英文单词的意思是“受精卵”,本书将其称为“种子进程”,从进程的角度来看,种子进程仅仅是一个Linux进程而已,它和一个只包含main()函数的C程序所产生的进程是同一个级别,如上图中双实线边框所示。
种子进程里面所运行的程序基本上就是Android内核的精华所在,其内部主要完成了两件事情。第一件事情是装载了一段程序代码,这些代码都是用C语言写的,这段代码的作用只是为了能够执行Java编译器编译出的字节码,这段代码就是传说中的Java虚拟机,在Android中称为Dalvik虚拟机。
第二件事情必须基于第一件事情之后,即当Dalvik虚拟机代码初始化完成后,从一个名为ZygoteInit.java类中的main()函数中开始执行。这里大家就奇怪了,Dalvik虚拟机如何知道ZygoteInit这个Java类在哪个Jar包里面?实际上,这个Jar包的目录位置信息正是在init.rc中进行配置的,只不过没有直接指定,而是使用一个标志符,当这个标志符是“zygote”时,Dalvik虚拟机就会从“硬编码”的字符串中得到ZygoteInit类所在的Jar包,而这个Jar包正是framework.jar。
http://www.u966.com/download/chengxu/041W63H014.html?1397809277
