object SuShell {
private const val SU_CMD = "su"
fun exec(cmd: String): Result<String> {
val process = Runtime.getRuntime().exec(SU_CMD)
val writer = process.outputStream.bufferedWriter()
writer.write(cmd)
writer.newLine()
writer.write("exit")
writer.newLine()
writer.flush()
val exitCode = process.waitFor()
val reader = if (exitCode == 0) {
process.inputStream.bufferedReader()
} else {
process.errorStream.bufferedReader()
}
val content = reader.use { it.readText() }
return if (exitCode == 0) {
Result.success(content)
} else {
Result.failure(RuntimeException("[$exitCode]: $content"))
}
}
}