LSPosed 模块,用来给作业帮去广告、去信息流、去推广与无关功能。不重打包原 APK。
⚠️ 本项目代码由 LLM(大语言模型)生成。 在人工指导下迭代并经真机试跑,但未经逐行安全审计。按「现状」提供,安装即自行承担后果;与作业帮 / 百度 / LSPosed 官方无关;不收集、不上传任何数据。以 MIT 开源。
- 适配版本:
com.zuoyebang.knowledge14.34.0 (1738) - 模块版本:1.2.9 (13),基于 libxposed API 102
- 运行环境:Android 9+(minSdk 24,targetSdk 34),需 LSPosed(支持 API 102 的版本)
| 模块 | 作用 |
|---|---|
AdBlocker |
拦截广告聚合层 com.fastad 全部 33 个适配器的 doLoadAD() / doShowAD()(穿山甲 / 优量汇 / 快手 / 百度都走这层) |
FeedKiller |
首页信息流、「科普专区」整列表隐藏并在数据层清零;DFeedListAdapter / DFeedFollowerAdapter 数据里再过滤广告与 VIP 推荐条目;首页 banner 位隐藏 |
ActivityBlocker |
开屏 / 回前台广告页、激励视频页、AI 解题页、各广告 SDK 落地页,创建即 finish() |
DialogKiller |
首页弹窗任务体系与新手引导浮层一律不展示 |
FloatKiller |
首页运营浮球不弹、不请求数据 |
HomeChromeKiller |
首页顶栏净化:搜索框、铃铛(通知)、红点角标全部隐藏;按文字干掉「绑定作业帮APP账号」推广卡 |
WebKiller |
H5 页面注入 JS:隐藏「AI解题」tab 与「讲解中」浮窗;解除复制限制(样式 + 事件拦截);答案页浮出「复制内容 / 存长图 / 下载图片」工具条,MutationObserver 持续生效 |
PageShot |
整页长截图:隐藏浮层与视频/广告卡 → 把 WebView 临时撑到整页高度、软件渲染 → 一次画完整页 → PNG 存相册(Pictures/zybclean)。不滚动不拼接,公式排版原样保留;空白则自动回退拼接方案 |
AnswerPageKiller |
原生视图层按文字隐藏底栏「问小帮」等 AI 入口(遍历 TextView,向上 3 层隐藏整个按钮容器) |
H5Bridge |
WebView 原生桥 zybcleanHost:写剪贴板、整页长截图触发、data-url/带 Cookie 下载图片,存到 Pictures/zybclean(MediaStore 优先,回落 FUSE + MediaScanner) |
FastStart |
把开屏页里 >800ms 的延时压到 250ms,缩短启动等待 |
调试探针(Probe / ViewDump / Snap / WebEyes)代码保留,需要在 HookEntry 里取消注释才启用。
- APK:Releases
- 每次提交的构建产物:Actions 最近一次成功运行 → Artifacts →
zybclean-apk
- 安装 APK。
- 作用域已在包里声明(
META-INF/xposed/scope.list=com.zuoyebang.knowledge),LSPosed 里启用模块即可,不需要手动勾选。 - 强制停止作业帮,重新打开。
不需要重启手机:作用域里只有普通 App 时,配置在目标 App 下次启动时生效。只有把「系统框架」放进作用域才必须重启。别去 kill lspd——它被杀后无法手动拉起,那才真的只能重启。
设备上没有 LSPosed 管理 App 时,用 ./enable_module.sh 直接写 LSPosed 配置库(同样不重启)。
./build.sh # 产出 zybclean.apk
./deploy.sh # scp 到真机并 pm install -r需要 JDK、Android SDK(platforms/android-*/android.jar、cmdline-tools/*/lib/r8.jar)、aapt / zipalign / apksigner,以及仓库内的 libs/libxposed-api-102.jar。不用 Gradle。也可以直接 push,由 .github/workflows/build.yml 在 CI 出包;打 v* tag 会发布 Release。
XposedBridge.log 不写 logcat,LSPosed 落在:
/data/adb/lspd/log/verbose_<开机时间>.log # grep ZYBCLEANsrc/io/github/sql0106/zybclean/ HookEntry(XposedModule 入口)+ 各 Killer + H5Bridge/PageShot + 探针
src/io/github/sql0106/zybclean/compat/ libxposed API 102 上的 legacy 兼容层
libs/libxposed-api-102.jar 编译期依赖(libxposed:api:102.0.0)
res/values/strings.xml 模块名与描述
module/META-INF/xposed/ module.prop / java_init.list / scope.list
AndroidManifest.xml 包信息(不再使用 xposed* meta-data)
analysis/NOTES.md 逆向分析与实测记录
analysis/EXPERIENCE.md 方法论与踩坑
- 作业帮资源 id 几乎全被混淆成同名
zyb,只能靠控件类名 + 层级/坐标 + 文字定位。 - 搜题结果页是 H5,AI 解题 tab、讲解浮窗都在网页里,native hook 无效 → 走 WebView JS 注入。
- 公式是 KaTeX/MathJax 结构或图片,纯文本提取必然残缺;要保真就整页长截图(
PageShot)。 - 长截图必须一次画完:滚动拼接会重复段落/留白线;而
WebView.draw()在硬件加速下拍不到内容,得先setLayerType(LAYER_TYPE_SOFTWARE)。 - 底栏「问小帮」是原生
StateTextView(在AISearchBottomInputView里),H5 规则管不到 → 由AnswerPageKiller按文字隐藏。 - WebView 默认禁长按选中,是 App 主动
setOnLongClickListener拦截的 → hook 后setResult(null)并强制setLongClickable(true)才能自由复制。