【发布时间】:2011-12-08 13:41:35
【问题描述】:
我无法弄清楚我的代码发生了什么。我正在尝试创建个人资料应用程序。该设备已植根并包含 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 中运行时,所有挂载命令和我正在做的不同事情都有输出。这些都没有在输出字符串中输出。
有什么建议吗?
【问题讨论】:
-
如果
password包含诸如;或&或*或?等shell 元字符,您的exec()调用可能无法按预期执行。如果 Android 允许您访问更像execve(2)而不太像system(3)的东西,那么使用它是明智的。 (虽然我认为这与您当前的问题无关。) -
不。密码中没有特殊字符。只是一个简单的字符串,虽然这是我需要检查的东西。此外,Android 似乎没有 execve,尽管我对此不太了解。
标签: android linux shell command root