From c942393f2120b4c68cf43fcda770317240f81946 Mon Sep 17 00:00:00 2001 From: liankong Date: Mon, 7 Apr 2025 15:09:05 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=AE=89=E8=A3=85=E5=B7=A5?= =?UTF-8?q?=E5=85=B7=E7=B1=BB=EF=BC=8C=E5=B9=B6=E5=A2=9E=E5=8A=A0=E6=8A=8A?= =?UTF-8?q?kpmmgr=E5=AE=89=E8=A3=85=E5=88=B0/data/adb/ksu/bin=E7=9A=84?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=EF=BC=8C=E6=96=B9=E4=BE=BF=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E8=B0=83=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/sukisu/ultra/UltraShellHelper.java | 30 +++++++++++++++++++ .../io/sukisu/ultra/UltraToolInstall.java | 15 ++++++++++ .../shirkneko/zako/sukisu/ui/MainActivity.kt | 6 +++- .../shirkneko/zako/sukisu/ui/util/KsuCli.kt | 2 +- 4 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 manager/app/src/main/java/io/sukisu/ultra/UltraShellHelper.java create mode 100644 manager/app/src/main/java/io/sukisu/ultra/UltraToolInstall.java diff --git a/manager/app/src/main/java/io/sukisu/ultra/UltraShellHelper.java b/manager/app/src/main/java/io/sukisu/ultra/UltraShellHelper.java new file mode 100644 index 00000000..e6d1d172 --- /dev/null +++ b/manager/app/src/main/java/io/sukisu/ultra/UltraShellHelper.java @@ -0,0 +1,30 @@ +package io.sukisu.ultra; + +import com.topjohnwu.superuser.Shell; + +import java.util.ArrayList; + +import shirkneko.zako.sukisu.ui.util.KsuCli; + +public class UltraShellHelper { + public static String runCmd(String cmds) { + StringBuilder sb = new StringBuilder(); + for(String str : KsuCli.INSTANCE.getGLOBAL_MNT_SHELL() + .newJob() + .add(cmds) + .to(new ArrayList<>(), null) + .exec() + .getOut()) { + sb.append(str).append("\n"); + } + return sb.toString(); + } + + public static boolean isPathExists(String path) { + return !runCmd("file " + path).contains("No such file or directory"); + } + + public static void CopyFileTo(String path, String target) { + runCmd("cp -f " + path + " " + target); + } +} diff --git a/manager/app/src/main/java/io/sukisu/ultra/UltraToolInstall.java b/manager/app/src/main/java/io/sukisu/ultra/UltraToolInstall.java new file mode 100644 index 00000000..d3829e2a --- /dev/null +++ b/manager/app/src/main/java/io/sukisu/ultra/UltraToolInstall.java @@ -0,0 +1,15 @@ +package io.sukisu.ultra; + +import static shirkneko.zako.sukisu.ui.util.KsuCliKt.getKpmmgrPath; +import shirkneko.zako.sukisu.ui.util.KsuCli; + +public class UltraToolInstall { + private static final String OUTSIDE_KPMMGR_PATH = "/data/adb/ksu/bin/kpmmgr"; + public static void tryToInstall() { + String kpmmgrPath = getKpmmgrPath(); + if (!UltraShellHelper.isPathExists(OUTSIDE_KPMMGR_PATH)) { + UltraShellHelper.CopyFileTo(kpmmgrPath, OUTSIDE_KPMMGR_PATH); + UltraShellHelper.runCmd("chmod a+rx " + OUTSIDE_KPMMGR_PATH); + } + } +} diff --git a/manager/app/src/main/java/shirkneko/zako/sukisu/ui/MainActivity.kt b/manager/app/src/main/java/shirkneko/zako/sukisu/ui/MainActivity.kt index 0e194929..3e34f2d5 100644 --- a/manager/app/src/main/java/shirkneko/zako/sukisu/ui/MainActivity.kt +++ b/manager/app/src/main/java/shirkneko/zako/sukisu/ui/MainActivity.kt @@ -41,6 +41,7 @@ import com.ramcosta.composedestinations.animations.NavHostAnimatedDestinationSty import com.ramcosta.composedestinations.generated.NavGraphs import com.ramcosta.composedestinations.utils.isRouteOnBackStackAsState import com.ramcosta.composedestinations.utils.rememberDestinationsNavigator +import io.sukisu.ultra.UltraToolInstall import shirkneko.zako.sukisu.Natives import shirkneko.zako.sukisu.ksuApp import shirkneko.zako.sukisu.ui.screen.BottomBarDestination @@ -72,7 +73,10 @@ class MainActivity : ComponentActivity() { val isManager = Natives.becomeManager(ksuApp.packageName) - if (isManager) install() + if (isManager) { + install() + UltraToolInstall.tryToInstall() + } setContent { KernelSUTheme { diff --git a/manager/app/src/main/java/shirkneko/zako/sukisu/ui/util/KsuCli.kt b/manager/app/src/main/java/shirkneko/zako/sukisu/ui/util/KsuCli.kt index 178531d6..97f671b4 100644 --- a/manager/app/src/main/java/shirkneko/zako/sukisu/ui/util/KsuCli.kt +++ b/manager/app/src/main/java/shirkneko/zako/sukisu/ui/util/KsuCli.kt @@ -481,7 +481,7 @@ fun susfsSUS_SU_Mode(): String { return result } -private fun getKpmmgrPath(): String { +fun getKpmmgrPath(): String { return ksuApp.applicationInfo.nativeLibraryDir + File.separator + "libkpmmgr.so" }