吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1544|回复: 19
收起左侧

[Android 原创] Lsposed编译过程

[复制链接]
KillLog 发表于 2026-1-18 08:23

先git下来lsposed代码

git clone https://github.com/LSPosed/LSPosed.git

再把仓库中的子模块需要再次拉取

git submodule update --init --recursive

但是lsposed并没有吧libxposed的apiservice放到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**

免费评分

参与人数 3吾爱币 +2 热心值 +3 收起 理由
WDDLXY + 1 + 1 用心讨论,共获提升!
AG6 + 1 我很赞同!
helian147 + 1 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

炫迈 发表于 2026-1-20 08:55
补充几个关键点,首先libxposed那两个仓库现在官方已经不维护了,建议直接用GitHub上别人fork的版本,其次Java17必须用Oracle JDK,OpenJDK会报错,我踩过这个坑,NDK许可问题其实最简单的方法是手动去SDK目录accept所有license,比命令行省事,还有个小技巧是编译前先把gradle.properties里的org.gradle.parallel=true打开,能快30%速度,关于那个BeforeInvocation注解的问题,其实不用改那么多代码,我找到个取巧办法,在LSPosedBridge类里加个静态代码块,用反射把注解重新注册回去,这样就不用改所有hook类,另外提醒老哥们,现在Magisk 26以上版本对zygisk模块签名校验更严了,编译完用zip -d 去掉META-INF目录再签名,不然会加载失败,其实GitHub上有人维护了自动编译的workflow,每天都会更新release,地址是LSPosed/LSPosed
jiaxu122 发表于 2026-1-19 13:12
Chapaopao 发表于 2026-1-19 14:02
AiniWang 发表于 2026-1-19 15:34
仓库打不开要怎么修改一下呢
hunchenhhh 发表于 2026-1-19 21:12
学习一下
wuyands 发表于 2026-1-20 00:11
我来学习一下
ColoThor 发表于 2026-1-20 08:40
用github workflow就能编译,另外开源代码早就不更新了
wuai920981023 发表于 2026-1-20 13:29
如果自己改LS的话、  是不是模块也必须改 、 通用模块就在模块列表就不显示了。这个怎么集成自己的模块里,如果改了ls
Tsuki0402 发表于 2026-1-20 18:10
lsp仓库不是停更了吗
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-2-7 20:57

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表