模块 WebUI 与配置系统开发——webroot、JS API 与持久化键值
WebUI:用网页给模块做界面
KernelSU 模块支持显示 UI 并与用户交互:任何 Web 技术(HTML+CSS+JS)写的页面都会被管理器用 WebView 展示。约定很简单——
模块根目录/
├── module.prop
└── webroot/
└── index.html # 必须存在,页面入口
安装模块时 KernelSU 自动设置 webroot 的权限与 SELinux context,不要手动改这个目录的权限。CSS、JS 等资源一并放进 webroot。
JavaScript API
KernelSU 发布了 npm 库 kernelsu,让页面获得系统能力。执行 shell 命令示例:
import { exec } from 'kernelsu';
const { errno, stdout } = await exec("getprop ro.product.model");
还能让网页全屏、显示 Toast 等,完整 API 以 npm 上的库文档为准。API 不够用可以到项目 issues 区提建议。
两个实用建议(来自官方文档)
localStorage可以存数据,但卸载管理器后会丢失;要持久保存就自己写文件到模块目录;- 简单页面用 parceljs 打包即可,零配置。
模块配置系统:给 WebUI 存数据
KernelSU 内置键值配置系统,存储在 /data/adb/ksu/module_configs/<模块ID>/,分两类:
- 持久配置 persist.config:重启保留,卸载模块时删除;
- 临时配置 tmp.config:每次启动的 post-fs-data 阶段自动清空;同键读取时临时值优先。
脚本里的操作命令:
value=$(ksud module config get my_setting) # 读
ksud module config set my_setting "some value" # 写持久
ksud module config set --temp runtime_state "on" # 写临时
ksud module config list # 列全部
限制:键最长 256 字节、值最长 1MB、每模块最多 32 项;键格式与模块 id 相同。
进阶技巧两则
- 动态覆盖描述:设置
override.description配置键,管理器里模块的描述文字会被运行时值替换,适合展示模块实时状态; - 声明管理功能:用
manage.su_compat、manage.kernel_umount键声明模块接管内核功能(语义见 设置项速览),管理器会显示接管关系并防止多模块冲突。
把 action 脚本(module.prop 的 actionIcon 快捷入口)与 WebUI 组合,可以做出「一键执行 + 图形设置」的完整模块交互体验。