Android ZygoteServer 启动分析

今天我们要解决的疑问是 com.android.internal.os.ZygoteServer 是在哪里被调用的?
通过全局搜索,我们发现 com.android.internal.os.ZygoteInit#main 方法有如下代码:

  zygoteServer = new ZygoteServer(isPrimaryZygote);

那这个main方法又是被哪里调用的呢? 继续使用grep 来搜索 ZygoteInit ,
发现在 base/cmds/app_process/app_main.cpp 里面的main函数 336 行有如下代码:

 runtime.start("com.android.internal.os.ZygoteInit", args, zygote);

首先这个mian函数在哪里被调用?

app_main.cpp 所在的模块的 Android.bp 有如下内容:

cc_binary {
    name: "app_process",

    srcs: ["app_main.cpp"],
.....
}

说明这个模块最终是编译为一个可执行文件 app_process,那又是哪里调用这个 app_process的呢?熟悉开机流程的肯定知道这个是配置在rc文件中的,那具体的内容是什么呢?
我们这次用 grep 在设备上搜索, 就是adb shell 之后 输入:

grep  -rIn   app_process

我们发现了out下面有一个:

out/target/product/Tinker_Board_2/system/etc/init/hw/init.zygote32.rc
这个文件里面有如下内容:

service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server
    class main
    priority -20
    user root
    group root readproc reserved_disk
    socket zygote stream 660 root system
    socket usap_pool_primary stream 660 root system
    onrestart exec_background - system system -- /system/bin/vdc volume abort_fuse
    onrestart write /sys/power/state on
    onrestart restart audioserver
    onrestart restart cameraserver
    onrestart restart media
    onrestart restart netd
    onrestart restart wificond
    writepid /dev/cpuset/foreground/tasks

其中第一行的 -Xzygote 就是指定是否调用 ZygoteInit ,

也可以在 app_main.cpp 的mian方法中打印传递的参数,如下是打印结果:

/system/bin/app_process64 -Xzygote /system/bin --zygote --start-system-server --socket-name=zygote

然后我们搜索 app_process64 就可以找到配置文件.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值