
LSPosed-Irena 入门读懂这个 Xposed 框架 Fork 的 Android 模块注入机制【免费下载链接】LSPosed-IrenaUseless LSPosed Framework Fork项目地址: https://gitcode.com/gh_mirrors/ls/LSPosed-IrenaLSPosed-Irena 是 LSPosed 的一个增强 Fork本质是一个 Zygisk 模块它借助 ZygiskNext 进入 zygote 进程基于 LSPlant 挂钩引擎实现与原版 Xposed 完全兼容的 API把 Android 模块注入做到 ART 层面——不改任何 APK只在内存里改行为禁用模块重启即还原。支持 Android 8.1 ~ 16。如何理解 LSPosed-Irena 的模块协作关系先记住一条主线注入靠 magisk-loader挂钩靠 core状态管理靠 daemon人靠 app 操作它。设备重启后ZygiskNext 把 magisk-loader 注入 zygote后者 dlopen core 并 hook 进程创建路径。每个 fork 出来的应用进程里core 负责 ART 层挂钩模块的 hook 回调就在这里生效core 不直接碰磁盘它通过 nativebridge 里的 HookBridge 走 Binder 找 daemon 要配置、写日志。app管理器与 core 互不引用它只通过 AIDL 跟 daemon 说话——这条边界是刻意设计的保证管理端永远拿不到注入端的私有接口。ZygiskNext 注入 │ ▼ magisk-loader ──dlopen──▶ coreART 挂钩层LSPlant Xposed API │ ┌───────────────────┼─────────────────────┐ ▼ ▼ ▼ dex2oat hiddenapi nativebridge 方法去优化/反内联 隐藏 API 桩 HookBridge / Binder │ ▼ daemon系统服务配置 / 日志 / 混淆 ▲ AIDL ◀──────────── app管理器 APK其余模块一句话带过services/存放管理器与守护进程共享的 AIDL 定义hiddenapi/提供非公开接口的编译桩libxposed/是新版 libxposed 模块 API 及兼容层external/下全部是 git 子模块LSPlant、Dobby、fmt、libcxx 等app/之外的 res 目录都是管理器 UI 资源。如何理解 LSPosed-Irena 的构建流程把构建文件串成一条线看gradlew启动后先读settings.gradle.kts。它干三件事——声明 13 个子模块、在pluginManagement里把dev.rikka.tools.autoresconfig和materialthemebuilder两个插件重定向到 LSPosed 自己的 Fork 版本、用dependencyResolutionManagement把仓库模式锁成FAIL_ON_PROJECT_REPOS即所有依赖只能从 google() 和 mavenCentral() 解析子模块私自声明仓库会直接报错。接着是版本与全局参数。gradle/libs.versions.toml是版本目录AGP 9.2.1、Kotlin 2.2.20、NDK 29 beta2外加一组org.lsposed.lsplugin.*自研插件cmaker、jgit、apksign、resopt。根目录build.gradle.kts是调度中枢cmaker {}给所有 CMake 模块统一追加参数把EXTERNAL_ROOT指向external/、注入-DINJECTED_AID2000伪装成com.android.shell进程注入jgit插件直接从 git 历史算出 versionCode提交数 4200和 versionName最新 tag一堆by extra属性钉死 minSdk 27、targetSdk 36、Java 21最后subprojects {}块把这些配置下发给每个 AGP 子项目。gradle.properties本身只有一行 JVM 参数4G 堆CI 跑签名构建时还会动态往里追加 keystore 配置。产物这一步最干净CI 工作流.github/workflows/core.yml配好 Java 21、ccache、Ninja 后只跑一条./gradlew zipAll最终交付物就是magisk-loader/release/下的 Magisk 模块 zip。LSPosed-Irena 核心模块的职责边界模块输入处理输出边界通过什么接口通信magisk-loaderZygiskNext 回调dlopen corehook zygote fork被注入的各进程只依赖 Zygisk API 与 core 入口不感知 daemoncoreloadPackage、system server 等回调LSPlant 完成 ART 挂钩实现IXposedHookLoadPackage等 API模块 hook 回调生效向上暴露de.robv.android.xposed公共 API向下经nativebridgeHookBridge/Binder访问 daemondaemonBinder 调用来自 core 与 app配置管理、logcat 采集、代码混淆与 dex2oat 调度IBridgeService等 AIDL 服务唯一状态中心core 与 app 都只认它的 AIDLdex2oat系统 dex2oat 调用拦截并改造编译流程方法去优化结果独立原生二进制被 daemon 调度hiddenapi编译期头文件、运行期桥接提供非公开接口桩HiddenApiBridge调用能力仅被 core 依赖让挂钩代码能触碰非 SDK API一句话总结边界进程内通信走 AIDL注入端与管理端零直接依赖模块作者能看到的只有 core 里的 Xposed API——想扩展注入逻辑改 core想改管理界面改 app两边永远不会搅在一起。上手前你需要知道的 3 件事 ⚠️clone 时带上--recurse-submodulesgit clone --recurse-submodules https://gitcode.com/gh_mirrors/ls/LSPosed-Irena。external/下 8 个子模块LSPlant、Dobby、fmt 等缺一个 CMake 都过不去。环境要求 JDK 21、Android SDKcompile 36且 NDK 被libs.versions.toml钉死在29.0.13599879-beta2——这是个 beta 版本SDK Manager 里不装对应版本就会报版本不匹配。常见坑仓库被FAIL_ON_PROJECT_REPOS锁死往任何子模块 build 脚本里加 maven 仓库都会直接失败两个dev.rikka.tools.*插件必须经 settings 重定向解析单独拷模块出去构建时别忘了带上这份配置。【免费下载链接】LSPosed-IrenaUseless LSPosed Framework Fork项目地址: https://gitcode.com/gh_mirrors/ls/LSPosed-Irena创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考