Repository navigation
Releases: IamCanincan/KeyLens
Release list
KeyLens v3.0.2
3.0.2 - 2026-11-01
这一版才是「命令层只剩二进制」的发布包。已发布的 v3.0.1 资产仍是纯 shell/awk 那份(396 KB、
19 份backends/*.awk、没有bin/keylens),与本文档当时写的阶段 5 内容并不一致 —— 阶段 5 的
成果是从这一版开始真正进包的。
变更
- 命令层的实现只剩
bin/keylens,awk 参照实现不再随模块发布(阶段 5 收尾):19 份backends/*.awk
移进仓库的tests/fixtures/backends/(继续当 shell↔Rust 对拍的参照),发布包里的module/backends/
只剩被 source 的tricky.sh。配套三条:安装脚本发现包里没带bin/keylens就中止安装
(没有二进制就没有命令层,留着半残模块只会变成"我明明装了却不生效");带了就点名chmod 0755
(KernelSU 解包会把执行位抹成 644);三个真机台子都加了"参照 awk 必须推进 A/B 树"的前置——
缺了它 shell 那半边退化成「缺少 X.awk」,报出来的差异看着像实现写坏了。
sh tools/deploy-webui.sh --shell会把参照一起推上去。对拍网不变:rust/parity.sh仍 175 项全绿。
打包也跟着变:node tools/build-zip.mjs现在要rust/target/aarch64-unknown-linux-musl/release/keylens,
没有就拒绝出包(--check同样报缺bin/keylens)。选 musl 而不是aarch64-linux-android是实测定的:
Android target 默认动态链 bionic,CI 那道NEEDED=0的静态判据对它永远不成立;musl 自带 crt-static,
本机不用 NDK 就能交叉编译,而真机验证跑的正是这份产物。
修复
-
带命令层二进制的发布包里,「写入前预览」会真的写入(发布前必须修,别从这版之前的提交出包):
webui.sh的接管点排在「剥preview-前缀」之后,二进制收到的是一条不带前缀的写命令。
真机复现:点preview-omk-save-config之后config.toml的security_patch从auto变成2026-10-01,
界面拿到的是saved=1、连差异都没有。现在接管段排在剥前缀之前并认识preview-*:
成功就整份采用二进制打印的信封(preview=1/changed=N/diff=,不会打两份),
退码非 0(老命令层不认识preview-*,或它自己失败)回落 shell 原地预览。
本机已安装的模块bin/是空的,所以这台机没被波及。
闸:tests/rust-dispatch.sh的 preview 接管/回落 6 条,tests/device-preview.sh的三条腿逐字节 +
信封恰好一份 + 三条腿都不许落盘。 -
命令层二进制的预览落脚点:影子根以前只认
temp_dir(),而 Android 上没有/tmp。
TMPDIR 一坏,影子根建不出来 → 子进程什么都读不到 → 父进程照样报changed=0→ 界面把"没有差异"
当成无需确认直接写。现在按TMPDIR → /data/local/tmp → temp_dir依次找落脚点,
全都建不出来就退 2 交给 shell 算预览(宁可退化,不可谎报"没变化")。 -
写前预览不再谎报生效代价:OhMyKeymint 的
[trust]保存整块代价判定(apply_scope)原本连同"重启请求 + 日志条目"
一起留在KL_PREVIEW != 1的闸门后,于是预览把一次「四个补丁字段整组热生效」(同一条命令真写时报hot)
报成apply_scope=restart,界面据此提示"要重启 keymint"。代价是判据不是副作用,现在预览照常算;
留在闸门后的只剩重启请求与日志("还没真写,不能留假条目"这条要求不变)。
命令层的影子根预览同步对齐:预览时不再写restart.keymint、也不打apply_note=已请求重启 keymint(那句在预览里是假话)。
闸:rust/parity.sh新增 preview-* 11 例(逐字节 / 夹具不落盘 /changed>0正对照,含 hot·restart·reboot 三条臂),
真机侧新增tests/device-preview.sh。 -
module.prop的权限会跟着调用者的 umask 漂:命令层改描述走"写 tmp + 改名",
而改名会把 tmp 的权限带过去。shell 那份一直有显式补 chmod,移植到二进制时漏了 ——
真机上实测漂成过-rw-rw-rw-(整棵模块目录里唯一世界可写的文件)。现在两边同口径:
改名前记下原 mode、改名后补回;tmp 名也带上 pid(原来是固定名,两个进程会踩同一个临时文件)。 -
发布链自洽:
build-zip必须打进bin/keylens否则拒绝出包;安装脚本缺二进制就中止;
CI 的产物换成aarch64-unknown-linux-musl(NEEDED=0的静态判据对它才成立)。 -
versionCode用 12 位日期码会被 KernelSU 整个丢掉:ksud module list里 keylens 那条
没有versionCode字段(同目录 nomount 有"versionCode": "605")—— 12 位码超出它解析用的
32 位范围。管理器的更新检查按Int比较(v3.3.1 的Module.versionCode: Int+obj.optInt),
且只在ModuleUpdateSignature(updateJson, versionCode, …)变化时才重取。改成 10 位YYYYMMDDHH
(2026110123,到 2147 年都不越界)后 ksud 能正常读出;tests/module-desc.sh加了范围闸
和"12 位码必须被判红"的反面样本。
性能(同机交替、各取 5~6 次最快)
- 命令层壳的固定开销:把
webui.sh的二进制接管点从第 1273 行挪到第 54 行(在umask 077、
PATH 导出之后,在脚本自己的 70 KB 函数体之前 —— mksh 是边读边解析的),每条命令 6989ms → 2537ms。 - props 页:17 次单键
getprop改成一次全量 dump 查表,311366ms → 5991ms。 - env 页:同样吃快照,并把 shell 那套 19 键探针缓存落到二进制(两边共用
/data/adb/keylens.env.cache,
键 =v1|模块目录|module.prop 的 version|/system/build.prop 的 mtime,FRRO 强调色按 路径+mtime 判重编),
经界面入口 410 → 334 → 热 70~98ms。
测试
rust/parity.sh205 项逐字节对拍(含 preview 11 例、env 缓存 24 条)、cargo test72 项、
tests/*.sh50 套(WSL 与 Git Bash 各一遍)、11 条 node 静态闸,全部进 CI。- 真机台子:
device-ab(只读 17 + 写 21)、device-preview(16)、device-run-sync(14)、
device-env-cache(28)、device-six(83,teesim/tricky 六条的写与预览)、
device-omk-write(20,OMK 写路径的夹具真写)。
KeyLens v3.0.1
KeyLens v3.0.1
安装即接管旧名模块:从 TS-AUTO-ADD(id ts-auto-add)升级不再需要「先卸载再刷」。
- 安装脚本先跑
migrate_legacy_paths,把/data/adb/ts_auto.*与后端目录里的.ts_*搬到新名字(含旧版 OMK 状态目录/data/adb/ts_auto.omk); - 随后自动移除旧模块目录(
ts-auto-add/ts_auto)——旧目录留着会是两套service.sh同跑,两份守护进程各写同一份后端配置; - 后端自己的数据(
target.txt/config.json/injector.toml/keybox.xml)不受影响。
从旧 id 升级的机器刷这一次手动包,之后自动更新走新仓库(IamCanincan/KeyLens)的通道。
KeyLens v3.0.0
KeyLens v3.0.0
密钥认证后端控制台:Tricky Store / TEE Simulator / OhMyKeymint 三家统一读写。
本版亮点
- 写入前 diff 预览:后端配置保存先出「现文件 → 新文件」的行级差异,确认才落盘(不落盘、不建 .bak,预览时日志与重载请求一并闸住)。
- 界面重做:MD3 Expressive 设计语言,四格底栏 + 二级页,骨架屏、页面过渡、草稿保持、名单原地过滤。
- 一键体检 / 备份回滚 / 日志过滤:
doctor11 项只读体检、.bak列表一键回滚、日志关键字过滤。 - 性能:命令层按需加载写实现、kv 输出不逐行 fork、写后重取并行化。
- 三端适配:三家后端的解析/写回/结构校验按各家真实行为分叉,全套闸门(30+ 测试套)绿。
安装
下载 KeyLens-v3.0.0.zip,在 KernelSU / Magisk / APatch 管理器里刷入即可。
注:旧名(TS-AUTO-ADD / ts_auto)的机器请先卸载旧模块再装本版(模块 id 已改为
keylens)。
v2.2.19.5-yuzu
📋 核心变更摘要
本版新增本地日志缓冲(解决 logcat 记录一会儿就没了的问题),并完成一轮工程整理(换行符统一为 LF、CI 增加语法检查、.gitignore 精简、README 增加徽章与下载入口、提交历史压缩)。功能逻辑沿用 v2.2.19.4-yuzu 的四项修复,模块行为与现有配置无需改动。
从
v2.2.19.4-yuzu升级:只有日志缓冲是新增内容,覆盖刷入即可。
从更早版本升级:会一并获得下节列出的四项修复。
✨ 本版新增
📜 本地日志缓冲
- 除写入
logcat(tag 为TS-AUTO)外,日志还会写入/data/adb/ts_auto.log,每行带月-日 时:分:秒时间戳。 - 缓冲有固定上限:超过 64KB 时自动只保留末尾 200 行,不会无限增长;裁剪采用「先写临时文件、成功后再覆盖」的方式,不会因裁剪失败而丢日志。
- 文件权限为
600,且位于0700的/data/adb下,仅 root 可读,其它应用无法访问(旧版本放在/data/local/tmp,该目录所有应用可读)。 - 之所以要加缓冲:
logcat是内存环形缓冲(默认几百 KB,且由全系统共用),系统繁忙时旧记录很快被挤掉、重启即清空,事后排查往往已经看不到;缓冲文件则可跨重启保留。 - 缓冲文件不可写时静默退化为只写
logcat,不影响同步流程。 - 管理器的“操作”按钮优先展示缓冲内容,安装完成时会打印日志路径;卸载时缓冲文件随模块一并删除。
⚡ 本版优化
➕ 日志读取方式
-
点管理器“操作”按钮即可查看:
action.sh会同步一次,并附带打印最近 15 条日志(管理器以 root 运行,无需自己su),缓冲不存在时回退到logcat。 -
设备上手动查看(
/data/adb为0700,需要 root;在终端 App 里先su,或把命令写成su -c '...'):tail -n 50 /data/adb/ts_auto.log # 本地缓冲,跨重启保留(推荐) grep -E '后端|同步|失败|停止' /data/adb/ts_auto.log # 只看关键行 logcat -d -s TS-AUTO | tail -n 30 # 系统日志(重启即清空) logcat -s TS-AUTO # 实时跟随
-
电脑上查看(用
adb读logcat不需要 root,读/data/adb下的文件则需要):adb logcat -s TS-AUTO # 实时查看系统日志 adb shell su -c 'tail -n 50 /data/adb/ts_auto.log' # 读本地缓冲 adb shell su -c 'cat /data/adb/ts_auto.log' > ts_auto_log.txt # 导出到电脑
🧹 工程整理
- 换行符统一为 LF:新增
.gitattributes,对*.sh/*.awk/*.prop/*.json/*.md/*.yml等固定 LF,避免因 CRLF 导致 Android 上 shebang 解析失败(/system/bin/sh^M: not found);LICENSE一并由 CRLF 转为 LF。 - CI 增加语法检查:构建前对入口脚本、
lib/、backends/与META-INF内的脚本执行sh -n,语法不通过的代码不进包。 .gitignore精简:由 111 行压缩为 26 行,并修正原先会误忽略module/META-INF/下新增文件的规则。- README:增加 CI / Release / License 徽章与下载入口,区分正式发行版与带时间戳的 CI 测试包。
- 提交历史压缩:由 281 个提交(其中 236 个 merge 提交)压缩为单一提交,各历史版本仍可通过 tag(
v1.4.31.5~v2.2.19.5)查看。
🧹 模块结构分类(沿用)
- 文件分为三类:入口脚本(模块根目录)、
lib/共享库、backends/后端实现。 lib/按功能拆分:core(常量/状态/日志)、lock、tools、applist、backend、props,由common.sh统一加载;后端实现各自独立成文件(backends/tricky.sh写target.txt、backends/teesim.awk改config.json)。
🔋 省电与稳定(沿用)
- 无任何后台联网轮询;单进程同时监听
packages.list与rules.txt;2 秒防抖合并短时触发;通过内容指纹比对,仅在数据真实变化时同步。 - 日志只在开机与文件变化时写入(无事件不写),缓冲裁剪也只在超限时发生,不引入常驻开销。
🐛 沿用的修复(v2.2.19.4-yuzu 引入)
- 常驻列表末行无换行导致粘连:用
echo 包名 >> rules.txt追加的包名不再与上一行粘连(同步前自动补齐末行换行);文件开头的 UTF-8 BOM 也会被清除。 - 写入失败被误报成功:
target.txt替换失败(目录只读、文件被占用等)时如实返回失败 —— 描述标注⚠️、手动同步退出码1。 - inotify 探测方式错误:原先探测 busybox 时执行的是
busybox --help(不含 applet 帮助),导致仅装有 busybox 的设备被误判为“无 inotify 工具”而直接退出;现改为实际执行 applet 的--help。 inotifyd监听失效:inotifyd PROG FILE:mask会把PROG当作程序执行,原先传-不会产生任何输出;现改用echo打印事件,再由管道读取。
⚙️ 运行机制(沿用,未变)
- 后端判定按模块 id:
/data/adb/modules/tricky_store(Tricky Store / OSS)与/data/adb/modules/teesim(TEE Simulator);带disable标记的模块不计入,两个后端同时启用时模块直接停止(不做优先级选择)。 - TEE Simulator 只改
profiles.default.apps:keybox/mode/patchLevel/ 设备信息等字段,以及其它 profile(如ccc)均逐字节保留;无法可靠定位数组时放弃写入。 rules.txt支持#注释与空行,同步前自动补齐末行换行、清除 UTF-8 BOM。- 属性伪装在开机早期执行:
apply_resetprop位于post-fs-data.sh(Zygote 启动前),在Build.TYPE/Build.TAGS等静态字段取值前生效。 - 事件驱动:单进程 inotify 监听
packages.list与rules.txt,2 秒防抖,内容指纹比对;无联网、无定时轮询。
🗑️ 移除
- 全局可读的临时日志:不再产生
/data/local/tmp/ts_auto.log(该目录所有应用可读,存在被检测的风险);升级与卸载时会清理遗留文件。 - 安全补丁功能:不读取、不生成、不修改
security_patch.txt。 - 周期联网任务:无后台定时拉取。
📥 安装与操作指南
| 项目 | 说明 |
|---|---|
| 支持环境 | Tricky Store / Tricky Store OSS / TEE Simulator,配合 Magisk / KernelSU / APatch |
| 部署 | 刷入 ZIP 后重启 |
| 手动同步 | sh /data/adb/modules/ts-auto-add/action.sh |
| 状态查看 | 模块描述:✅ [后端 | 应用: X | 更新: HH:MM] |
| 日志 | 管理器“操作”按钮;tail -n 50 /data/adb/ts_auto.log(需 root)或 logcat -d -s TS-AUTO(电脑 adb logcat -s TS-AUTO) |
📁 数据文件路径
| 后端 | 判定(模块 id) | 维护目标 | 常驻列表 |
|---|---|---|---|
| TEE Simulator | teesim |
/data/adb/teesim/config.json(仅 profiles.default.apps) |
/data/adb/teesim/rules.txt |
| Tricky Store / OSS | tricky_store |
/data/adb/tricky_store/target.txt |
/data/adb/tricky_store/rules.txt |
运行文件(位于当前后端目录下):
| 文件 | 说明 |
|---|---|
.ts_daemon_pids.list |
后台子进程 PID 列表 |
.ts_fingerprint |
变更检测指纹缓存 |
.ts_lock / .ts_debounce / .ts_tmp |
运行时锁 / 临时文件 |
日志缓冲固定存放在 /data/adb/ts_auto.log(不在后端目录;权限 600、仅 root 可读,超过 64KB 时只保留末尾 200 行,卸载时删除)。
⚠️ 注意事项
- 两个后端不要同时启用:同时启用时模块直接停止,描述显示
⛔ [模块已停止 …];停用或卸载其中一个后重启即可恢复。 - TEE Simulator 模式需要
awk(系统自带或框架 busybox);缺失时模块会放弃写入配置并记录日志,装上 busybox 后会在下次同步时自动重试。 - 首次安装后请重启设备;编辑
rules.txt会自动触发同步,无需重启。 - 排查问题请优先查看本地缓冲
/data/adb/ts_auto.log:logcat中的记录可能已经被系统挤掉。 - 如需禁用属性重置:编辑
post-fs-data.sh,注释掉apply_resetprop后重启。 - 卸载时只删除本模块自身的文件(含日志缓冲),
target.txt/config.json保持不动。
💡 提示:本版以新增日志缓冲与工程整理为主,功能行为无变化;升级后无需改动任何现有配置。
版本:v2.2.19.5-yuzu | 更新日期:2026-09-14
v2.2.19.4-yuzu
🚀 TS-AUTO-ADD v2.2.19.4-yuzu
📋 核心变更摘要
本次更新以修复问题和提升稳定性为主:修复了上一版遗留的四处缺陷(常驻列表粘连、写入失败被误报成功、inotify 探测错误、inotifyd 监听失效),并将后端判定改为按模块 id 进行、两个后端同时启用时模块直接停止且把原因写入模块描述。此外,日志改为 logcat + 本地缓冲双写(解决 logcat 记录很快被覆盖丢失的问题),rules.txt 支持 # 注释。
✨ 新增
🧩 TEE Simulator 后端(按模块 id 判定)
- 判定依据改为
/data/adb/modules下的模块 id:tricky_store(Tricky Store / OSS)与teesim(TEE Simulator);带disable标记的模块不计入。 - TEE Simulator 模式下只替换
/data/adb/teesim/config.json的profiles.default.apps:keybox/mode/patchLevel/ 设备信息等字段,以及其它 profile(如ccc)均逐字节保留。 - 定点替换由
backends/teesim.awk完成,无法可靠定位数组时放弃写入,不会写坏配置;替换后内容与原来一致则不落盘。 - 两个后端同时启用时模块直接停止(不再做优先级选择)。
📝 常驻列表支持注释
rules.txt支持以#开头的注释行与空行;默认内容自带中文说明注释。- 同步前自动补齐末行换行、清除 UTF-8 BOM,避免包名被污染。
📜 本地日志缓冲
- 除写入
logcat(tag 为TS-AUTO)外,日志还会写入/data/adb/ts_auto.log,每行带月-日 时:分:秒时间戳。 - 缓冲有固定上限:超过 64KB 时自动只保留末尾 200 行,不会无限增长;裁剪采用「先写临时文件、成功后再覆盖」的方式,不会因裁剪失败而丢日志。
- 文件权限为
600,且位于0700的/data/adb下,仅 root 可读,其它应用无法访问(旧版本放在/data/local/tmp,该目录所有应用可读)。 - 之所以要加缓冲:
logcat是内存环形缓冲(默认几百 KB,且由全系统共用),系统繁忙时旧记录很快被挤掉、重启即清空,事后排查往往已经看不到;缓冲文件则可跨重启保留。 - 缓冲文件不可写时静默退化为只写
logcat,不影响同步流程。 - 管理器的“操作”按钮优先展示缓冲内容,安装完成时会打印日志路径;卸载时缓冲文件随模块一并删除。
📣 状态写入模块描述
- 运行状态直接写进
description:正常✅ [… ]、写入失败⚠️ [… 写入失败 …]、后端冲突⛔ [模块已停止 …],不看日志也能在管理器界面看到原因。
🐛 修复
- 常驻列表末行无换行导致粘连:用
echo 包名 >> rules.txt追加的包名不再与上一行粘连(同步前自动补齐末行换行);文件开头的 UTF-8 BOM 也会被清除。 - 写入失败被误报成功:
target.txt替换失败(目录只读、文件被占用等)时如实返回失败 —— 描述标注⚠️、手动同步退出码1。 - inotify 探测方式错误:原先探测 busybox 时执行的是
busybox --help(不含 applet 帮助),导致仅装有 busybox 的设备被误判为“无 inotify 工具”而直接退出;现改为实际执行 applet 的--help。 inotifyd监听失效:inotifyd PROG FILE:mask会把PROG当作程序执行,原先传-不会产生任何输出;现改用echo打印事件,再由管道读取。
⚡ 优化
➕ 日志改为双写(logcat + 本地缓冲)
-
日志同时写入
logcat(tag 为TS-AUTO)与/data/adb/ts_auto.log(超过 64KB 时只保留末尾 200 行),不再只依赖随时可能被系统刷掉的内存日志。 -
最省事的方式是在管理器里点模块的“操作”按钮 ——
action.sh会同步一次,并附带打印最近 15 条日志(管理器以 root 运行,无需自己su)。 -
设备上手动查看(
/data/adb为0700,需要 root;在终端 App 里先su,或把命令写成su -c '...'):tail -n 50 /data/adb/ts_auto.log # 本地缓冲,跨重启保留(推荐) grep -E '后端|同步|失败|停止' /data/adb/ts_auto.log # 只看关键行 logcat -d -s TS-AUTO | tail -n 30 # 系统日志(重启即清空) logcat -s TS-AUTO # 实时跟随
-
电脑上查看(用
adb读logcat不需要 root,读/data/adb下的文件则需要):adb logcat -s TS-AUTO # 实时查看系统日志 adb shell su -c 'tail -n 50 /data/adb/ts_auto.log' # 读本地缓冲 adb shell su -c 'cat /data/adb/ts_auto.log' > ts_auto_log.txt # 导出到电脑
🧹 模块结构分类
- 文件分为三类:入口脚本(模块根目录)、
lib/共享库、backends/后端实现。 lib/按功能拆分:core(常量/状态/日志)、lock、tools、applist、backend、props,由common.sh统一加载;后端实现各自独立成文件(backends/tricky.sh写target.txt、backends/teesim.awk改config.json)。
📐 代码规范化
- 统一中文注释与函数文档格式(说明 / 用法 / 返回码);界面与日志加入
✅/⚠️/❌/⛔状态标记,便于快速分辨。 - 新增
.gitattributes将脚本与文本文件固定为 LF,避免因 CRLF 导致 Android 上 shebang 失效(/system/bin/sh^M: not found);CI 增加sh -n语法检查,语法检查不通过的代码不会被打包。
🕐 属性伪装仍在开机早期执行
apply_resetprop在post-fs-data.sh(Zygote 启动前)执行,在Build.TYPE/Build.TAGS等静态字段取值前即已生效,修复了这些字段显示为userdebug的问题。
🔋 省电与稳定
- 无任何后台联网轮询;单进程同时监听
packages.list与rules.txt;2 秒防抖合并短时触发;通过内容指纹比对,仅在数据真实变化时同步。 - 日志只在开机与文件变化时写入(无事件不写),缓冲裁剪也只在超限时发生,不引入常驻开销。
🗑️ 移除
- 全局可读的临时日志:不再产生
/data/local/tmp/ts_auto.log(该目录所有应用可读,存在被检测的风险);升级与卸载时会清理遗留文件。 - 安全补丁功能:不读取、不生成、不修改
security_patch.txt。 - 周期联网任务:无后台定时拉取。
📥 安装与操作指南
| 项目 | 说明 |
|---|---|
| 支持环境 | Tricky Store / Tricky Store OSS / TEE Simulator,配合 Magisk / KernelSU / APatch |
| 部署 | 刷入 ZIP 后重启 |
| 手动同步 | sh /data/adb/modules/ts-auto-add/action.sh |
| 状态查看 | 模块描述:✅ [后端 | 应用: X | 更新: HH:MM] |
| 日志 | 管理器“操作”按钮;tail -n 50 /data/adb/ts_auto.log(需 root)或 logcat -d -s TS-AUTO(电脑 adb logcat -s TS-AUTO) |
📁 数据文件路径
| 后端 | 判定(模块 id) | 维护目标 | 常驻列表 |
|---|---|---|---|
| TEE Simulator | teesim |
/data/adb/teesim/config.json(仅 profiles.default.apps) |
/data/adb/teesim/rules.txt |
| Tricky Store / OSS | tricky_store |
/data/adb/tricky_store/target.txt |
/data/adb/tricky_store/rules.txt |
运行文件(位于当前后端目录下):
| 文件 | 说明 |
|---|---|
.ts_daemon_pids.list |
后台子进程 PID 列表 |
.ts_fingerprint |
变更检测指纹缓存 |
.ts_lock / .ts_debounce / .ts_tmp |
运行时锁 / 临时文件 |
日志缓冲固定存放在 /data/adb/ts_auto.log(不在后端目录;权限 600、仅 root 可读,超过 64KB 时只保留末尾 200 行,卸载时删除)。
⚠️ 注意事项
- 两个后端不要同时启用:同时启用时模块直接停止,描述显示
⛔ [模块已停止 …];停用或卸载其中一个后重启即可恢复。 - TEE Simulator 模式需要
awk(系统自带或框架 busybox);缺失时模块会放弃写入配置并记录日志,装上 busybox 后会在下次同步时自动重试。 - 首次安装后请重启设备;编辑
rules.txt会自动触发同步,无需重启。 - 排查问题请优先查看本地缓冲
/data/adb/ts_auto.log:logcat中的记录可能已经被系统挤掉。 - 如需禁用属性重置:编辑
post-fs-data.sh,注释掉apply_resetprop后重启。 - 卸载时只删除本模块自身的文件(含日志缓冲),
target.txt/config.json保持不动。
💡 提示:本版以修复问题为主,建议所有用户更新;升级后无需改动任何现有配置。
版本:v2.2.19.4-yuzu | 更新日期:2026-09-13
v2.1.08.3-yuzu
🚀 TS-AUTO-ADD v2.1.08.3-yuzu
📋 核心变更摘要
本次更新带来双后端支持:除 Tricky Store / Tricky Store OSS 外,新增对 TEE Simulator 的适配——自动探测 /data/adb/teesim/config.json,只替换 profiles.default.apps,其余字段与其它 profile 原样保留。同时完成模块结构分类与代码规范化,延续此前的精简、省电与反检测方向:无联网轮询、属性伪装在 Zygote 前执行、日志落在 root 专属目录。
✨ 新增
🧩 TEE Simulator 后端支持
- 自动探测
/data/adb/teesim/config.json;存在即使用 TEE Simulator 后端,否则使用 Tricky Store 后端。 - 只替换
profiles.default.apps:keybox/mode/patchLevel/ 设备信息等字段,以及其它 profile(如ccc)逐字节保留。 - 定点替换由
backends/teesim.awk完成,无法可靠定位数组时放弃写入,绝不写坏config.json;写入前后内容一致则不落盘。 - TEE Simulator 与 Tricky Store 互斥,两者同时存在时优先 TEE Simulator。
🕐 开机早期属性伪装(post-fs-data.sh)
- 在 Zygote 启动前执行属性重置。
- 修复
ro.build.type(userdebug→user)、ro.build.tags等在 JavaBuild.TYPE/Build.TAGS静态字段中已固化、后设无效的问题。
🔒 日志权限加固
- 日志位于 root 专属的
/data/adb/ts_auto.log,写入强制600权限,普通应用无法读取。
🐛 修复
- Build.TYPE 显示 userdebug:属性伪装由 late_start 提前至 Zygote 前的
post-fs-data.sh。 - 同步触发过于频繁:以源数据指纹(
packages.list包名集合 +rules.txt)比对,仅在真实安装/卸载或常驻列表变化时同步;失败不记录指纹,便于自动重试。
⚡ 优化
🧹 模块结构分类
- 文件分为「入口脚本(根目录)+
lib/共享库 +backends/后端实现」。 - 后端实现各自独立成文件:
backends/tricky.sh(写target.txt)、backends/teesim.awk(改config.json);lib/common.sh只保留通用逻辑。
📐 代码规范化
- 统一中文注释与函数文档格式(说明 / 用法 / 返回码)。
- 日志上限、锁超时提取为常量;同步流程收敛为单一
run_sync。
🔋 省电与稳定
- 无任何后台联网轮询;单进程同时监听
packages.list与rules.txt;2 秒防抖合并短时触发。 - 数据无变化不落盘;日志超过 256KB 自动截断(保留末尾 200 行)。
📂 不再区分系统/用户应用
- 常驻列表
taa_sys.txt更名为rules.txt(升级自动迁移);描述与日志只显示总应用数。
🗑️ 移除
- 安全补丁功能:不再读取、生成或修改
security_patch.txt。 - 周期联网任务:移除后台定时拉取任务。
📥 安装与操作指南
| 项目 | 说明 |
|---|---|
| 支持环境 | Tricky Store / Tricky Store OSS / TEE Simulator,配合 Magisk / KernelSU / APatch |
| 部署 | 刷入 ZIP 后重启 |
| 手动同步 | sh /data/adb/modules/ts-auto-add/action.sh |
| 状态查看 | 模块详情页 description:[后端 | 应用: X | 更新: HH:MM] |
| 日志 | /data/adb/ts_auto.log |
📁 数据文件路径
| 后端 | 维护目标 | 常驻列表 | 运行文件 |
|---|---|---|---|
| TEE Simulator | /data/adb/teesim/config.json(仅 profiles.default.apps) |
/data/adb/teesim/rules.txt |
同目录下 .ts_* |
| Tricky Store / OSS | /data/adb/tricky_store/target.txt |
/data/adb/tricky_store/rules.txt |
同目录下 .ts_* |
通用文件:
| 文件 | 说明 |
|---|---|
.ts_daemon_pids.list |
后台子进程 PID 列表 |
.ts_fingerprint |
变更检测指纹缓存 |
.ts_lock / .ts_debounce / .ts_tmp |
运行时锁 / 临时文件 |
/data/adb/ts_auto.log |
模块运行日志(600) |
⚠️ 注意事项
- TEE Simulator 模式下只动
defaultprofile 的apps,其它 profile 与其它字段不会被修改。 - TEE Simulator 模式需要
awk(系统自带或框架 busybox);缺失时模块放弃写入配置并记录日志,安装 busybox 后会自动重试。 - 首次安装后请重启设备。
- 编辑
rules.txt会自动触发同步,无需重启。 - 如需禁用属性重置:编辑
post-fs-data.sh,注释apply_resetprop后重启。
💡 提示:一个模块同时适配 Tricky Store 与 TEE Simulator,更轻量、更省电、属性伪装更早生效。
v2.0.97.2-yuzu
🚀 TS-AUTO-ADD v2.0.97.2-yuzu
📋 核心变更摘要
本次更新以精简、省电与反检测为核心目标:彻底移除安全补丁同步与后台联网轮询,属性伪装提前到 Zygote 启动前执行,运行日志迁移至 root 专属目录。模块职责收敛为「维护应用列表(target.txt)+ 系统属性伪装」两件事,仅面向 Tricky Store / Tricky Store OSS。
✨ 新增
🕐 开机早期属性伪装(post-fs-data.sh)
- 新增
post-fs-data.sh,在 Zygote 启动前执行属性重置。 - 修复
ro.build.type(userdebug→user)、ro.build.tags等在 JavaBuild.TYPE/Build.TAGS静态字段中已固化、后设无效的问题。
🔒 日志权限加固
- 日志迁移至 root 专属的
/data/adb/ts_auto.log,写入强制600权限,普通应用无法读取。
🐛 修复
- Build.TYPE 显示 userdebug:属性伪装由 late_start 提前至 Zygote 前的
post-fs-data.sh,彻底解决 Java 静态字段固化导致的后设无效。 - 同步触发过于频繁:新增源数据指纹(
packages.list包名集合 +rules.txt)比对,仅在真实安装/卸载或常驻列表变化时同步。
⚡ 优化
🧹 代码结构精简
common.sh统一提供日志、锁、应用列表同步、描述更新、inotify 探测与属性伪装函数;action.sh/service.sh/customize.sh/post-fs-data.sh复用,同步流程收敛为单一run_sync。
🔋 省电与稳定
- 无任何后台联网轮询;两个 inotify 监听合并为单一进程;数据无变化不落盘;日志超过 256KB 自动截断。
📂 不再区分系统/用户应用
- 常驻列表文件
taa_sys.txt更名为rules.txt(升级自动迁移);描述与日志只显示总应用数:
[应用: X | 更新: HH:MM]
🗑️ 移除
- 安全补丁功能:不再读取、生成或修改
security_patch.txt。 - 周期联网任务:移除后台定时拉取任务。
📥 安装与操作指南
| 项目 | 说明 |
|---|---|
| 支持环境 | Tricky Store / Tricky Store OSS,配合 Magisk / KernelSU / APatch |
| 部署 | 刷入 ZIP 后重启 |
| 手动同步 | sh /data/adb/modules/ts-auto-add/action.sh |
| 状态查看 | 模块详情页 description:[应用: X | 更新: HH:MM] |
| 日志 | /data/adb/ts_auto.log |
📁 数据文件路径(/data/adb/tricky_store/)
| 文件 | 说明 |
|---|---|
target.txt |
自动维护的应用包名列表(供 Tricky Store / OSS) |
rules.txt |
常驻应用列表(并入 target.txt,可手动编辑) |
.ts_daemon_pids.list |
后台子进程 PID 列表 |
.ts_fingerprint |
变更检测指纹缓存 |
.ts_lock / .ts_debounce / .ts_tmp |
运行时锁/临时文件 |
/data/adb/ts_auto.log |
模块运行日志 |
⚠️ 注意事项
- 仅搭配 Tricky Store / Tricky Store OSS 使用。
- 首次安装后请重启设备。
- 编辑
rules.txt会自动触发同步,无需重启。 - 如需禁用属性重置:编辑
post-fs-data.sh,注释apply_resetprop后重启。
💡 提示:更轻量、更省电、属性伪装更早生效。
v1.9.86.1-yuzu
🚀 TS-AUTO-ADD v1.9.86.1-yuzu
📋 核心变更摘要
本次更新是一次重大架构升级,核心目标是增强兼容性、提升稳定性、优化代码可维护性。主要方向包括:全面模块化重构、双 inotify 模式支持、事件防抖机制引入、系统白名单分离管理、本地日志持久化、补丁获取策略优化,以及属性注入脚本精简。推荐所有用户更新至此版本。
✨ 新增
🧩 公共函数库(common.sh)
- 新增
common.sh集中管理日志、锁、日期处理、网络检测、inotify 工具探测、补丁更新核心及模块描述更新等通用逻辑。 - 消除
service.sh与action.sh之间的代码重复,复用率提升约 60%,维护更轻松。
🔄 双 inotify 模式支持
- 自动检测系统可用的 inotify 工具(
inotifywait或inotifyd),优先采用兼容模式。 - 解决了部分精简 ROM 缺少
inotifyd导致监听完全失效的问题。
🛡️ 事件防抖机制
- 引入防抖锁(
.ts_debounce),将短时内多次触发合并为一次同步,避免频繁写入文件,降低系统负载。
📂 系统白名单分离
- 新增
taa_sys.txt存放需永久保留的包名(默认 Google 三件套),与第三方用户应用分开管理,便于用户自定义维护。
📝 本地日志记录
- 所有运行日志同时写入
/data/local/tmp/ts_auto.log,方便离线排查问题,同时保留系统日志输出。
🌐 网络连通性检测
- 补丁更新前先检测网络可用性,若不可用则延迟重试,避免无效请求,提升稳定性。
🔗 进程统一管理
- 所有守护子进程 PID 统一记录至
.ts_daemon_pids.list,卸载时能一次性全部终止,不留残留。
🐛 修复
- 监控组件兼容性:解决部分设备因缺乏
inotifyd导致后台监听完全失效的问题。 - 并发冲突处理:完善锁机制超时逻辑,避免因异常退出造成永久死锁。
- 补丁获取失败回退:在线获取补丁失败时,可靠地回退至系统日期,确保配置始终有效。
- 安装脚本错误处理:增加对
common.sh加载失败的检测,防止安装进程在不完整状态下继续。
⚡ 优化
🧹 代码架构重构
- 核心功能抽离至
common.sh,service.sh和action.sh专注于调度逻辑,代码结构更清晰。
🌍 补丁获取源调整
- 切换至
source.android.com域名,增加重试机制(最多 2 次),提高网络获取成功率。
⏱️ 补丁更新频率优化
- 日常检查间隔调整为 6 小时(原 12 小时),网络不通时自动延长至 12 小时,平衡实时性与资源消耗。
📊 模块描述增强
description字段区分显示“系统应用数”与“用户应用数”,信息更细致,便于状态评估。
🔧 属性注入脚本精简
- 移除 MIUI、Realme 等厂商特定属性,仅保留通用核心属性,增强跨设备兼容性,降低副作用风险。
🚀 应用列表生成性能
- 合并文件时采用管道流式处理,减少中间临时文件操作,提升执行效率。
📋 日志内容规范化
- 所有日志使用统一格式,包含时间戳和级别标识,便于筛选和分析。
🗑️ 移除
- 冗余的厂商属性:删除 MIUI、Realme 专用属性(如
ro.secureboot.lockstate、ro.boot.realmebootstate等),避免在不支持的设备上引起意外行为。
📥 安装与操作指南
部署
通过 Magisk、KernelSU 或 APatch 管理器刷入 ZIP 压缩包。
初始化
重启设备以触发 service.sh 守护进程。
状态查询
查看模块详情页的 "说明/简介" 栏即可获得实时运行状态(系统应用数 / 用户应用数 / 补丁详情 / 更新时间)。
手动触发
| 操作 | 命令 |
|---|---|
| 标准同步(遵循缓存策略) | sh /data/adb/modules/ts-auto-add/action.sh |
| 强制在线刷新(忽略缓存) | sh /data/adb/modules/ts-auto-add/action.sh --force |
📁 数据文件路径
所有运行时文件存储于 /data/adb/tricky_store/:
| 文件 | 说明 |
|---|---|
target.txt |
当前自动同步的应用包名列表 |
taa_sys.txt |
系统白名单(可手动编辑) |
security_patch.txt |
安全补丁日期配置文件 |
.ts_daemon_pids.list |
所有后台子进程 PID 列表 |
.ts_lock |
互斥锁目录 |
.ts_debounce |
防抖锁目录 |
.last_month |
月份缓存文件 |
/data/local/tmp/ts_auto.log |
模块运行日志 |
⚠️ 注意事项
- 本模块需配合 Tricky Store 或 TEE Simulator 使用。
- 若遇到同步异常,请查看
/data/local/tmp/ts_auto.log或通过action.sh终端输出定位问题。 - 首次安装后请务必重启设备,确保后台守护进程正常启动。
- 如需自定义系统白名单,编辑
taa_sys.txt即可,修改后会自动触发同步,无需重启。 - 如需禁用属性重置,删除
/data/adb/service.d/taa_resetprop.sh并重启。
📚 完整更新历史
详细变更请参阅模块根目录下的 CHANGELOG.md 文件。
💡 提示:本次为重大版本升级,建议所有用户更新以获得最佳兼容性和稳定性。
v1.8.75.9-yuzu
🚀 TS-AUTO-ADD v1.8.75.9-yuzu
📋 核心变更摘要
本次更新聚焦于安全补丁配置统一化与应用列表生成健壮性优化,消除安全补丁字段之间的行为差异,并修复在特定场景下可能出现的空白条目问题。
⚡ 优化
🧩 安全补丁配置统一
security_patch.txt中的system字段值由固定字符串prop改为动态日期$FINAL_DATE,与boot、vendor字段保持一致。- 确保 Tricky Store / TEE Simulator 读取到的补丁日期在三个分区中完全统一,避免因配置不匹配导致的异常行为。
🧹 应用列表生成健壮性
- 在生成
target.txt的管道中增加空行过滤(sed '/^$/d')。 - 当系统中无任何第三方应用时,不再出现空白行,保证行数统计与后续解析的准确性。
📥 安装与操作指南
部署
通过 Magisk、KernelSU 或 APatch 管理器刷入 ZIP 压缩包。
初始化
重启设备以触发 service.sh 守护进程。
状态查询
查看模块详情页的 "说明/简介" 栏即可获得实时运行状态。
手动触发
| 操作 | 命令 |
|---|---|
| 标准同步(遵循缓存策略) | sh /data/adb/modules/ts-auto-add/action.sh |
| 强制在线刷新(忽略缓存) | sh /data/adb/modules/ts-auto-add/action.sh --force |
📁 数据文件路径
所有运行时文件存储于 /data/adb/tricky_store/:
| 文件 | 说明 |
|---|---|
target.txt |
当前自动同步的应用包名列表 |
security_patch.txt |
系统安全补丁日期配置文件 |
.ts_daemon.pid |
主监控进程 PID |
.ts_patch.pid |
补丁更新进程 PID |
.ts_lock |
互斥锁目录 |
.last_month |
月份缓存文件 |
⚠️ 注意事项
- 本模块需配合 Tricky Store 或 TEE Simulator 使用。
- 若遇到同步异常,请通过
action.sh查看终端输出的同步日志。 - 首次安装后请务必重启设备,确保后台守护进程正常启动。
📚 完整更新历史
详细变更请参阅模块根目录下的 CHANGELOG.md 文件。
💡 提示:如需了解各版本之间的差异,可查看 CHANGELOG.md 获取完整更新记录。
v1.7.64.8-yuzu
🚀 TS-AUTO-ADD v1.7.64.8-yuzu
📋 核心变更摘要
本次更新聚焦于进程管理完善与 Shell 兼容性修复,解决了后台进程残留和部分设备上属性重置脚本无法正常执行的问题,同时增强了手动工具的健壮性与可控性。
✨ 新增功能
🔐 补丁更新进程 PID 管理
- 新增
.ts_patch.pid文件,独立记录安全补丁后台更新进程的 PID。 - 解决模块升级或重新安装时,旧版补丁更新进程无法被清理导致的多进程残留问题。
🛠️ 手动工具增强 (action.sh)
- 增加互斥锁机制(
LOCK_DIR),避免与后台守护进程并发操作导致文件冲突。 - 新增
--force/-f命令行参数,支持强制清除月份缓存并重新在线获取安全补丁日期。 - 保留
.last_month月份缓存,仅在月份变更或强制模式下发起网络请求,减少不必要的流量消耗。
📦 安装与卸载流程完善
customize.sh安装时同步清理新增的.ts_patch.pid文件。uninstall.sh卸载时增加对补丁更新进程的终止和 PID 文件删除,确保完全卸载无残留。
🐛 修复
🖥️ Shell 兼容性修复
- 将
taa_resetprop.sh中的 Bash 专有语法[[ ... = *...* ]]改为 POSIX 兼容的case语句匹配,确保在 Android 默认 shell(mksh / ash)下正常运行。 - 修复
check_reset_prop函数中变量未加双引号导致的空值语法错误。
🔒 锁死锁风险修复
- 为
acquire_lock增加 30 秒超时机制,超时后强制删除残留锁目录,防止进程异常退出导致永久死锁。
🌐 网络请求被拒修复
- 为
fetch_online_date中的 curl / wget 添加User-Agent请求头,模拟浏览器访问,降低被服务器拒绝连接的可能。
⚡ 优化
📡 安全补丁获取策略
update_security_patch与action.sh现支持循环尝试多个备用 URL,提高网络获取成功率。
📝 代码可维护性
- 全面梳理所有脚本注释,使用中性技术描述,移除主观修饰词,提升代码可读性与团队协作效率。
📊 安装日志细化
customize.sh增加对taa_resetprop.sh文件存在性的检查与部署状态提示,安装过程更加透明。
📥 安装与操作指南
部署
通过 Magisk、KernelSU 或 APatch 管理器刷入 ZIP 压缩包。
初始化
重启设备以触发 service.sh 守护进程。
状态查询
查看模块详情页的 "说明/简介" 栏即可获得实时运行状态。
手动触发
| 操作 | 命令 |
|---|---|
| 标准同步(遵循缓存策略) | sh /data/adb/modules/ts-auto-add/action.sh |
| 强制在线刷新(忽略缓存) | sh /data/adb/modules/ts-auto-add/action.sh --force |
📁 数据文件路径
所有运行时文件存储于 /data/adb/tricky_store/:
| 文件 | 说明 |
|---|---|
target.txt |
当前自动同步的应用包名列表 |
security_patch.txt |
系统安全补丁日期配置文件 |
.ts_daemon.pid |
主监控进程 PID |
.ts_patch.pid |
补丁更新进程 PID(v1.7.64.8 新增) |
.ts_lock |
互斥锁目录 |
.last_month |
月份缓存文件 |
⚠️ 注意事项
- 本模块需配合 Tricky Store 或 TEE Simulator 使用。
- 若遇到同步异常,请通过
action.sh查看终端输出的同步日志。 - 首次安装后请务必重启设备,确保后台守护进程正常启动。
📚 完整更新历史
详细变更请参阅模块根目录下的 CHANGELOG.md 文件。
💡 提示:如需了解各版本之间的差异,可查看 CHANGELOG.md 获取完整更新记录。