Lime

Android LSPosed Version

Look in my eyes!

强制“护眼”!不满足于Color OS温和的护眼提示,对于没有自制力的咱来说温和提示就是在害我啊!

Lime 是一个基于现代 LSPosed / libxposed API 的阅读距离保护模块。它读取 ColorOS 原生护眼检测产生的本地距离数值,在用户距离手机过近时逐渐增加屏幕模糊,引导用户把手机放远。

Lime 不采集、保存或上传前摄画面,也不修改 ColorOS 原生检测算法。距离信号只在手机本地处理。

功能

实时获取前摄检测人脸距离的数据,低于配置的距离,距离越近,屏幕越模糊,让你不得不强制拿远手机才能正常使用,强制回到健康的使用习惯。

  • 以最远清晰阅读位置作为个人距离参考值。
  • 过近时渐进式模糊,拉远后平滑恢复,避免突然跳变。
  • 现代 LSPosed API 102 模块,作用域只需要 com.oplus.eyeprotect。
  • 支持应用黑名单:黑名单应用不检测、不模糊;Lime 自身只检测、不模糊。
  • 支持摘戴眼镜、短暂移开面部后的信号恢复。
  • 支持暂停 5 分钟、Debug 实时距离、通知栏快捷瓷贴和最近任务隐藏。
  • 支持 Android 12 及以上,针对一加 PLZ110 / ColorOS 17 进行验证。
  • 首次打开提供使用引导,检查 LSPosed 连接、悬浮窗和通知权限。

背景

被年纪大了眼睛就不会继续近视的说法害得不浅,一把年纪了发现眼睛近视还在加深,Color OS 16加上了AI护眼,检测距离近/不眨眼会弹出提示,一开始觉得还挺惊喜后面发现毛用没有,因为提示对咱来说不顶用啊。 后面就想怎么做到强制把手机拿远一点呢,感谢现在前置摄像头都带上了对应的检测算法,可以低功耗实时识别检测,于是乎就有了这个东西。 目前需要lsposed hook系统节点获取距离数据,后面看是否能优化为无需hook。

工作方式

  1. ColorOS 护眼服务在本地完成前摄距离检测。
  2. Lime 模块在护眼进程中读取检测产生的数值,并通过受保护的本地控制通道转给 Lime 服务。
  3. Lime 服务根据标定值和当前前台应用判断是否生效。
  4. 距离过近持续约 1 秒后,模糊半径逐帧增加;用户拉远后逐帧减小。
  5. 信号过期、锁屏、黑名单应用、系统护眼任务占用检测器时,Lime 会停止模糊并等待恢复。

安装

1. 安装 APK

从 Release 下载 lime-daily.apk,安装包名为:

io.github.oosl.lime

2. 配置 LSPosed

在 LSPosed 中启用 Lime,作用域只选择:

护眼 / com.oplus.eyeprotect

Lime 使用现代 libxposed API 102,不需要旧版 XposedBridge 或 XposedHelpers。更新模块后通常只需重新启动护眼进程,不需要重启整机。

3. 授予权限

首次打开 Lime,按引导页完成检查:

  • 悬浮窗:用于在其他应用上显示渐进模糊层。
  • 通知:用于异常提醒、Debug 实时距离和前台服务运行状态。
  • 使用情况访问:用于识别当前前台应用,决定黑名单和生效范围;建议授予。
  • ColorOS 后台运行权限:将 Lime 设置为允许后台运行,避免切换应用后被系统暂停。

首次使用

  1. 打开 Lime,确认引导页显示 LSPosed [API 102] 已连接。
  2. 进入「距离标定」,保持日常使用的眼镜状态。
  3. 移动手机到最远仍能轻松读清的位置,开始 60 秒采样。
  4. 在同一位置确认三次,保存参考距离。
  5. 检查「应用黑名单」:桌面和 Lime 默认排除;需要保护的应用不要加入黑名单。
  6. 返回首页,打开「距离保护」。
  7. 在目标应用中缓慢靠近和拉远,确认模糊强度会平滑变化。

标定值是个人使用参考,不是医学或视力阈值。摘戴眼镜后建议重新标定。

状态与通知

  • 正常工作时保持安静,不反复弹出通知。
  • 发生模块未连接、权限缺失、信号过期或系统检测被占用时,发送临时异常提醒。
  • Debug 模式会持续显示实时距离,并提供实时通知;关闭 Debug 后不持续推送距离。
  • 通知类别由 Android 系统管理。前台服务通知用于保证后台稳定运行。
  • 快捷设置瓷贴可快速开启或停止距离保护。

故障排查

