From 37abe48702902f0ddd9ced086ab10ea32ff5264b Mon Sep 17 00:00:00 2001 From: weishu Date: Tue, 11 Jul 2023 20:10:12 +0800 Subject: [PATCH] manager: save stderr of installation to log file. fix #723 --- .../java/me/weishu/kernelsu/ui/screen/Install.kt | 11 ++++++++--- .../main/java/me/weishu/kernelsu/ui/util/KsuCli.kt | 14 ++++++++++---- userspace/ksud/src/module.rs | 1 - 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Install.kt b/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Install.kt index 72a8f7d9..89c8d24f 100644 --- a/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Install.kt +++ b/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Install.kt @@ -28,6 +28,7 @@ import me.weishu.kernelsu.ui.util.LocalSnackbarHost import me.weishu.kernelsu.ui.util.installModule import me.weishu.kernelsu.ui.util.reboot import java.io.File +import java.lang.StringBuilder import java.text.SimpleDateFormat import java.util.* @@ -40,6 +41,7 @@ import java.util.* fun InstallScreen(navigator: DestinationsNavigator, uri: Uri) { var text by rememberSaveable { mutableStateOf("") } + val logContent = StringBuilder() var showFloatAction by rememberSaveable { mutableStateOf(false) } val snackBarHost = LocalSnackbarHost.current @@ -54,9 +56,12 @@ fun InstallScreen(navigator: DestinationsNavigator, uri: Uri) { if (success) { showFloatAction = true } - }) { + }, onStdout = { text += "$it\n" - } + logContent.append(it).append("\n") + }, onStderr = { + logContent.append(it).append("\n") + }); } } @@ -74,7 +79,7 @@ fun InstallScreen(navigator: DestinationsNavigator, uri: Uri) { Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "KernelSU_install_log_${date}.log" ) - file.writeText(text) + file.writeText(logContent.toString()) snackBarHost.showSnackbar("Log saved to ${file.absolutePath}") } } diff --git a/manager/app/src/main/java/me/weishu/kernelsu/ui/util/KsuCli.kt b/manager/app/src/main/java/me/weishu/kernelsu/ui/util/KsuCli.kt index cfaf9397..39fbb28d 100644 --- a/manager/app/src/main/java/me/weishu/kernelsu/ui/util/KsuCli.kt +++ b/manager/app/src/main/java/me/weishu/kernelsu/ui/util/KsuCli.kt @@ -91,7 +91,7 @@ fun uninstallModule(id: String): Boolean { return result } -fun installModule(uri: Uri, onFinish: (Boolean) -> Unit, onOutput: (String) -> Unit): Boolean { +fun installModule(uri: Uri, onFinish: (Boolean) -> Unit, onStdout: (String) -> Unit, onStderr: (String) -> Unit): Boolean { val resolver = ksuApp.contentResolver with(resolver.openInputStream(uri)) { val file = File(ksuApp.cacheDir, "module.zip") @@ -102,14 +102,20 @@ fun installModule(uri: Uri, onFinish: (Boolean) -> Unit, onOutput: (String) -> U val shell = getRootShell() - val callbackList: CallbackList = object : CallbackList() { + val stdoutCallback: CallbackList = object : CallbackList() { override fun onAddElement(s: String?) { - onOutput(s ?: "") + onStdout(s ?: "") + } + } + + val stderrCallback: CallbackList = object : CallbackList() { + override fun onAddElement(s: String?) { + onStderr(s ?: "") } } val result = - shell.newJob().add("${getKsuDaemonPath()} $cmd").to(callbackList, callbackList).exec() + shell.newJob().add("${getKsuDaemonPath()} $cmd").to(stdoutCallback, stderrCallback).exec() Log.i("KernelSU", "install module $uri result: $result") file.delete() diff --git a/userspace/ksud/src/module.rs b/userspace/ksud/src/module.rs index acba325c..d917368c 100644 --- a/userspace/ksud/src/module.rs +++ b/userspace/ksud/src/module.rs @@ -56,7 +56,6 @@ fn exec_install_script(module_file: &str) -> Result<()> { .env("KSU_VER_CODE", defs::VERSION_CODE) .env("OUTFD", "1") .env("ZIPFILE", realpath) - .stderr(Stdio::null()) .status()?; ensure!(result.success(), "Failed to install module script"); Ok(())