安卓源码----安卓系统启动过程(初次研究源码,表述不当还请见谅)

安卓系统其实是Linux系统中的一个应用程序,对应的程序是app_process,该程序是在init.rc 中被声明的,Linux启动后会启动该zygote(app_process)进程(该程序由java代码实现,由Dalvik虚拟机运行,对应代码在latest-android-2.3.7_r1\android-2.3.7_r1\frameworks\base\core\java\com\android\internal\os\ZygoteInit.java中)


安卓系统中    文件目录

安卓源码----安卓系统启动过程(初次研究源码,表述不当还请见谅)_第1张图片



安卓2.3源码中init.rc文件路径及内容

安卓源码----安卓系统启动过程(初次研究源码,表述不当还请见谅)_第2张图片



latest-android-2.3.7_r1\android-2.3.7_r1\frameworks\base\core\java\com\android\internal\os\ZygoteInit.java中关键代码

安卓源码----安卓系统启动过程(初次研究源码,表述不当还请见谅)_第3张图片


main函数中会首先启动服务端Socket,用于接收启动Dalvik进程的命令

然后会加载一些安卓系统中应用共享的类以及资源文件,ZygoteInit会根据preload_classes文件加载共享的类


preload_classes文件位置及内容

        该文件中总共列出了1830个类,这些类都是需要被加载的,加载多导致开机慢,但加载多意味着安卓应用运行时大部分共享的类已经被加载过 了,从而提高了安卓应用运行速度

安卓源码----安卓系统启动过程(初次研究源码,表述不当还请见谅)_第4张图片


资源文件加载根据latest-android-2.3.7_r1\android-2.3.7_r1\frameworks\base\core\res\res\values\arrays.xml中声明进行加载

该文件内容如下

安卓源码----安卓系统启动过程(初次研究源码,表述不当还请见谅)_第5张图片


加载完以上资源后zygote会孵化出第一个Dalvik进程SystemServer,SystemServer中会创建一个Socket客户端,由ActivityManageService负责管理,之后所有的Dalvik进程都将通过该Socket客户端间接被启动,当需要启动新APK进程时,AmS会通过该Socket客户端向zygote进程的Socket服务端发送一个启动命令,然后zygote会孵化出新的进程



你可能感兴趣的:(源码,android,启动,内核)