浅谈 Android Zygote
Zygote 是 init
进程启动时创建的,通过 fork
(复制进程)的形式来创建应用程序进程和 SystemServer
进程。并且,Zygote 进程在启动的时候创建 DVM 或者 ART,因此通过fork
创建的应用程序进程和SystemServer
进程可以在内部获取一个DVM或者ART的实例副本。
首先,Android 应用跑的的是虚拟机,虚拟机中 Java 代码的不同才造成了应用的区别,而对于基础的运行环境,要求却是一样的。
其次,Zygote 在初始化时就会创建虚拟机,同时把需要的系统类库和资源文件加载的内存中。而 Zygote 在 fork 出子进程后,这个子进程也会得到一个已经加载好基础资源的虚拟机。
这样,接下来只需要装载 APK 相关的资源就可以运行了,可以做到提升效率
放一个进程树
1 |
|
Zygote 在 init
进程中以 service 方式启动,根据 ro.zygote
引入启动脚本,安卓 5.0 开始,Zygote 有了 32/64 位的分别,在 Android 12,ro.zygote
取值有四种:
- init.zygote32.rc
- init.zygote32_64.rc
- init.zygote64.rc
- init.zygote64_32.rc
init.zygote64_32.rc
创建 zygote
和 zygote_secondary
服务
1 |
|
预加载系统类和资源
为了加快应用程序的启动,Android
会把系统常用的Java类
和一部分Framework
的资源放在Zygote
进程中进行预加载
。这些预加载
的类和资源在所有经zygote
进程fork
出的子进程
中是共享的。
1 |
|
title: 浅谈 Android Zygote
date: 2022-05-10 23:31:43
updated: 2022-05-10 23:31:43
categories: 操作系统
tags:
- 虚拟机
- Android,Zygote,Java,Magisk,Zygisk,Riru
Zygote 是 init
进程启动时创建的,通过 fork
(复制进程)的形式来创建应用程序进程和 SystemServer
进程。并且,Zygote 进程在启动的时候创建 DVM 或者 ART,因此通过fork
创建的应用程序进程和SystemServer
进程可以在内部获取一个DVM或者ART的实例副本。
首先,Android 应用跑的的是虚拟机,虚拟机中 Java 代码的不同才造成了应用的区别,而对于基础的运行环境,要求却是一样的。
其次,Zygote 在初始化时就会创建虚拟机,同时把需要的系统类库和资源文件加载的内存中。而 Zygote 在 fork 出子进程后,这个子进程也会得到一个已经加载好基础资源的虚拟机。
这样,接下来只需要装载 APK 相关的资源就可以运行了,可以做到提升效率
放一个进程树
1 |
|
Zygote 在 init
进程中以 service 方式启动,根据 ro.zygote
引入启动脚本,安卓 5.0 开始,Zygote 有了 32/64 位的分别,在 Android 12,ro.zygote
取值有四种:
- init.zygote32.rc
- init.zygote32_64.rc
- init.zygote64.rc
- init.zygote64_32.rc
init.zygote64_32.rc
创建 zygote
和 zygote_secondary
服务
1 |
|
预加载系统类和资源
为了加快应用程序的启动,Android
会把系统常用的Java类
和一部分Framework
的资源放在Zygote
进程中进行预加载
。这些预加载
的类和资源在所有经zygote
进程fork
出的子进程
中是共享的。
1 |
|
title: 浅谈 Android Zygote
date: 2022-05-10 23:31:43
updated: 2022-05-10 23:31:43
categories: Android
tags:
- 虚拟机
- Android,Zygote,Java,Magisk,Zygisk,Riru
Zygote 是 init
进程启动时创建的,通过 fork
(复制进程)的形式来创建应用程序进程和 SystemServer
进程。并且,Zygote 进程在启动的时候创建 DVM 或者 ART,因此通过fork
创建的应用程序进程和SystemServer
进程可以在内部获取一个DVM或者ART的实例副本。
首先,Android 应用跑的的是虚拟机,虚拟机中 Java 代码的不同才造成了应用的区别,而对于基础的运行环境,要求却是一样的。
其次,Zygote 在初始化时就会创建虚拟机,同时把需要的系统类库和资源文件加载的内存中。而 Zygote 在 fork 出子进程后,这个子进程也会得到一个已经加载好基础资源的虚拟机。
这样,接下来只需要装载 APK 相关的资源就可以运行了,可以做到提升效率
放一个进程树
1 |
|
Zygote 在 init
进程中以 service 方式启动,根据 ro.zygote
引入启动脚本,安卓 5.0 开始,Zygote 有了 32/64 位的分别,在 Android 12,ro.zygote
取值有四种:
- init.zygote32.rc
- init.zygote32_64.rc
- init.zygote64.rc
- init.zygote64_32.rc
init.zygote64_32.rc
创建 zygote
和 zygote_secondary
服务
1 |
|
预加载系统类和资源
为了加快应用程序的启动,Android
会把系统常用的Java类
和一部分Framework
的资源放在Zygote
进程中进行预加载
。这些预加载
的类和资源在所有经zygote
进程fork
出的子进程
中是共享的。
1 |
|