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" }