原谅我,我不是Linux的核心程序员。这是我第一次做任何linux编码,对我来说很光。
所以我在这里阅读了很多关于这个主题的帖子,而且我无法弄清楚我的代码发生了什么。基本上,我正在尝试创建个人资料应用程序。该设备已植根并包含BusyBox。我编写了一个linux脚本,根据登录的用户交换/ data和/ cache分区。
当我从ADB执行此脚本时,它完美运行。我认为在应用程序中实现它会相当容易。
#sp登录用户名密码
Android使用新配置文件重新初始化,一切都很好。这就是我在Android中所拥有的:
Log.v("Profiles", "sp login " + user + " " + password);
Process process = Runtime.getRuntime().exec("sp login " + user + " " + password);
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
int read;
char[] buffer = new char[4096];
StringBuffer output = new StringBuffer();
while ((read = reader.read(buffer)) > 0) {
output.append(buffer, 0, read);
}
reader.close();
process.waitFor();
Log.v("Profiles", output.toString());
唯一记录的是我在实际脚本中的“回声”。我没有看到该脚本中执行的命令的任何结果。例如,在ADB中运行时,所有mount命令和我正在做的不同事情都有输出。这些都不在输出字符串中输出。
有什么建议吗?
答案 0 :(得分:0)
你需要执行" su"对于将执行shell脚本的进程。
否则,即使设备已经植根,此过程也没有root权限。
以下代码是您参考的示例。
public void RunAsRoot(String[] cmds){
try{
Process p = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(p.getOutputStream());
for(String tmpCmds : cmds){
os.writeBytes(tmpCmds+"\n");
os.flush();
os.writeBytes("exit\n");
os.flush();
}
BufferedReader stdInput = new BufferedReader(new
InputStreamReader(p.getInputStream()));
// read the output from the command
String s = null;
while ((s = stdInput.readLine()) != null) {
System.out.println(s);
}
}catch(Exception e){
Log.e(LOG_TAG, "RunAsRoot exec failed");
}
}