Android:应用程序无法在某些root设备上运行...为什么?

时间:2010-10-12 20:28:25

标签: android

我在市场上有一款仅适用于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
        }

    }

1 个答案:

答案 0 :(得分:0)

我同意克里斯托弗的评论:你似乎做了一些假设:

  • /system位于/dev/block/mtdblock3
  • / dev/block/mtdblock3yaffs2
  • /etc//system
  • 上的内容的硬链接或符号链接
  • mount存在
  • dos2unix存在
  • cp存在
  • su存在

大多数应该在运行时可测试,但/etc/检查可能有点棘手。在应用程序的第一次运行时测试这些东西,然后做任何有意义的事情:

  • “抱歉,如果您发现故障,此应用将无效”
  • 禁用菜单/按钮/导致执行代码的任何内容