我在市场上有一款仅适用于root设备的应用。我已经在一个有根和无根的G1,MT3G和Cliq上广泛测试了这个应用程序,没有任何错误。我收到了一些来自那些拥有根设备的人的低收视率,说该应用程序告诉他们他们没有扎根(当然,他们通常不会留下重要的信息,如什么电话和什么rom)
以下是生成错误的代码......任何人都可以看出问题可能是什么?
final Button button = (Button) findViewById(R.id.******);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
String command1 = "mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system";
String command2 = "cp -f /sdcard/******* /etc/";
String command3 = "dos2unix -u /etc/*****";
String command4 = "mount -o ro,remount -t yaffs2 /dev/block/mtdblock3 /system";
execCommandLine1(command1);
execCommandLine1(command2);
execCommandLine1(command3);
execCommandLine1(command4);
}
void execCommandLine1(String command)
{
Runtime runtime = Runtime.getRuntime();
Process proc = null;
OutputStreamWriter osw = null;
try
{
proc = runtime.exec("su");
osw = new OutputStreamWriter(proc.getOutputStream());
osw.write(command);
osw.flush();
osw.close();
}
catch (IOException ex)
{
Log.e("execCommandLine()", "Command resulted in an IO Exception: " + command);
return;
}
finally
{
if (osw != null)
{
try
{
osw.close();
}
catch (IOException e){}
}
}
try
{
proc.waitFor();
}
catch (InterruptedException e){}
if (proc.exitValue() != 0)
{
**// Error Dialog that is being erroneously displayed**
}
else {
// Success Dialog
}
}
答案 0 :(得分:0)
我同意克里斯托弗的评论:你似乎做了一些假设:
/system
位于/dev/block/mtdblock3
dev/block/mtdblock3
是yaffs2
/etc/
是/system
mount
存在dos2unix
存在cp
存在su
存在大多数应该在运行时可测试,但/etc/
检查可能有点棘手。在应用程序的第一次运行时测试这些东西,然后做任何有意义的事情: