2012-09-14 66 views
2

爲了澄清,我用這個代碼來獲得超級用戶權限我的應用程序,所以我可以訪問根和諸如此類的東西:對應用程序的Android「永久」超級用戶權限?

public String runProcess(String[] functs) { 

    DataOutputStream dos; 
    DataInputStream dis; 
    StringBuffer contents = new StringBuffer(""); 
    String tempInput; 
    Process process; 

    try { 
     process = Runtime.getRuntime().exec(functs); 
     dos = new DataOutputStream(process.getOutputStream()); 
     dis = new DataInputStream(process.getInputStream()); 

     for (String command : functs) { 
      dos.writeBytes(command + "\n"); 
      dos.flush(); 

      while ((tempInput = dis.readLine()) != null) 
       contents.append(tempInput + "\n"); 

     } 

     dos.writeBytes("exit\n"); 
     dos.flush(); 
     process.waitFor(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    return contents.toString(); 

} 

雖然它工作得很好,只要我把它runProcess(new String[] { "su", "-c", "some other command" });總是詢問超級用戶權限。我看到市場上的很多root應用程序只需在應用程序的每次啓動時都獲得超級用戶權限,但我不認爲每次應用程序調用某個函數時都需要向用戶請求超級用戶權限這需要SU。所以我的問題是,我將如何提示用戶在應用程序啓動時給予我一次SU權限,而不必爲每個SU相關操作不斷要求它?編輯:我知道我可以運行我的方法/ Runtime.getRuntime()。exec()方法,而不是每次都在其中鍵入「su」,但只能與非su相關的操作一起使用(即exec(「ps 「)或者exec(」 LS「)。任何想法?

回答

1

你可以用我的圖書館,其這樣做了。

https://code.google.com/p/roottools/

另外,如果你不想使用該庫的源可用,所以你可以撕掉我的代碼,並在你的應用程序中使用它。

這裏是到源鏈接:

https://code.google.com/p/roottools/source/browse/#svn%2Ftrunk%2FStable%2FRootTools-sdk3-generic%2Fsrc%2Fcom%2Fstericson%2FRootTools

+0

我看不到它回答了這個問題,只是提供了工具,你能做的更具體嗎? – JPM

+0

嗨,它阻止窗口要求獲得超級用戶權限?它是否與kitkat(4.4.2)一起使用? – ransh

0

每次打開控制檯要求root權限,即時間su啓動,相應的超級用戶的應用程序要麼提示您或允許/拒絕它,如果您在前一個提示中選中了「不要再問我」這樣的內容。

如果您只想詢問(超級用戶應用程序)一次,您將不得不通過撥打dos.writeBytes("exit\n");來保持根控制檯處於打開狀態。 然後將此會話保留在後臺線程中,並在必要時使用它。

因此,要麼確保用戶在第一次提示時檢查「不要再問我」或保持會話打開。

1

如果您只是從設備中已運行的「超級用戶」應用程序尋找權限,則只需在主要java文件中使用以下代碼即可。

try { 
     process p= Runtime.getRuntime().exec(su); 
    } 

catch (IOException e) { 
     e.printStackTrace(); 
    } 

是的,沒必要提及設備必須已經紮根!

相關問題