先git下来lsposed代码
git clone https://github.com/LSPosed/LSPosed.git
再把仓库中的子模块需要再次拉取
git submodule update --init --recursive
但是lsposed并没有吧libxposed的api和service放到lsposed里需要自己编译
切记java版本为17 新git下来的源码记得修改源码里的java和kotlin对应的版本 我这里更改的java版本改为17
git clone --depth 1 https://github.com/libxposed/api.git libxposed/api
git clone --depth 1 https://github.com/libxposed/service.git libxposed/service
然后我们分别去编译jar包
cd libxposed/api
gradlew :api:publishApiPublicationToMavenLocal
cd libxposed/service
gradlew :interface:publishInterfacePublicationToMavenLocal
现在使用android studio打开lsp项目
我这里有小插曲
License for package NDK (Side by side) 29.0.13113456 not accepted.
去sdk\tools\bin目录 sdkmanager.bat --licenses
只支持java8 在bat文件里内置java8路径即可
初始化完毕后,输入./gradlew core:build 先吧aidl文件的java生成 这样看着代码舒服点了
在输出的日志可以看到缺少一些库
在core模块下创建libs(其他名也可) 从libxposed提取编译的api.aar文件放到该目录
由于libxposed在 7b67273 提交 吧注释实现改为方法名 所以后面实现代码需要我们自己进行更改,或者是自己添加注释类,遵循之前的方法 我尝试去修改底层,遵循现在的方法
我这里提供去修改LSPosedBridge实现类
我们打开后找到doHook函数
method.getAnnotation(BeforeInvocation.class) != null -> "before".equals(method.getName())
method.getAnnotation(AfterInvocation.class) != null -> "after".equals(method.getName())
我们找到这两处判断
这个判断是检测当前类下是否存在@BeforeInvocation 改为判断当前类存在before函数
后面吧所有继承Hooker的函数吧@XposedHooker @BeforeInvocation @AfterInvocation 去除并进行改名
beforeHookedMethod -> before
afterHookedMethod -> after
这次输入./gradlew core:build 后发现 daemon这个模块缺失 interface 那么我们继续重复上次操作
最后使用可以使用
./gradlew magisk-loader:zipAll
如果只编译release版本:
./gradlew :magisk-loader:zipZygiskRelease
输出的release为magisk-loader模块下的release目录命名为*LSPosed-v-zygisk-release.zip**