FriendlySchool 对下面几个 App 做客户端侧净化:拦掉广告与后台采集的出口、收起营销入口, 同时保留刷卡、充值、余额、付款码这些真实业务。
做法上以拦出口为主:被拦的广告接口返回「该广告位已关闭」这类成功空响应,让 App 走它自己既有的正常分支, 而不是把请求打断、把状态机掐死。
安装:下载 APK → 装好 APK → 在 LSPosed 里启用本模块 → 重启目标 App(目标已在模块里声明,通常无需手动挑选)。
- Android 8.0(API 26)及以上;使用支持 libxposed API 102 的 LSPosed 框架。
- 模块包名:
io.github.shitianyaa.friendlyschool;当前版本:2.4.0(versionCode11)。 - 版本变更见 更新日志。
- 仅 LSPosed 入口:不提供桌面入口,请在 LSPosed 管理器中启用并管理模块。
- 旧包名
com.yiran.friendlyschool与本包可并存。迁移时先停用旧模块,再启用本模块并重启目标 App,避免重复 Hook。
兼容范围覆盖以下目标版本;其他版本尚未确认:
| 应用 | 已分析 / 验证的版本 |
|---|---|
| 易校园 | 7.8.7 |
| WakeUp 课程表 | 6.5.0–6.6.0(versionCode 540–550) |
| JMComic3 | 2.1.11 |
| 光影边框 | 3.4.5(versionCode 34500) |
| 酷安 | 16.6.4(versionCode 2609291) |
| 人民日报 | 7.4.3.1–7.4.3.2(versionCode 7431–7432) |
目标 App 更新建议(2026-10-24):易校园与 WakeUp 课程表非必要不更新——这两个目标的每次版本更新都会新增/更换广告 SDK 并重排混淆(易校园 7.8.7 新增 ZJ 广告 SDK 全套广告组件、WakeUp 6.6.0 混淆重排导致部分拦截失效),模块需要跟随适配。停留在已验证版本(易校园 7.8.7、WakeUp 6.5.0–6.6.0)净化效果最稳。
作者已在以下设备自测正常:
| 设备 | 系统 | 结果 |
|---|---|---|
| 一加 12 | Android 16 | 正常 |
| 红米 Turbo 3 | Android 17 | 正常 |
它自带的链路比较重:内置 2.2 MB 的 ELF curl 释放链与透明命令 Activity、广告 SDK 内嵌的 shell 工具、
面向 220 款应用的扫描名单(结果回传第三方域名)、剪贴板抓取,以及 15+ 家广告 SDK。模块的处理:
- 开屏直达:开屏页起来后直接走官方跳转,不再等广告回调;
- 广告全链路拦截:广告中枢与各广告 SDK 的加载/展示全断(开屏、插播、Banner、信息流、营销弹窗、公告位);
- 后台采集与命令执行拦断:应用列表扫描、剪贴板抓取、Mob 采集、快手探测,以及 curl / Shell / 命令 Activity;
- 界面精简:首页「课程表」入口与「今日课表」卡片、我的页签到/积分/礼包卡片隐藏;消息中心只留一卡通类通知。
- 去广告:开屏、插播、商城位、首页 banner 与弹窗全部关闭;
- 关掉付费链路:卖课 / 会员 / 收银台入口与会员专区全部拦断;
- 免登录:不弹登录页、不显示登录卡片(代价见下);
- 界面精简:底栏裁到「日程︱课表」、清除顶栏礼包图标与浮窗商城、隐藏「普通提醒」行;
- 免登录也能解锁外观功能:不登录账号时夜间 / 简洁模式照常来回切换并在重启后保持,皮肤预览返回不再卡住——做法是本地放行会员判断,服务端账号字段一律不修改;
(禁漫,成人内容站点客户端)
- WebView 层去广告:清空广告缓存的读写两侧并拦掉广告接口,所有广告位无事可做;
- 免广告分支(除「我的」页外):让 App 走它自己的「免广告会员」分支 —— 跳过纯广告封面,并让 2.1.10 新增的「补签」不再要求看满广告(点补签直接进入选日期)。只改
ad_free这一个显示标志,余额/到期/等级等其它字段保持服务端原值;「我的」页不伪造,会员卡显示真实等级; - 自动每日签到:用你自己的账号调官方接口签到,结果会在 App 内弹一条提示(
AUTO_CHECK_IN可关)。
(Flutter 应用,图片边框 / 水印编辑)
- 去广告:会员 / 广告开关全部收敛在一个本地设置键上,模块把它固定为「已开通」——开屏广告、导出页原生广告等 29+ 处广告位一处断开;
- 拔掉一条远程代码下发通道:该应用集成的某个广告 SDK 会用明文 HTTP 从裸 IP 拉配置与 AES 加密的 dex 并反射加载,且无任何完整性校验;模块直接拦断该配置请求(异步上报,不阻塞主流程);
边界:应用内「开通会员」入口的文案读的是服务端返回的会员对象(经 Dart 原生网络层),模块只能改本地设置、改不了这处显示,所以该入口仍会显示原样(不影响去广告效果)。
- 信息流与回复列表去广告:在列表处理前后过滤
sponsor广告卡片,保留普通帖子与回复; - 开屏去广告:两条展示路径都覆盖 —— 独立开屏页(含第三方 SDK 的开屏页)起后立即结束;嵌在主界面内的开屏 Fragment 走宿主原生的结束通道收尾,不留白、不卡顿。
- 开屏秒开直达:跳过开屏广告的加载与倒计时,启动后直接进入首页,导航栏与首页内容正常加载;
- 信息流去广告:信息流与各频道的商业推广卡片(长图、冠名卡、视频展播等)全部过滤,列表不留空白占位;
- 首页自动签到:每天进入首页后自动完成积分签到,成功给一次轻提示;未登录不执行,同一天不重复签,失败会自动重试,换账号后按账号分别记录。
- 目标 App 升级后可能失效:升级会改类名/方法名,这是所有 Xposed 模块的共同宿命;日志里会明确写出「找不到」的行。
- 会移除部分非广告入口:易校园的首页「课程表」入口、「今日课表」卡片与我的页三大积分卡片;WakeUp 的「我的」整页、三个底栏标签与「普通提醒」行。
- WakeUp 免登录的代价:课表只存本机 —— 云同步不可用,卸载 / 清数据 / 换设备会丢失(学校教务系统的导入页不受影响)。
- WakeUp 外观设置跟设备不跟账号:夜间 / 简洁模式存放在当前安装的应用数据里(模块自有键),不随账号切换;新键不存在时按当前账号的原值初始化,之后以本地值为准;清除应用数据或卸载后该设置丢失。
- WakeUp 付费皮肤未验证:皮肤样式数据与权限仍由服务端下发,本地放行 ≠ 服务端给数据,未购买皮肤的实际行为尚未确认。
- 易校园拦 shell 的副作用:App 自带的网速探测会失败;易校园自己的设备指纹持久化不在本模块范围内。
- JMComic3 会以你自己的账号发少量请求:签到(读日历 →[未签则]提交 → 回读校验;服务端「写后读」有延迟时最多再重读 5 次,故约 3~8 个请求)与一次有界的启动期状态采样(每 3 秒一次、最多 100 次,约 5 分钟后自停)。
- JMComic3 冷启动首页空白会自愈:约一半概率冷启动后首页空白(App 自身在广告被清空后的竞态)。模块检测到该状态会让页面自动重载一次(
sessionStorage.state跨重载存活,直接进首页);命中时你会看到约 1~2 秒的刷新。 - 有被服务端风控识别的可能:改客户端行为总有这个风险,请自行评估。
FriendlySchool 仅供 Android、LSPosed 相关技术研究、学习交流及个人设备使用。
本项目通过运行时 Hook 调整第三方应用的客户端行为,与相关应用、开发者、运营方及服务提供商不存在任何隶属、合作或官方关联关系。项目中提及的应用名称、商标及其他相关权利均归其各自权利人所有。
使用者应自行确认其使用行为符合所在地法律法规、第三方应用的用户协议及服务条款,并自行承担因应用升级、兼容性变化、账号限制、数据异常或其他原因产生的风险。
请勿将本项目用于违法、侵权、商业牟利或其他损害第三方合法权益的用途,并请尊重原应用开发者的劳动成果与正版服务。
- Telegram 频道:欢迎加入 FriendlySchool Release 频道 交流玩耍,获取第一手更新与发布资讯!
- 问题反馈:如果在日常使用中遇到 Bug 或异常,欢迎提交 Issue;
- 新应用适配:如果有想要支持或净化的校园 / 常用 App,非常欢迎提交 Issue 并附上应用名称、版本及相关功能诉求!
感谢 yylsping/coolapk-purifier。FriendlySchool 的酷安内嵌开屏广告处理参考了该项目 SplashEmbeddedHooks / SplashEmbeddedDispatch 的设计思路,包括在 Fragment 生命周期完成后复用宿主原生结束通道,以及按 Fragment 实例避免重复投递结束信号。
源码与构建方法见 shitianyaa/FriendlySchool。本仓库提供模块介绍与 APK Release。
本项目采用 MIT。
module/lib/api-102.jar 是 libxposed API 的编译桩,采用 Apache-2.0,来源与哈希见 依赖说明。它只用于编译期打桩,不会进入产物 dex。