manager: save stderr of installation to log file. fix #723
This commit is contained in:
@@ -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}")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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(())
|
||||||
|
|||||||
Reference in New Issue
Block a user