`

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中启动的服务相关流程图

    1. **zygote初始化**:zygote是Android系统的孵化器,它是一个预先加载了大部分核心类库的进程,用于高效创建新的应用程序进程。zygote的启动在init.rc中被定义,通常由`zygote`服务启动。 2. **预加载类库**:...

    Android init.rc 启动流程图

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

    Android启动过程详解[借鉴].pdf

    init.rc 文件是 Android 自己规定的初始化脚本,包含四个类型的声明:Actions、Commands、Services 和 Options。init.rc 文件中定义了服务的启动顺序和服务的依赖关系。 第二步:Native 服务启动 Zygote 和 ...

    android核心分析之------Android启动过程详解.pdf

    它负责执行初始化脚本init.rc和与硬件平台相关的init.xxx.rc,创建基本服务如servicemanager和zygote。init进程通过parse_config_file函数解析这些脚本文件,其中包含了动作、命令、服务和选项等声明。服务启动机制...

    android初始化流程

    Android初始化流程是操作系统启动后进行的一系列核心服务与系统组件的加载和设置过程,这个流程对系统的稳定性和功能完整性至关重要。下面将详细阐述Android初始化的关键步骤、涉及的服务以及相关组件的作用。 1. *...

    android2.3初始化过程

    Android 2.3的启动过程是一个复杂但有序的过程,涉及到日志系统初始化、配置文件解析、设备初始化、属性服务的启动等多个环节。通过对这些过程的深入了解,我们可以更好地理解Android系统是如何从底层硬件到顶层应用...

    Android系统进程Zygote启动过程的源代码分析.pdf

    总结来说,Zygote进程的启动过程是Android系统启动序列中的重要一环,通过源代码分析可以了解到系统底层的启动机制、进程创建和管理机制、以及应用和服务的初始化过程。通过理解Zygote进程如何被初始化,以及它是...

    Android初始化流程简要分析.do

    Android初始化流程是操作系统启动后,Android系统核心服务和组件开始运行的过程。这一过程涉及多个步骤,包括内核启动、初始化进程、系统服务启动等。以下是对Android初始化流程的详细分析: 1. **INIT 进程** 在...

    展锐Android11.0开机启动流程介绍V1.0-nowatermark

    其中,init 进程是 Android 系统启动的关键过程,负责初始化系统环境、挂载文件系统、启动系统服务等。 init 启动流程 init 进程的启动过程主要包括以下几个步骤:kernel 启动 init 进程、init 进程解析配置文件、...

    zygote启动过程

    在深入探讨zygote启动过程前,我们需要了解其在init.rc中的配置信息。init.rc文件位于设备的根目录下,可以通过adb工具将其拉取到本地进行查看。init.rc文件中与zygote相关的配置如下: ```bash service zygote /...

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

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

    Android 开机启动流程.doc

    Zygote 是一个在 init.rc 中被指定启动的服务。Zygote 负责建立 Java Runtime,建立虚拟机,建立 Socket 接收 ActivityManagerService 的请求,用于 Fork 应用程序。Zygote 是 Android 系统中最重要的后台程序之一。...

    Android开机启动流程.doc

    system server由zygote启动,通过System Manager治理Android的服务。 阶段6:桌面launcher 桌面launcher是Android系统的桌面程序,负责显示桌面界面。桌面launcher的源码位于ActivityManagerService.java目录下。...

    Android 启动过程详解

    Android的启动过程是一个多层次、多阶段的过程,涉及到内核初始化、用户级进程的启动、Native服务的启动以及最终用户界面的展示。通过对这些过程的详细了解,我们可以更好地理解Android系统的内部架构和工作机制。

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

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

    Android Zygote启动流程源码解析

    // 初始化启动参数 boolean startSystemServer = false; String socketName = "zygote"; String abiList = null; for (int i = 1; i &lt; argv.length; i++) { if ("start-system-server".equals(argv[i])) { ...

    模拟Android系统Zygote启动流程

    Init进程是系统中的第一个用户空间进程,它负责执行系统初始化脚本 `/init.rc`,这个脚本会启动各种服务和进程,包括Zygote。 1. **Zygote初始化**:在系统服务初始化阶段,init进程会调用`/system/bin/app_process...

    android系统从init进程开始到systemserver启动详细流程

    ##### 5.1 zygote在init.rc中的启动流程 `zygote`进程的启动配置在`init.rc`文件中定义: - **配置为classmain**:`zygote`进程在`init.rc`中通过`service`关键字定义,并且被归类为`classmain`。 - **onboot**:...

    Android启动-Zygote启动介绍

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

Global site tag (gtag.js) - Google Analytics