Android_8 zygote启动分析

1.从init.rc 里的on nonencrypted被触发时启动,如果是没有加密的Android系统。

复制代码
on nonencrypted
    class_start main
    class_start late_start

这个zygote就在 main这个类里,然后一起启动。

2.就在这个init.rc同级目录下就有这个zygote.rc的启动目录,参考这篇文章,打开一个init.zygote32.rc 。

然后就可以看到

复制代码
service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server

这第一个就是以服务的方法来启动,然后第二个zygote是名字,第三个是真正的执行程序路径,后面是参数。

3.然后再去找这个/system/bin/app_process,这个是编译的产物,不是源码里的地址。然后需要通过grep来查找。发现在这个 frameworks/base/cmds/app_process/目录下,有mk和main文件然后 分析源文件main。

4.这个app_main.cpp里面,就是分析参数,然后执行这个

复制代码
if (zygote) {
    runtime.start("com.android.internal.os.ZygoteInit", args, zygote);
} 

这样就通过这个AndroidRuntime来启动Zygotenti了。再往下跟踪这个AndroidRuntime。

5.找到main方法,从上往下看,这个地方Dalvik虚拟机开始开启。

复制代码
/* start the virtual machine */
JniInvocation jni_invocation;
jni_invocation.Init(NULL);
JNIEnv* env;
if (startVm(&mJavaVM, &env, zygote) != 0) {
    return;
}
onVmCreated(env);

然后再往下呢,就是用jni来执行下面这个类里的main方法了。

复制代码
com.android.internal.os.ZygoteInit

6.接下来跟去ZygoteInit的main方法 。

做了初始化的流程,还有一个预加载各种重要的信息。

复制代码
preload(bootTimingsTraceLog);

7.接下来是开始SystemServer

下一篇再继续。

相关推荐
浪潮IT馆2 小时前
Android Studio 非最新版本下载安装教程
android·ide·android studio
xiaozongt19893 小时前
MasterGo + Claude Code 生成 Android 布局:完整实践指南
android
Anhty4 小时前
2026最新免费手机音频处理工具 !!
android·功能测试·ios·智能手机·音视频
2501_915909066 小时前
iOS应用从开发到上架App Store的完整发布流程与步骤指南
android·ios·小程序·https·uni-app·webview
狗凯之家源码网6 小时前
AI 步数修改提交系统源码应用场景与落地指南
android·数据库·人工智能·运动步数
ZHOUPUYU7 小时前
PHP 9.0 前瞻:下一代 PHP 会带来哪些新功能?
android·开发语言·php
JMchen7 小时前
性能优化——让Native代码飞起来
android·c++·性能优化
ZHOUPUYU8 小时前
PHP 8.2 的核心高级特性,包括只读类、类型系统增强
android·性能优化·php
ZHOUPUYU8 小时前
PHP 8.0 高级技术实战:从新特性到性能优化
android·性能优化·php
不爱说话郭德纲8 小时前
从“点点点”到一键出包:我把 uni-app x Android 离线打包做成了脚本
android·前端·uni-app