我正在开发一个程序,该程序需要能够确定 Xlocation 的 android 设备上的内容。我正在使用“su ls Xlocation”
我想取回文件的数组列表,但只能设法取回第一个项目。我是否缺少获取下一行的命令?或者还有什么我需要做的。
下面是我发送的命令
String[] commands = new String[]{"ls /system/app/"};
return doCommand(commands);
下面是我当前的 doCommand 方法
private boolean doCommand(String[] commands)
{
ArrayList<String> output = new ArrayList<String>();
boolean ran = false;
try
{
Process process = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(process.getOutputStream());
DataInputStream ins = new DataInputStream(process.getInputStream());
// This part works I sends the command right!
for (String single : commands)
{
os.writeBytes(single + "\n");
os.flush();
os.writeBytes("exit\n");
os.flush();
process.waitFor();
ran = true;
}
int av = -1;
while (av != 0)
{
//////////////////////////// WORKING ON THIS TO GET ALL INFO /////////////////
av = ins.available();
if (av != 0)
{
byte[] b = new byte[av];
ins.read(b);
output.add(new String(b));
System.out.println(new String(b) + "Recieved form modem");
}
}
}
catch(Exception ex){}
return ran;
}
如目前所见,它只返回真或假。但是在调试中运行我只得到输出中的第一项。(输出=“[first.apk”)
编辑了较新的版本;
public ArrayList<String> doCommand(String[] commands)
{
ArrayList<String> output = new ArrayList<String>();
try
{
Process process = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(process.getOutputStream());
DataInputStream ins = new DataInputStream(process.getInputStream());
for (String single : commands)
{
os.writeBytes(single + "\n");
//os.flush();
output.add("true");
}
os.writeBytes("exit\n");
byte[] bc = new byte[10000];
String st = "";
while(ins.read(bc) != -1)
{
st += new String(bc);
os.flush();
}
output.add(st);
os.flush();
os.close();
ins.close();
process.waitFor();
}
catch(Exception ex)
{}
return output;
}
现在获得了相当数量的输出,但仍然不是所有目录都在我检查过的字节 [10000] 大小限制内有大项目的地方。
如果有人想对此进行改进并获得有效的确切答案,那么我仍然会查看此帖子。
谢谢