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

Android随笔-启动Zygote的rc文件是什么?

Zygote 启动使用rc 文件(init 配置文件),是因为 Android 的启动流程基于 init 进程 的启动机制设计。

一、rc 文件是什么

属性说明
全称init runtime configuration(init 运行时配置)
格式Android init 语言,类似脚本
位置/system/etc/init//vendor/etc/init/
作用定义系统服务如何启动、何时启动、以什么权限启动

二、Zygote 的 rc 文件示例

Android 系统中有两个 Zygote 相关的 rc 文件:

1. init.zygote64.rc(64位系统)

# 服务定义 service zygote /system/bin/app_process64 -Xzygote /system/bin --zygote --start-system-server class main # 属于 main 类别,系统启动时一起启动 priority -20 # 高优先级 user root # 以 root 用户运行 group root readproc reserved_disk socket zygote stream 660 root system # 创建 Socket,用于 AMS 连接 socket usap_pool_primary stream 660 root system # USAP 池 Socket onrestart write /sys/android_power/request_state wake # 重启时唤醒设备 onrestart restart audioserver onrestart restart cameraserver onrestart restart media onrestart restart media.tuner onrestart restart netd onrestart restart wificond writepid /dev/cpuset/foreground/tasks # 写入 cgroup

2. init.zygote32.rc(32位系统)

service zygote /system/bin/app_process32 -Xzygote /system/bin --zygote --start-system-server class main ...

三、为什么要用 rc 文件启动 Zygote

原因 1:统一的服务管理机制

Android 的init 进程(PID=1)是 Linux 内核启动后的第一个用户态进程,负责:

  • 挂载文件系统
  • 解析所有 rc 文件
  • 按规则启动系统服务

rc 文件是 init 进程管理服务的标准方式,Zygote 作为系统核心服务,自然遵循这个机制。

原因 2:定义启动参数和命令行

rc 文件中的 service 行定义了:

  • 可执行文件路径:/system/bin/app_process64
  • 启动参数:-Xzygote /system/bin --zygote --start-system-server
  • 这些参数决定了 Zygote 的启动模式
service zygote /system/bin/app_process64 -Xzygote /system/bin --zygote --start-system-server # ↑ 可执行文件 ↑ 参数传递给 app_process

app_process 是入口程序,它内部会:

  • 启动 ART 虚拟机
  • 加载 ZygoteInit 类
  • 调用 ZygoteInit.main()

原因 3:创建通信 Socket

rc 文件中这一行至关重要:

socket zygote stream660root system
作用说明
创建 Socket 文件/dev/socket/zygote
权限660(root 读写,system 组读写)
用途AMS 通过此 Socket 发送 fork 请求

为什么用 Socket 而不是 Binder?

  • Zygote 启动时,Binder 驱动还没准备好(或不需要)
  • Socket 更简单,fork 后子进程不需要继承复杂的 Binder 状态
  • 这是 Linux 原生 IPC,不依赖 Android 特有的 Binder 机制

原因 4:定义重启策略

onrestart write/sys/android_power/request_state wake onrestart restart audioserver onrestart restart cameraserver...

Zygote是守护进程(daemon),如果崩溃,init 会自动重启它。onrestart 定义了重启时需要联动的其他服务。

原因 5:资源隔离与权限控制

user root group root readproc reserved_disk writepid/dev/cpuset/foreground/tasks
  • Zygote 以root运行(因为 fork 后需要降权到应用 UID)
  • 通过 writepid 将进程加入 cgroup,实现资源调度

四、rc 文件 vs 直接启动的对比

方式缺点rc 文件的优势
内核直接启动 Zygote无法管理服务生命周期init 统一守护,崩溃自动重启
硬编码在 init 代码中修改需重新编译内核修改 rc 文件即可,无需编译
用脚本启动没有标准化机制Android init 语言标准化、可解析
手动创建 Socket容易出错rc 文件声明式定义,init 自动创建

五、完整启动链路

六、总结

rc 文件是 Android init 进程管理服务的标准配置方式。Zygote 通过 rc 文件启动,是为了:

  • 统一由 init 管理(启动、重启、监控)
  • 声明式配置(参数、权限、Socket、重启策略)
  • 解耦(修改启动方式无需重新编译系统)
http://www.jsqmd.com/news/1125235/

相关文章:

  • Resisting Bruteforce
  • 用EasyX库写一个按钮函数(Button)
  • Cadence 17.2 焊盘设计:从Flash Symbol创建到通孔焊盘集成的5步流程
  • DeepSeek-V2与V2.5技术对比:数学推理与代码生成能力实测
  • 基于PQ功率控制的三相并网逆变器仿真、锁相环PWM控制,附参考文献
  • Linux 服务器访问控制:组合使用 PAM wheel 组与 iptables 限制 SSH 来源
  • WIN10任务栏日期隐藏年显示星期几
  • uos-network-exporter与Grafana集成:打造可视化网络监控仪表板
  • PCA主成分分析法:数据降维与特征提取实战指南
  • AI 写作版本对比:别只问哪版更好,要问哪里变了
  • 重复视频清理工具 MD5+关键帧双重识别 智能查重去重 下载
  • 数据集切分策略:随机划分不一定适合时间序列任务
  • 天伟生物专利涉及圈养匹配与选址,养猪户了解技术方案要点
  • web安全代码基础-PHP(防护过滤操作)
  • 2026年联发科嵌入式岗位高频面试题带参考答案
  • OCamCalib 工具箱 v1.0:鱼眼相机标定 8 步实操,平均重投影误差 < 0.5 像素
  • Behat API测试实战:从配置陷阱到复杂场景编排的避坑指南
  • 一次OTA固件签名绕过事件的排查复盘
  • 电脑错误dll修复工具 运行库工具修复dll 缺失找不到dll丢失问题
  • 3D医学影像分割:基于TotalSegmentator等5个公开数据集的模型训练实战
  • 当“遇见小面”商标遇见“渝见小面”!
  • 图数据库与知识图谱构建实战
  • Linux /etc/fstab 配置详解:5个关键参数避免重启后挂载回退只读
  • 3个关键步骤让AirPods在Windows上重获完整功能:AirPodsDesktop终极解决方案
  • TwinCAT3实战:台达A2伺服扭矩读取与参数优化指南
  • 高清图像数据集 DIV2K 与 Flickr2K 超分实战:1900张图像预处理与数据增强3种策略
  • 软件测试面试总结分享
  • Rmarkdown动态文档创作与数据科学报告实战指南
  • 大疆 M3508 电机速度 PID 调参实战:从振荡到稳定,3 组参数对比分析
  • 【全网大测评】有没有降AI率的靠谱软件推荐?2026年亲测15款降AI率工具,帮你避坑省钱!