引导页显示 LSPosed 未连接

确认 LSPosed 作用域只包含 com.oplus.eyeprotect,然后打开系统护眼页面或在 Lime 的引导页点击「启动检查」。如果仍未连接,重启护眼进程后再试。

切换应用后没有模糊

确认当前应用不在黑名单,悬浮窗权限已授予,距离保护处于开启状态,并且 ColorOS 允许 Lime 后台运行。Lime 页面本身只检测、不模糊,这是预期行为。

出现信号过期

面对前摄并保持光线充足,等待系统检测恢复。若系统护眼正在执行其他检测任务,Lime 会暂时让行并自动重试。

模糊影响操作

短暂拉远手机即可恢复。也可以使用右上角状态指示器长按暂停 5 分钟,或从首页停止距离保护。

隐私与资源占用

Lime 不申请相机、网络或存储权限,不保存原始图像。日常只保存开关、黑名单和标定值;手动诊断才会在 Android 日志中记录距离数值、时间和性能信息。

检测由 ColorOS 本地服务完成,Lime 不承诺固定功耗比例;实际功耗取决于前摄检测、屏幕刷新率、前台应用和系统后台策略。

构建

环境要求:PowerShell 7、JDK 17、Android SDK,已验证 platform-android-37 与 build-tools 37.0.0。

./tools/build.ps1 -Sdk 'F:\Programs\Android\Sdk' -Jdk 'C:\Program Files\Java\jdk-17'

构建脚本会运行策略测试、编译 Release APK、压缩资源、对齐并校验 APK 签名。输出文件:

  • build/lime-daily.apk
  • build/lime-prototype.apk
  • build/lime-touchprobe.apk

开源致谢

应用内「关于 → 开源致谢」页面提供依赖版本、许可证和离线许可文本。

免责声明

Lime 是个人设备上的距离辅助工具,不能替代眼科检查、处方眼镜或专业护眼建议。不同设备、系统版本、光线和眼镜状态可能导致检测结果不同。

Releases

v1.0.0

Stable

10/21/2026, 7:02:18 AM

1.0.0 · 构建 16

正式版:完善首次使用引导、LSPosed 状态检查与发布文档。

历史构建记录

0.9.2 · 构建 15
精简首次引导中的 LSPosed 状态提示,仅显示连接状态与 API 版本。

0.9.1 · 构建 14
首次打开新增使用引导:说明原理与流程,并检查 LSPosed 模块、悬浮窗、通知和使用情况权限。

0.9.0 · 构建 13
应用包名迁移为 io.github.oosl.lime;升级为新应用身份,旧包需卸载后重新安装。

0.8.1 · 构建 12
预测性返回显示真实父页面,当前页随手势移出并缩小,撤回时平滑恢复;保留各页面滚动位置。

0.8.0 · 构建 11
界面按保护、设置、关于三个 Tab 分组;统一使用 COUI 开关、导航栏和箭头列表。
适配 Android 17,增加启动页退出动画、预测性返回手势反馈与安装更新后恢复保护。
接入 libxposed API 102 自动热重载:旧会话释放成功后加载新版,释放未完成时保留旧版。

0.7.3 · 构建 10
移除主页的常驻通知配置入口,通知类别仍由系统设置管理,保留 Debug 开关。

0.7.2 · 构建 9
瓷贴只保留一行:关闭时显示 Lime,开启时显示状态或 Debug 距离。
增加最近任务隐藏开关,隐藏任务卡片但不停止距离保护,可随时恢复显示。

0.7.1 · 构建 8
常驻运行状态、Debug 距离与异常提醒分离,主页可直达系统常驻通知开关。
快捷瓷贴使用短状态文字,并按关闭、等待、暂停、过近、异常与正常状态更新图标。
增大按钮高度与纵向间距,改善关于和开源致谢页面布局。

0.7.0 · 构建 7
增加通知栏 Lime 快捷瓷贴:切换距离保护,Debug 模式显示有效距离。
增加关于页面、版本信息复制、更新记录与开源致谢;支持离线阅读许可证和依赖列表。

0.6-optimized · 构建 6
启用代码与资源优化,日用安装包从约 28.29 MB 缩减至 2.63 MB。

0.5-overlay · 构建 5
合并轮廓光与模糊窗口;反复进入、退出模糊时复用窗口。

0.4-work-status · 构建 4
统一通知与主页工作状态;改进后台连接保留和恢复提示。

0.3-host-lease · 构建 3
通过 Binder 传递距离参数,改进后台检测连接。

早期原型
距离标定、渐变模糊、应用黑名单、连续诊断和 COUI 界面。

Assets

1