目标是修改编译lsposed, 实现默认hook所有app, 并且自动hook 新安装的app, 无须勾选模块作用域立即生效
下载LSPosed_mod源码
jdk版本
jdk 21
查看workflows
并没有太大的价值, 因为最新的action他也编译不过…
拉取子模块
拉取libxposed
编译失败

因为最新版本的libxposed已经删除注解

这也是github上actions编译Lsposed失败的问题
三种方式修复
- checkout libxposed删除annotations包之前的版本
- 从DisableFlagSecure仓库中拷贝libxposed-compat子模块
- 复制libxposed-compat中的
annotations包到libxposed/api中, 重新编译发布到本地maven仓库

我这边选择第三种最简单
附上第二种方法侵入式最小
修改settings.gradle.kts
修改core/build.gradle.kts
修改magisk-loader/build.gradle.kts
Yarn报错
加入—stacktrace 获取更详细的编译日志
原因: A problem occurred starting process 'command 'yarn''
因为是在window下, 调整命令, 修复yarn找不到
编译
./gradlew zipAll 或者 gradlew zipAll
查看magisk-loader\release

重启后查看Lsposed logcat
解决
修改模块作用域
目的是无需勾选应用或游戏, 相当于是默认hook所有游戏, 包括新安装的游戏, 自动生效
lspxpose启动流程
调用链
结构
org.lsposed.lspd.service.ConfigManagerLSPosed的核心功能都在daemon进程中实现,这是框架的主要服务进程
- 在daemon中,ConfigManager是负责管理模块配置、作用域和hook规则的核心类
- shouldSkipProcess - 决定是否要hook某个进程
- getModulesForProcess - 获取进程需要加载的模块
- cacheScopes - 缓存模块作用域配置
- 这些方法都集中在 daemon/src/main/java/org/lsposed/lspd/service/ConfigManager.java 中
修改作用域缓存configManger.java
cacheScopes修改LSPosedService.dispatchPackageChanged
修改PakcageService
- 作者:拓森Leo
- 链接:https://www.uzilol.cn/article/139bf20f-1d11-80d4-aa26-c1ddeaf40df6
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。


