diff --git a/manager/build.gradle b/manager/build.gradle index a253de1..b0604f3 100644 --- a/manager/build.gradle +++ b/manager/build.gradle @@ -36,6 +36,7 @@ android { } dependencies { + implementation project(":patch") implementation project(":imanager") implementation project(path: ':lspcore') diff --git a/manager/src/main/java/org/lsposed/lspatch/Patcher.kt b/manager/src/main/java/org/lsposed/lspatch/Patcher.kt new file mode 100644 index 0000000..ac01505 --- /dev/null +++ b/manager/src/main/java/org/lsposed/lspatch/Patcher.kt @@ -0,0 +1,42 @@ +package org.lsposed.lspatch + +import org.lsposed.patch.LSPatch + +object Patcher { + class Options( + private val apkPaths: List, + private val outputPath: String, + private val debuggable: Boolean, + private val sigbypassLevel: Int, + private val v1: Boolean, + private val v2: Boolean, + private val v3: Boolean, + private val useManager: Boolean, + private val verbose: Boolean, + private val embeddedModules: List + ) { + fun toStringArray(): Array { + return arrayListOf().run { + add("-f"); + addAll(apkPaths) + add("-o"); add(outputPath) + if (debuggable) add("-d") + add("-l"); add(sigbypassLevel.toString()) + add("--v1"); add(v1.toString()) + add("--v2"); add(v2.toString()) + add("--v3"); add(v3.toString()) + if (useManager) add("--manager") + if (verbose) add("-v") + if (embeddedModules.isNotEmpty()) { + add("-m"); addAll(embeddedModules) + } + + toTypedArray() + } + } + } + + fun patch(options: Options) { + LSPatch(*options.toStringArray()).doCommandLine() + } +} \ No newline at end of file diff --git a/patch/src/main/java/org/lsposed/patch/LSPatch.java b/patch/src/main/java/org/lsposed/patch/LSPatch.java index 1e318a5..ad2aaf5 100644 --- a/patch/src/main/java/org/lsposed/patch/LSPatch.java +++ b/patch/src/main/java/org/lsposed/patch/LSPatch.java @@ -73,7 +73,7 @@ public class LSPatch { @Parameter(names = {"--v3"}, arity = 1, description = "Sign with v3 signature") private boolean v3 = true; - @Parameter(names = {"--manager"}, arity = 1, description = "Whether use manager (Cannot be true when has module embedded)") + @Parameter(names = {"--manager"}, description = "Use manager (Cannot work with embedding modules)") private boolean useManager = false; @Parameter(names = {"-v", "--verbose"}, description = "Verbose output") @@ -109,14 +109,17 @@ public class LSPatch { AlignmentRules.constantForSuffix(".bin", 4096) )); - private static JCommander jCommander; + private final JCommander jCommander; - public static void main(String... args) throws IOException { - LSPatch lsPatch = new LSPatch(); + public LSPatch(String... args) { jCommander = JCommander.newBuilder() - .addObject(lsPatch) + .addObject(this) .build(); jCommander.parse(args); + } + + public static void main(String... args) throws IOException { + LSPatch lsPatch = new LSPatch(args); try { lsPatch.doCommandLine(); } catch (PatchError e) {