当前位置: 首页 > news >正文

Android14 init启动Zygote详解

on init阶段,已经启动了servicemanager, hwservicemanager, vndservicemangaer核心服务。

on init-late阶段中,在post-fs-data阶段之后会trigger zygote-start,从而启动zygote。

1 启动zygote的三种配置

为了适配不同设备的加密状态,按照ro.crypto.state属性值,确保各种配置服务都能启动成功。

属性值含义说明
unencrypted未启用磁盘加密常见于开发设备或旧设备
unsupported设备不支持加密可能因硬件限制
encrypted + file启用了 FBE(File-Based Encryption)Android 7+ 推荐的加密方式
on zygote-start && property:ro.crypto.state=unencrypted
or
on zygote-start && property:ro.crypto.state=unsupported
or
on zygote-start && property:ro.crypto.state=encrypted && property:ro.crypto.type=filewait_for_prop odsign.verification.done 1# A/B update verifier that marks a successful boot.exec_start update_verifier_nonencryptedstart statsdstart netdstart zygotestart zygote_secondary
  • odsign:On-device-Signing,是google的一种设备端签名验证机制,用于验证OTA包或者系统组件的完整性。
  • 在 zygote 启动前,必须确保 od 签名验证已完成,否则可能加载被篡改的代码。
  • update_verifier_nonencrypted:该Service负责在设备成功启动后,向update_engine 报告本次启动是“成功的”,从而将当前槽(slot)标记为“可信赖”,防止下次启动回滚。
  • statsd:stats Daemon,统计守护进程,收集系统级性能、功耗、应用行为等指标。
  • netd:network Daemon,负责管理网络接口(WIFI,Ethernet),实现防火墙、NAT、DHCP、DNS、带宽控制;提供 ConnectivityManager 的底层支持。
  • zygote:Android应用进程的孵化器。
  • zygote_secondary:若主zygote是64位,则zygote_secondary是32位(反之亦然)。

2 zygote Service的定义

  1. 快速启动:通过 USAP Pool 和高性能配置加速应用启动。
  2. 高可用性:onrestart 机制确保崩溃后能自愈。
  3. 系统稳定性:critical 配置防止系统陷入无限崩溃循环。
  4. 安全性:以 root 运行但限制通信权限(socket 权限控制)。
  5. 可配置性:通过属性(如 zygote.critical_window.minute)实现差异化策略。
service zygote /system/bin/app_process64 -Xzygote /system/bin --zygote --start-system-server --socket-name=zygoteclass mainpriority -20user rootgroup root readproc reserved_disksocket zygote stream 660 root systemsocket usap_pool_primary stream 660 root systemonrestart exec_background - system system -- /system/bin/vdc volume abort_fuseonrestart write /sys/power/state on# NOTE: If the wakelock name here is changed, then also# update it in SystemSuspend.cpponrestart write /sys/power/wake_lock zygote_kwlonrestart restart audioserveronrestart restart cameraserveronrestart restart mediaonrestart restart media.tuneronrestart restart netdonrestart restart wificondtask_profiles ProcessCapacityHigh MaxPerformancecritical window=${zygote.critical_window.minute:-off} target=zygote-fatal

2.1 Zygote Service选项

  • system/bin/app_process64:zygote的path。
  • -Xzygote:传递给ART虚拟机的选项,启用Zygote特定行为。
  • --zygote:告诉app_process以Zygote模式启动
  • --start--system-server:启动后立即fork并启动system_server进程。
  • --socket-name=zygote:创建一个名为Zygote的socket,用于接受启动新应用的请求。
  • Zygote启动-->system_server启动-->各个系统服务启动-->应用程序启动。

2.2 priority -20:

设置进程的 调度优先级(nice value) 为 -20(最高优先级)。

2.3 usap_pool_primary socket

socket usap_pool_primary stream 660 root system:创建usap_pool_primary socket,USAP(Unspecialized APP Process)池机制。Zygote预先fork一些空闲进程,放入池中,当有新应用请求时,直接specialize这些进程,大幅缩减应用启动时间,这是Android10+后的特性。

2.4 onrestart指令

