From d58927815c65a4b2d6074efa6b7e849b953e0b19 Mon Sep 17 00:00:00 2001 From: JingMatrix Date: Fri, 13 Feb 2026 23:22:21 +0100 Subject: [PATCH 1/3] Refactor LSPosed integration using composite builds We change the integration with the core repository (JingMatrix/LSPosed) from manual subproject inclusion to a Gradle composite build. Key changes include: - Replaced direct `include` and `projectDir` mappings in `settings.gradle.kts` with `includeBuild("core")`. - Configured dependency substitutions to map 'vector' module coordinates to the appropriate projects within the included build. - Updated dependency declarations across all subprojects to use the substituted coordinates. - Removed `share/lspatch-rules.pro` and the corresponding `afterEvaluate` logic in the root build script, as local testing confirms these additional ProGuard rules are no longer required. --- build.gradle.kts | 14 -------------- core | 2 +- manager/build.gradle.kts | 2 +- meta-loader/build.gradle.kts | 2 +- patch-loader/build.gradle.kts | 8 ++++---- patch/build.gradle.kts | 2 +- settings.gradle.kts | 32 +++++++++----------------------- share/android/build.gradle.kts | 2 +- share/lspatch-rules.pro | 11 ----------- 9 files changed, 18 insertions(+), 57 deletions(-) delete mode 100644 share/lspatch-rules.pro diff --git a/build.gradle.kts b/build.gradle.kts index bb666f992..1c0c4c8dc 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -240,17 +240,3 @@ subprojects { configureBaseExtension() } } - - -project(":core") { - afterEvaluate { - if (property("android") is LibraryExtension) { - val android = property("android") as LibraryExtension - android.run { - buildTypes { - release { proguardFiles(rootProject.file("share/lspatch-rules.pro")) } - } - } - } - } -} diff --git a/core b/core index 752d88c4f..cef2ffb83 160000 --- a/core +++ b/core @@ -1 +1 @@ -Subproject commit 752d88c4fcc4061ca5872eb8579bbddbd22154d6 +Subproject commit cef2ffb83ab37296556606b8e206750f4288e967 diff --git a/manager/build.gradle.kts b/manager/build.gradle.kts index 5b8b86c22..b4ea81f57 100644 --- a/manager/build.gradle.kts +++ b/manager/build.gradle.kts @@ -83,7 +83,7 @@ afterEvaluate { dependencies { implementation(projects.patch) - implementation(projects.services.daemonService) + implementation("vector:daemon-service") implementation(projects.share.android) implementation(projects.share.java) implementation(platform(lspatch.androidx.compose.bom)) diff --git a/meta-loader/build.gradle.kts b/meta-loader/build.gradle.kts index f591a0f8f..f622ae3a1 100644 --- a/meta-loader/build.gradle.kts +++ b/meta-loader/build.gradle.kts @@ -42,7 +42,7 @@ androidComponents.onVariants { variant -> } dependencies { - compileOnly(projects.hiddenapi.stubs) + compileOnly("vector:stubs") implementation(projects.share.java) implementation(libs.hiddenapibypass) } diff --git a/patch-loader/build.gradle.kts b/patch-loader/build.gradle.kts index fab09dff9..32cc54c33 100644 --- a/patch-loader/build.gradle.kts +++ b/patch-loader/build.gradle.kts @@ -62,10 +62,10 @@ androidComponents.onVariants { variant -> } dependencies { - compileOnly(projects.hiddenapi.stubs) - implementation(projects.core) - implementation(projects.hiddenapi.bridge) - implementation(projects.services.daemonService) + compileOnly("vector:stubs") + implementation("vector:core") + implementation("vector:bridge") + implementation("vector:daemon-service") implementation(projects.share.android) implementation(projects.share.java) diff --git a/patch/build.gradle.kts b/patch/build.gradle.kts index b01611dd2..79d6819eb 100644 --- a/patch/build.gradle.kts +++ b/patch/build.gradle.kts @@ -17,8 +17,8 @@ java { } dependencies { - implementation(projects.axml) implementation(projects.apkzlib) + implementation("vector:axml") implementation(projects.share.java) implementation(lspatch.commons.io) diff --git a/settings.gradle.kts b/settings.gradle.kts index 9364f781c..3412bfe42 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -13,11 +13,6 @@ dependencyResolutionManagement { repositories { google() mavenCentral() - mavenLocal { - content { - includeGroup("io.github.libxposed") - } - } } versionCatalogs { create("libs") { @@ -31,31 +26,22 @@ dependencyResolutionManagement { rootProject.name = "LSPatch" include( - ":apache", ":apkzlib", - ":axml", - ":core", - ":hiddenapi:bridge", - ":hiddenapi:stubs", ":jar", ":manager", ":meta-loader", ":patch", ":patch-loader", - ":services:daemon-service", - ":services:manager-service", - ":services:xposed-service:interface", ":share:android", ":share:java", ) -project(":apache").projectDir = file("core/apache") -project(":axml").projectDir = file("core/axml") -project(":core").projectDir = file("core/core") -project(":hiddenapi:bridge").projectDir = file("core/hiddenapi/bridge") -project(":hiddenapi:stubs").projectDir = file("core/hiddenapi/stubs") -project(":services:daemon-service").projectDir = file("core/services/daemon-service") -project(":services:manager-service").projectDir = file("core/services/manager-service") -project(":services:xposed-service:interface").projectDir = file("core/services/xposed-service/interface") - -buildCache { local { removeUnusedEntriesAfterDays = 1 } } +includeBuild("core") { + dependencySubstitution { + substitute(module("vector:axml")).using(project(":external:axml")) + substitute(module("vector:bridge")).using(project(":hiddenapi:bridge")) + substitute(module("vector:core")).using(project(":core")) + substitute(module("vector:daemon-service")).using(project(":services:daemon-service")) + substitute(module("vector:stubs")).using(project(":hiddenapi:stubs")) + } +} diff --git a/share/android/build.gradle.kts b/share/android/build.gradle.kts index 125a6818b..ea2715d81 100644 --- a/share/android/build.gradle.kts +++ b/share/android/build.gradle.kts @@ -12,5 +12,5 @@ android { } dependencies { - implementation(projects.services.daemonService) + implementation("vector:daemon-service") } diff --git a/share/lspatch-rules.pro b/share/lspatch-rules.pro deleted file mode 100644 index 0bcc89d14..000000000 --- a/share/lspatch-rules.pro +++ /dev/null @@ -1,11 +0,0 @@ --keepnames class org.lsposed.lspd.deopt.* --keepnames class org.lsposed.lspd.hooker.** { *; } --keepnames class org.lsposed.lspd.impl.LSPosedContext --keepnames class org.lsposed.lspd.impl.LSPosedHelper --keepnames class org.lsposed.lspd.impl.LSPosedHookCallback --keepnames class org.lsposed.lspd.util.Hookers --keepnames class org.lsposed.lspd.util.LspModuleClassLoader --keepnames class org.lsposed.lspd.util.MetaDataReader - --repackageclasses org.lsposed.external --keepattributes SourceFile,LineNumberTable From a11a50aa0f1389269a5bfe797bf16ac623813518 Mon Sep 17 00:00:00 2001 From: JingMatrix Date: Fri, 13 Feb 2026 23:48:53 +0100 Subject: [PATCH 2/3] Remove build of libxposed --- .github/workflows/main.yml | 25 +------------------------ 1 file changed, 1 insertion(+), 24 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index c06672574..f460a4a2d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -34,19 +34,6 @@ jobs: echo ${{ secrets.KEY_STORE }} | base64 --decode > key.jks fi - - name: Checkout libxposed/api - uses: actions/checkout@main - with: - repository: libxposed/api - path: libxposed/api - ref: 54582730315ba4a3d7cfaf9baf9d23c419e07006 - - - name: Checkout libxposed/service - uses: actions/checkout@main - with: - repository: libxposed/service - path: libxposed/service - - name: Setup Java uses: actions/setup-java@v4 with: @@ -68,20 +55,10 @@ jobs: shell: bash run: rm -rf $ANDROID_HOME/cmake - - name: Build dependencies with Gradle - working-directory: libxposed - run: | - cd api - echo 'org.gradle.jvmargs=-Xmx2048m' >> gradle.properties - ./gradlew :api:publishApiPublicationToMavenLocal - cd ../service - echo 'org.gradle.jvmargs=-Xmx2048m' >> gradle.properties - ./gradlew :interface:publishInterfacePublicationToMavenLocal - - name: Set short commit id run: echo "commit=$(echo ${{ github.sha }} | cut -c-7)" > $GITHUB_ENV - - name: Build core with Gradle + - name: Build with Gradle run: | { echo 'org.gradle.parallel=true' From 3e9fee9d1c3559cdde64035ecd78e22612fdccc7 Mon Sep 17 00:00:00 2001 From: JingMatrix Date: Sat, 14 Feb 2026 00:20:44 +0100 Subject: [PATCH 3/3] Use lazy evaluation for jar task dependencies Switch from eager resolution of `runtimeClasspath` to the Provider API's lazy `map` implementation in the jar configuration. This change resolves a `beforeEvaluate` lifecycle error encountered during composite builds, as it prevents the early evaluation of included builds during the configuration phase. --- jar/build.gradle.kts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/jar/build.gradle.kts b/jar/build.gradle.kts index 55da5572e..4622a4a9e 100644 --- a/jar/build.gradle.kts +++ b/jar/build.gradle.kts @@ -23,7 +23,9 @@ fun Jar.configure(variant: String) { attributes("Main-Class" to "org.lsposed.patch.LSPatch") } dependsOn(configurations.runtimeClasspath) - from(configurations.runtimeClasspath.get().map { if (it.isDirectory) it else zipTree(it) }) + from(configurations.runtimeClasspath.map { configuration -> + configuration.map { if (it.isDirectory) it else zipTree(it) } + }) into("assets") { from("src/main/assets")