LSPlantPro 是 LSPosed/LSPlant(LGPL-3.0,现代 ART 方法 inline-hook 底座)的 VA 适配版预编译 prefab Maven 源。它在上游基础上完成了 Android 16 / API 36 适配,并以「本地编好 → 把 prefab 静态库 AAR 提交进仓库 → 仓库本身即 Maven 源」的方式分发,解决 JitPack 无法构建 C++23 modules native 产物的问题。一句话用法:在 settings.gradle.kts 里把 raw.githubusercontent 当作 maven repo,依赖 com.vapro.lsplant:lsplant-pro:1.0.0,native 侧用 find_package(lsplant REQUIRED CONFIG) 即可静态链接。适用场景:需要在虚拟化/多开(VirtualApp 类)、Xposed 兼容框架、ART Hook 引擎中集成方法 inline-hook 能力,并要覆盖 Android 16 最新系统的 Android C++ 项目。
| 维度 | 说明 |
|---|---|
| 上游底座 | LSPosed/LSPlant,现代 ART 方法 inline-hook |
| 适配范围 | Android 16 / API 36(A16/A17 SDK 常量、A16 hooker-dex 加载路径等) |
| 分发方式 | 预编译 prefab AAR,仓库即 Maven 源(raw.githubusercontent) |
| Maven 坐标 | com.vapro.lsplant:lsplant-pro:1.0.0(packaging=aar) |
| 产物类型 | 仅静态库 liblsplant.a,自包含(已合并 dex_builder) |
| ABI 覆盖 | arm64-v8a / x86_64 / armeabi-v7a / x86 |
| 构建参数 | stl=c++_static、static=true、minSdk/api=28、ndk=29 |
三步接入,直接复制即可照做。
dependencyResolutionManagement {
repositories {
// LSPlantPro 预编译 prefab Maven 源(raw.githubusercontent 直接当 maven repo)
maven { url = uri("https://raw.githubusercontent.com/Pangu-Immortal/LSPlantPro/main/repo") }
}
}android {
buildFeatures { prefab = true }
}
dependencies {
implementation("com.vapro.lsplant:lsplant-pro:1.0.0")
}find_package(lsplant REQUIRED CONFIG)
# 静态链接进你自己的 .so;lsplant 依赖 zlib,需一并链接 z
target_link_libraries(your_target lsplant::lsplant z log)#include <lsplant.hpp> 即可调用 lsplant::Init / lsplant::Hook / lsplant::IsHooked 等 API。
- 只发布静态库:
prefab/modules/lsplant/libs/android.<abi>/liblsplant.a,ABI 覆盖arm64-v8a / x86_64 / armeabi-v7a / x86;stl=c++_static、static=true、minSdk/api=28、ndk=29。 liblsplant.a为自包含归档:已把上游external/dex_builder(libdex_builder_static.a)的成员对象合并进来,消费端只链接单个.a即可满足startop::dex::DexBuilder等符号(唯一需消费端额外链接的系统库是z/zlib)。- 不含
liblsplant.so:设计上静态入宿主.so,避免宿主 APK 多打一份liblsplant.so。
src/lsplant-module/ 为携带 VA 改动的完整源码(含 build.gradle.kts / CMakeLists.txt)。改动点见 PATCHES.md:
art/runtime/instrumentation.cxx—— API36 适配降级(方案1)lsplant.cc—— A16InMemoryDexClassLoaderhooker-dex 加载路径art/runtime/dex_file.cxx——OpenMemory缺失优雅降级common.cxx—— SDK 常量表扩展(A16/A17)
本仓 src/lsplant-module/ 的 build.gradle.kts 已内置 prefab 发布与合并配置。在一个包含 Android SDK/NDK 29 + CMake 4.1.2、且把本模块以 :lsplant 纳入 settings 的 Gradle 工程里:
# 编出 prefab AAR
./gradlew :lsplant:assembleRelease
# 发布到指定 maven 目录(即本仓 repo/)
./gradlew :lsplant:publishReleasePublicationToLSPlantProLocalRepository \
-PlsplantProRepo=/abs/path/to/LSPlantPro/repo关键 CMake 开关(见 src/lsplant-module/src/main/cpp/lsplant/CMakeLists.txt):
-DLSPLANT_BUILD_SHARED=OFF:只产静态库,不产liblsplant.so。-DLSPLANT_PREFAB_MERGE=ON:静态目标命名为lsplant(AGP prefab 按模块名匹配),并把dex_builder_static合并进liblsplant.a成自包含归档。-DANDROID_STL=c++_static:与宿主引擎 STL 一致。
LGPL-3.0(见 LICENSE)。本仓完整公开含改动的源码,满足 LGPL 对「发布修改版须提供对应源码」的要求;上游版权归 LSPosed 团队所有。
LGPL-3.0 下允许商用,但有条件:必须动态链接或提供可重新链接的目标文件,并向使用者公开本库(含改动)的对应源码;本仓已完整公开
src/lsplant-module/源码以满足合规。上游许可证不得改成更宽松协议。
主业:大模型算法 / AI / 端侧(Agentic · LangGraph · A2A · MCP · ADK · GraphRAG · 端侧离线多模态 · 车载 · 世界模型)。 ROM / 逆向是我长期钻研的技术兴趣。
合作交流 · Collaboration: yugu88@126.com · GitHub @Pangu-Immortal
License: LGPL-3.0,允许商用(需遵守 LGPL 动态链接与源码公开条件)。