2010-10-12 100 views
0

我在市場上有一個應用程序,只適用於根植設備。我已經在根本無根的G1,MT3G和Cliq上廣泛測試了該應用程序,沒有任何錯誤。我收到來自植入設備的人的低收視率,說應用程序告訴他們他們沒有植根(當然,他們通常不會留下重要的信息,如電話和什麼光盤)Android:應用程序無法在某些根植設備上工作...爲什麼?

這裏是產生錯誤的代碼...任何人都可以看出問題可能是什麼?

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

而錯誤是......什麼? – CommonsWare 2010-10-12 21:26:05

+0

我想某些設備在'/ dev/block/mtdblock3'可能沒有'/ system'文件系統,或者它們沒有安裝'dos2unix'或者路徑中。 – 2010-10-12 21:33:03

+0

@CommonsWare我的錯誤對話框正顯示在一些有根的設備上......指示(proc.exitValue()!= 0)不應該發生在根源電話上,除非我的命令或我的方式有問題正在執行它們 – 2010-10-12 21:44:15

回答

0

我同意克里斯托弗的評論:你似乎是做一些假設:在/dev/block/mtdblock3

  • /dev/block/mtdblock3

    • /system是爲yaffs2
    • /etc/是硬鏈接或符號鏈接的東西上/system
    • mount存在
    • dos2unix存在
    • cp存在
    • su存在

    其中大多數應該是在運行時間檢驗的,雖然/etc/檢查可能會有點棘手。測試的東西了您的應用程序第一次運行,然後做任何有意義:

    • 一個「抱歉,這個應用程序將無法正常工作」,如果你檢測故障
    • 禁用菜單/按鈕/什麼導致什麼正在執行您的代碼
  • +0

    Happy 50k rep! ;) – 2010-10-12 22:30:41

    +0

    我發現這個命令在互聯網上浮動......它應該掛載適當的掛載點和fs:grep「/ system」/ proc/mounts | awk'{system(「mount -o rw,remount -t」$ 3「」$ 1「」$ 2)}'但是它似乎沒有工作......任何建議? – 2010-10-12 22:32:26

    +0

    @Frank Bozzo:FWIW,我在模擬器上看不到'awk'和'grep'。但是,請記住,您已經擁有了稱爲「Java」的全部編程語言。 :-)閱讀該文件並用Java解析它,以確定你需要什麼。 – CommonsWare 2010-10-12 22:47:46

    相關問題