116 lines
3.6 KiB
Java
116 lines
3.6 KiB
Java
package com.stardust.scriptdroid.tool;
|
|
|
|
import android.util.Log;
|
|
|
|
import java.io.BufferedReader;
|
|
import java.io.DataOutputStream;
|
|
import java.io.IOException;
|
|
import java.io.InputStreamReader;
|
|
|
|
/**
|
|
* Created by Stardust on 2017/1/20.
|
|
*
|
|
* 来自网络~~
|
|
*/
|
|
|
|
public class Shell {
|
|
|
|
|
|
private static final String TAG = "Shell";
|
|
|
|
private final static String COMMAND_SU = "su";
|
|
private final static String COMMAND_SH = "sh";
|
|
private final static String COMMAND_EXIT = "exit\n";
|
|
private final static String COMMAND_LINE_END = "\n";
|
|
|
|
/**
|
|
* Command执行结果
|
|
*
|
|
* @author Mountain
|
|
*/
|
|
public static class CommandResult {
|
|
public int result = -1;
|
|
public String errorMsg;
|
|
public String successMsg;
|
|
}
|
|
|
|
/**
|
|
* 执行命令—单条
|
|
*
|
|
* @param command
|
|
* @param isRoot
|
|
* @return
|
|
*/
|
|
public static CommandResult execCommand(String command, boolean isRoot) {
|
|
String[] commands = {command};
|
|
return execCommand(commands, isRoot);
|
|
}
|
|
|
|
/**
|
|
* 执行命令-多条
|
|
*
|
|
* @param commands
|
|
* @param isRoot
|
|
* @return
|
|
*/
|
|
public static CommandResult execCommand(String[] commands, boolean isRoot) {
|
|
CommandResult commandResult = new CommandResult();
|
|
if (commands == null || commands.length == 0) return commandResult;
|
|
Process process = null;
|
|
DataOutputStream os = null;
|
|
BufferedReader successResult = null;
|
|
BufferedReader errorResult = null;
|
|
StringBuilder successMsg = null;
|
|
StringBuilder errorMsg = null;
|
|
try {
|
|
process = Runtime.getRuntime().exec(isRoot ? COMMAND_SU : COMMAND_SH);
|
|
os = new DataOutputStream(process.getOutputStream());
|
|
for (String command : commands) {
|
|
if (command != null) {
|
|
os.write(command.getBytes());
|
|
os.writeBytes(COMMAND_LINE_END);
|
|
os.flush();
|
|
}
|
|
}
|
|
os.writeBytes(COMMAND_EXIT);
|
|
os.flush();
|
|
commandResult.result = process.waitFor();
|
|
//获取错误信息
|
|
successMsg = new StringBuilder();
|
|
errorMsg = new StringBuilder();
|
|
successResult = new BufferedReader(new InputStreamReader(process.getInputStream()));
|
|
errorResult = new BufferedReader(new InputStreamReader(process.getErrorStream()));
|
|
String s;
|
|
while ((s = successResult.readLine()) != null) successMsg.append(s);
|
|
while ((s = errorResult.readLine()) != null) errorMsg.append(s);
|
|
commandResult.successMsg = successMsg.toString();
|
|
commandResult.errorMsg = errorMsg.toString();
|
|
Log.i(TAG, commandResult.result + " | " + commandResult.successMsg
|
|
+ " | " + commandResult.errorMsg);
|
|
} catch (Exception e) {
|
|
String errmsg = e.getMessage();
|
|
if (errmsg != null) {
|
|
Log.e(TAG, errmsg);
|
|
} else {
|
|
e.printStackTrace();
|
|
}
|
|
} finally {
|
|
try {
|
|
if (os != null) os.close();
|
|
if (successResult != null) successResult.close();
|
|
if (errorResult != null) errorResult.close();
|
|
} catch (IOException e) {
|
|
String errmsg = e.getMessage();
|
|
if (errmsg != null) {
|
|
Log.e(TAG, errmsg);
|
|
} else {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
if (process != null) process.destroy();
|
|
}
|
|
return commandResult;
|
|
}
|
|
|
|
}
|