
为什么Droidspaces的容器在Android上杀不死深度解析init.rc与用户态双Daemon模式架构【免费下载链接】Droidspaces-OSSA lightweight, LXC-like container runtime for Android and Linux. Run full Linux distributions natively with zero performance penalty项目地址: https://gitcode.com/gh_mirrors/dr/Droidspaces-OSSDroidspaces是一款轻量级的 Linux 容器运行时container runtime让你直接在 Android 手机上运行完整的 Linux 发行版支持 systemd、OpenRC 等 init 系统零性能损耗。很多用户都有过这样的困扰容器跑得好好的被系统顺手杀掉就再也没起来。Droidspaces 的杀不死魔法来自它的init.rc 原生集成 用户态 Magisk 模块双 Daemon 守护模式架构。本文带你读懂这套机制的工作原理。为什么Android上的容器容易被杀死Android 的内存管理非常激进系统 OOM Killer 会随时清理后台进程App 被划掉、低电量回收、系统升级都可能导致容器进程消失。普通的容器工具只是启动一个进程进程死了就死了。Droidspaces 的思路是把守护容器这件事交给 Android 系统最底层的管家——init 进程或者一个由开机脚本拉起、随时可复活的常驻 Daemon。这就是所谓的双 Daemon 模式模式守护者是否需要刷分区特点用户态 DaemonMagisk 模块开机脚本启动的droidspaces daemon否装模块即可部署简单可热更新init.rc 原生集成Android 系统的 init 进程是需修改vendor.img最深集成被杀后由 init 自动拉起模式一用户态 Daemon —— Magisk 模块双脚本接力Droidspaces 附带一个 Magisk 模块核心是两个脚本接力完成守护post-fs-data.sh在开机最早期拉起 Daemon数据分区挂载完成后post-fs-data.sh 就会检查标记文件/data/local/Droidspaces/.daemon_mode若值为1则启动droidspaces daemon。它还会先用chcon把二进制打上droidspacesd_exec的 SELinux 标签确保 Daemon 能顺利切换到自己的 SELinux 域。 这个标记文件由 App 通过 DaemonModeRepository.kt 以 root 权限写入你在设置页里开开关背后就是往磁盘上写一个1。service.sh开机自启容器 状态自检启动完成后service.sh 接管等待网络和sys.boot_completed1然后扫描所有run_at_boot1的容器配置按run_at_boot_priority从小到大逐个拉起还内置了网关容器优先逻辑——路由器没起来就不会去起依赖它的客户端容器。最后把运行状态写进 module.prop你在模块管理器里看到的 状态灯就来自这里。模式二init.rc 原生集成 —— 让 init 亲自守护这是杀不死的终极形态。Droidspaces 把服务注册进 Android 的 init.droidspaces.rcon post-fs-data阶段自动start droidspacesd让 daemon.c 以--foreground前台模式运行关键是onrestart指令只要 Daemon 被 OOM Killer 杀掉或崩溃init 会立刻重启它并顺带触发droidspaces_autoboot重新拉起所有自启容器on property:sys.boot_completed1触发开机自启脚本完成开机即启动容器的闭环。集成方式支持两种详见 init/README.md符号链接法推荐在/vendor/bin/droidspaces建软链指向 App 目录以后升级二进制不用重新刷分区二进制直置法把静态编译的二进制直接放进/vendor分区更自包含但升级需重刷。配套的 SELinux 策略见 droidspaces_symlink.cil 和 droidspaces_binary.cil保证droidspacesd域能通过内核的 namespace 系统调用检查这正是普通 root 环境下常被 seccomp 拦截的地方。如何验证 Daemon 是否在工作✅init 模式执行getprop init.svc.droidspacesd返回running即成功模块模式查看模块管理器中module.prop的描述行显示 Running (PID xxx)表示 Daemon 存活通用cat /data/local/Droidspaces/.daemon_mode值为1表示守护模式已启用日志位于/data/local/Droidspaces/Logs/boot-module.log。⚠️ 小提示若刷入 vendor 后启动循环bootloop官方文档指出 90% 的概率是 SELinux CIL 策略文件中的某个域在你的系统里不存在按dmesg中secilc报的行号删掉对应规则即可。小结Droidspaces 的杀不死本质是把看门狗做进了 Android 的启动链路init.rc 模式下由系统 init 提供onrestart级自动复活Magisk 模块模式下由 post-fs-data/service 双脚本在开机最早期接管 Daemon 与自启容器。两者叠加 systemd/OpenRC 容器内 init构成从内核启动到用户态的完整守护链——这也是 Features.md 中它区别于普通终端模拟器的核心能力。想动手实践可以从 App 内的 Daemon 模式开关入手进阶再折腾 vendor 集成。【免费下载链接】Droidspaces-OSSA lightweight, LXC-like container runtime for Android and Linux. Run full Linux distributions natively with zero performance penalty项目地址: https://gitcode.com/gh_mirrors/dr/Droidspaces-OSS创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考