manager: save stderr of installation to log file. fix #723

This commit is contained in:
weishu
2023-07-11 20:10:12 +08:00
parent ec9babea76
commit 37abe48702
3 changed files with 18 additions and 8 deletions

View File

@@ -28,6 +28,7 @@ import me.weishu.kernelsu.ui.util.LocalSnackbarHost
import me.weishu.kernelsu.ui.util.installModule import me.weishu.kernelsu.ui.util.installModule
import me.weishu.kernelsu.ui.util.reboot import me.weishu.kernelsu.ui.util.reboot
import java.io.File import java.io.File
import java.lang.StringBuilder
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.* import java.util.*
@@ -40,6 +41,7 @@ import java.util.*
fun InstallScreen(navigator: DestinationsNavigator, uri: Uri) { fun InstallScreen(navigator: DestinationsNavigator, uri: Uri) {
var text by rememberSaveable { mutableStateOf("") } var text by rememberSaveable { mutableStateOf("") }
val logContent = StringBuilder()
var showFloatAction by rememberSaveable { mutableStateOf(false) } var showFloatAction by rememberSaveable { mutableStateOf(false) }
val snackBarHost = LocalSnackbarHost.current val snackBarHost = LocalSnackbarHost.current
@@ -54,9 +56,12 @@ fun InstallScreen(navigator: DestinationsNavigator, uri: Uri) {
if (success) { if (success) {
showFloatAction = true showFloatAction = true
} }
}) { }, onStdout = {
text += "$it\n" 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), Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),
"KernelSU_install_log_${date}.log" "KernelSU_install_log_${date}.log"
) )
file.writeText(text) file.writeText(logContent.toString())
snackBarHost.showSnackbar("Log saved to ${file.absolutePath}") snackBarHost.showSnackbar("Log saved to ${file.absolutePath}")
} }
} }

View File

@@ -91,7 +91,7 @@ fun uninstallModule(id: String): Boolean {
return result 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 val resolver = ksuApp.contentResolver
with(resolver.openInputStream(uri)) { with(resolver.openInputStream(uri)) {
val file = File(ksuApp.cacheDir, "module.zip") 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 shell = getRootShell()
val callbackList: CallbackList<String?> = object : CallbackList<String?>() { val stdoutCallback: CallbackList<String?> = object : CallbackList<String?>() {
override fun onAddElement(s: String?) { override fun onAddElement(s: String?) {
onOutput(s ?: "") onStdout(s ?: "")
}
}
val stderrCallback: CallbackList<String?> = object : CallbackList<String?>() {
override fun onAddElement(s: String?) {
onStderr(s ?: "")
} }
} }
val result = 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") Log.i("KernelSU", "install module $uri result: $result")
file.delete() file.delete()

View File

@@ -56,7 +56,6 @@ fn exec_install_script(module_file: &str) -> Result<()> {
.env("KSU_VER_CODE", defs::VERSION_CODE) .env("KSU_VER_CODE", defs::VERSION_CODE)
.env("OUTFD", "1") .env("OUTFD", "1")
.env("ZIPFILE", realpath) .env("ZIPFILE", realpath)
.stderr(Stdio::null())
.status()?; .status()?;
ensure!(result.success(), "Failed to install module script"); ensure!(result.success(), "Failed to install module script");
Ok(()) Ok(())