`

Android 初始化ini.rc中启动zygote服务

 
阅读更多

我对这个文件还没仔细研究过,不过一个网友突然问了我一个问题,我也还是大概的知道一些。

android的系统应用中的一个重要的进程就是zygote,所有的java应用程序进程都是由zygote派生出来的,zygote这个进程的作用就 是“生儿子”。具体的一个应用如何出来的大家可以看我以前的一篇文章-----Android 应用初始化及窗体事件的分发。

首先要了解一点初始化语言的基本知识吧:

Services(服务)是一个程序,他在初始化时启动,并在退出时重启(可选)。Services(服务)的形式如下:

service <name> <pathname> [ <argument> ]*
<option>
<option>
Options为选项,具体可以参考linux service命令
zygote进程正是在linux kernel startup后通过这个文件启动的,具体看init.rc中这一段:
service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server
socket zygote stream 666
onrestart write /sys/android_power/request_state wake
onrestart write /sys/power/state on
一段一段的分析这个代码:
service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server
启动服务名字zygote. /system/bin/app_process 进程的bin文件具体路径,后面跟的就是启动参数-Xzygote /system/bin --zygote --start-system-server 。这段参数有什么作用可以对照看代码app_main.cpp

if (i < argc) {
arg = argv[i++];
if (0 == strcmp("--zygote ", arg)) {
bool startSystemServer = (i < argc) ?
strcmp(argv[i], "-- start-system-server ") == 0 : false;
setArgv0(argv0, "zygote");
set_process_name("zygote");
runtime.start ("com.android.internal.os.ZygoteInit",
startSystemServer);
} else {
set_process_name(argv0);

runtime.mClassName = arg;

// Remainder of args get passed to startup class main()
runtime.mArgC = argc-i;
runtime.mArgV = argv+i;

LOGV("App process is starting with pid=%d, class=%s./n",
getpid(), runtime.getClassName());
runtime.start();
}
}

-Xzygote 这个参数的意义是在jvm中设置gDvm.zygote = true;至于这个参数的具体作用大家自己看代码吧。 其流程是 androidRuntime->start() call---> JNI_CreateJavaVM() call ---->dvmStartup()(戴维林虚拟机初始化) call---->dvmProcessOptions().

/system/bin :也许是告知系统应用的路径吧,大家看到了告诉我。

onrestart write /sys/android_power/request_state wake:

如果这个服务重启了,打开/sys/android_power/request_state 这个文件写入wake字符串。

分享到:
评论

相关推荐

    android系统.rc文件学习包含init.rc,init.usb.rc,init.zygote64.rc,init-debug.rc,ueventd.rc

    Android Init Language是android系统很重要的组成 文件来自于\system\core\rootdir 里面有init.rc,init.usb.rc,init.zygote64.rc,init-debug.rc,ueventd.rc

    高通LA.1.1基线android源码init.rc中启动的服务相关流程图

    高通LA.1.1基线Android源码的ServiceManager启动流程图 和 高通LA.1.1基线android源码的zygote流程图,可配套作者相关文章进行分析

    Android init.rc 启动流程图

    Android init.rc 启动流程图 1.ZygoteInit是如何启动的以及如何启动SystemService 2.ActivityManagerService如何通过Zygote来创建Activity Pid 3.命令如何启动Pm.java

    5.ptrace注入与zygote区别和联系.V2EE

    ptrace注入与zygote区别和联系.V2EEptrace注入与zygote区别和联系.V2EE

    探索Android FrameWork底层开发视频全套

    15.android服务介绍与davlink启动 16.Zygote剖析与system_server启动 17.Zygote创建APP分析 18.zygote_load系统资源分析及优化 19.开机界面分析 20.systemserver服务分析 21.ServiceManager服务分析 22....

    Android启动-Zygote启动介绍

    Android启动,第二大阶段,Zygote启动。...紧接上一篇《 Android启动-init介绍》Linux内核启动之后,执行第一个进程 Init,init会启动本地服务,创建Zygote等。 这里我们就来研究一下Zygote启动过程。

    Android学习系列教程实例.pdf

    1.3. Android 系统的初始化流程 ........... 15 1.3.1. 启动 BootLoader .................... 15 1.3.2. 加载系统内核 ........................ 15 1.3.3. 启动 Init 进程 ......................... 16 1.3.4. ...

    Android 系统启动流分析 & Zygote启动流程分析

    Zygote在Android系统扮演着不可或缺的角色,Android系统的启动首先需要Zygote参与,比如启动SystemService , 还有一个就是孵化应用的进程,比如我们创建一个Activity也是需要Zygote参与.  Zygote 启动分为两个部分: 1....

    Android Zygote启动流程源码解析

    Android Zygote启动流程源码解析

    Android系统源代码情景分析光盘

    2.4.4 启动硬件访问服务.......................................... 43 2.5 开发Android应用程序来使用硬件访问服务.................................................. 44 第3章 智能指针.......................

    Android 系统 Linux系统 内核kernel启动流程 init 进程介绍

    Android 系统 Linux系统 内核kernel启动流程 init 进程介绍,init进程初始化,内核启动三个阶段深入浅出介绍,简单易懂 。kernel_init() 函数介绍,ramdisk_execute_command,execute_command /sbin/init,/etc/init,...

    深入理解Android 卷1.pdf

    第3章分析了init进程,揭示了通过解析init.rc来启动Zygote以及属性服务的工作原理;第4章分析了Zygote、SystemServer等进程的工作机制,同时还讨论了Android的启动速度、虚拟机HeapSize的大小调整、Watchdog工作原理...

    Android-start-boot-analyze-.rar_android_android bootloader_andro

    &#8226 bootloader---初始化、从Flash读取Kernel镜像及一些必须的配置信息,引导kernel启动 &#8226 linuxkernel启动linux内核 &#8226 init进程启动 &#8226 init进程读取init.rc启动必要的daemon程序,如:adbd、...

    Android 8.1zygote服务 SystemServer启动流程 Activity创建

    Android zygote服务/SystemServer启动流程/Activity创建,本文档继承Android init的分析,继续往下分析Zygote进程、SystemServer进程的创建、Activity的建立

    Android_启动过程分析

    2. Android-level,由init process 开始,读取init.rc,Native 服务启动,并启动重要的外部程序,例如:servicemanager、Zygote以及System Server。 3. Zygote-Mode,Zygote 启动完SystemServer 后,进入Zygote Mode...

    [Android框架揭秘].金泰延等.扫描版

    《android框架揭秘》通过对android系统源代码的分析,主要介绍android框架的初始化过程及主要组件的工作原理。作者直接分析和整理了android框架的主要源代码,并详细讲解了理解框架工作原理所需的各种基础知识和构成...

    《深入理解Android:卷I》试读本

    第3章分析了init进程,揭示了通过解析init.rc来启动Zygote以及属性服务的工作原理;第4章分析了Zygote、SystemServer等进程的工作机制,同时还讨论了Android的启动速度、虚拟机HeapSize的大小调整、Watchdog工作原理...

    模拟Android系统Zygote启动流程

    模拟Android系统Zygote启动流程

    Android框架揭秘.pdf

    《Android框架揭秘》通过对Android系统源代码的分析,主要介绍Android框架的初始化过程及主要组件的工作原理。作者直接分析和整理了Android框架的主要源代码,并详细讲解了理解框架工作原理所需的各种基础知识和构成...

Global site tag (gtag.js) - Google Analytics