这里记录两种执行shell命令的方式,虽然都会遇到权限拒绝的问题
1、
private fun execShell(cmd: String): String {
var result = ""
try {
val process = Runtime.getRuntime().exec(cmd)
val mReader = InputStreamReader(process.inputStream)
println("YM========START==========")
result = mReader.readText()
println("YM==========${result}")
mReader.close()
process.destroy()
println("YM========END==========")
} catch (e: Exception) {
println("YM========执行Linux命令异常==========${e.message}")
}
return result
}
2、
fun sendCmd(cmd: String){
var p: ProcessBuilder ?= null
var x:Process ?=null;
try {
p = ProcessBuilder("/system/bin/sh", "-c",cmd);
var env = p.environment();
// for( variable in envirounmentVariables.entrySet()){
// env.put(variable.getKey(), variable.getValue());
// }
p.redirectErrorStream(true);
x = p.start();
try {
x.waitFor();
} catch ( e: InterruptedException) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch ( e: IOException) {
e.printStackTrace();
}
try {
toStings(x?.inputStream)
} catch ( e : IOException) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private fun toStings(inputStream: InputStream?){
val stringBuilder = StringBuilder()
val bufferedReader = BufferedReader(InputStreamReader(inputStream))
var firstLine = true
var line: String? = null
while (bufferedReader.readLine().also { line = it } != null) {
if (!firstLine) {
stringBuilder.append(System.getProperty("line.separator"))
} else {
firstLine = false
}
stringBuilder.append(line)
}
Log.e("YM","result:${stringBuilder.toString()}")
}