onrestart exec_background - system system -- /system/bin/vdc volume abort_fuse

  • exec_background:后台执行,不阻塞重启流程
  • 调用vdc指令,终止fuse挂载,防止挂起。

onrestart write /sys/power/state on

  • 重启时唤醒系统(如果处于休眠状态),确保重启流程继续。

onrestart write /sys/power/wake_lock zygote_kwl

  • 重启时获取一个名为zygote_kwl的wakelock,防止系统在重启过程中休眠。

onrestart restart audioserver/ cameraserver/ media/ media.tuner/ netd/ wificond

  • 重启时重启一些列关键的native Service。

task_profiles ProcessCapacityHigh MaxPerformance

  • taks_profiles:12+引入的任务配置文件机制。
  • ProcessCapacityHigh:表示该进程需要高的CPU容量(适用于大核)。
  • MaxPerformance:要求CPU运行在最高性能模式。
  • 目的:确保 Zygote 在启动应用时能获得最佳 CPU 性能,减少应用启动延迟。

critical window=${zygote.critical_window.minute:-off} target=zygote-fatal

  • critical:表示该服务是关键服务
  • window=${zygote.critical_window.minute:-off}:如果zygote在指定时间窗口内崩溃超过4次,系统将触发reboot到recovery。如果 zygote.critical_window.minute 未设置,默认为 off(关闭此机制);否则,值为分钟数(如 5 表示 5 分钟内崩溃 4 次则重启)。
  • target=zygote-fatal:当达到崩溃阈值时,触发名为 zygote-fatal时间,通常在该事件中执行reboot recovery。

2.5 zygote_secondary定义

import /system/etc/init/hw/init.zygote64.rcservice zygote_secondary /system/bin/app_process32 -Xzygote /system/bin --zygote --socket-name=zygote_secondary --enable-lazy-preloadclass mainpriority -20user rootgroup root readproc reserved_disksocket zygote_secondary stream 660 root systemsocket usap_pool_secondary stream 660 root systemonrestart restart zygotetask_profiles ProcessCapacityHigh MaxPerformance

http://www.xdnf.cn/news/1465831.html

相关文章:

  • 必知!机器人的分类与应用:RPA、人形与工业机器人
  • 大数据毕业设计选题推荐-基于大数据的高级大豆农业数据分析与可视化系统-Hadoop-Spark-数据可视化-BigData
  • solidity函数篇
  • 5分钟征服Linux:20个神级命令+系统架构解密,让命令行恐惧症瞬间治愈!
  • 智能风险评估与欺诈检测系统
  • 普通键盘在MacOS上如何使用快捷键
  • 分布式常见面试题整理
  • k8s 部署 redis
  • springboot redis 缓存入门与实战
  • [bat-cli] 输出处理 | `OutputType` 和 `OutputHandle`
  • 基于华为云平台的STM32F103C8T6工业生产线温湿度监控系统
  • 深度学习书籍推荐
  • LangChain: Models, Prompts 模型和提示词
  • UE4 Mac构建编译报错 no member named “disjunction” in namespace “std”
  • 企业为何仍困在“数据孤岛”?——从iPaaS重构信息流的实践路径
  • 一个专为地图制图和数据可视化设计的在线配色网站,可以助你制作漂亮的地图!
  • Leetcode—2749. 得到整数零需要执行的最少操作数【中等】(__builtin_popcountl)
  • 嵌入式系统学习Day31(多路IO复用)
  • Android Studio新版本编译release版本apk实现
  • 在Ubuntu 20.04的服务器上查找的服务器的IP地址
  • 2025最全的软件测试面试八股文(含答案+文档)
  • 属性关键字
  • Kubernetes(k8s) po 配置持久化挂载(nfs)
  • Ansible 角色使用指南
  • js设计模式-状态模式
  • 腾讯最新开源HunyuanVideo-Foley本地部署教程:端到端TV2A框架,REPA策略+MMDiT架构,重新定义视频音效新SOTA!
  • 2025精选5款AI视频转文字工具,高效转录秒变文字!
  • MySQL集群——主从复制
  • MongoDB 源码编译与调试:深入理解存储引擎设计
  • solidity的高阶语法