簡體   English   中英

在Android中執行多個root shell命令

[英]Execute multiple root shell commands in Android

我正在開發一個在不同時間執行多個shell命令的應用程序。 我正在使用以下方法:

public void RunAsRoot(String[] cmds){
        Process p = Runtime.getRuntime().exec("su");
        DataOutputStream os = new DataOutputStream(p.getOutputStream());            
        for (String tmpCmd : cmds) {
                os.writeBytes(tmpCmd+"\n");
        }           
        os.writeBytes("exit\n");  
        os.flush();
}

該方法可以正常工作,但是每次我需要調用它時,它總是打開一個新的外殼程序,這樣它就顯示出討厭的吐司“應用程序已被授予root權限”。 我認為這是因為它總是打開和關閉具有SU訪問權限的新外殼。 我的問題是:有什么辦法可以使SU外殼始終保持打開狀態,以便我可以在需要時運行命令而無需接收SU吐司?

因此,這可能有點晚了,但是如果您仍在尋找解決方案:只需聲明

private Process p = Runtime.getRuntime().exec("su");

在您班級的全球范圍內。 這應該適合您的需求。 您實際上可以在onResume()產生該進程,然后在onPause()再次destroy()它。

@Override  
onResume() {
  if(//check for root) {
     try { 
         this.p = Runtime.getRuntime().exec("su"); 
         } 
     catch(IOException e) { 
         // Exception handling goes here 
         }
     }
  //set up everything else
}

@Override  
onPause() {
  this.p.destroy();
}

順便說一句:在上述方法中,我看到了嚴重的內存泄漏:您打開了許多SU進程,但是再也不會destroy()它們。 取決於您調用此方法的頻率,將有越來越多的SU進程在RAM中徘徊,直到您的應用關閉。

所以

public void runAsRoot(String[] cmds){ try { Process p = Runtime.getRuntime().exec("su"); } catch(IOException e) { // Exception handling goes here } DataOutputStream os = new DataOutputStream(p.getOutputStream());
for (String tmpCmd : cmds) { os.writeBytes(tmpCmd+"\\n"); }
os.writeBytes("exit\\n"); os.flush(); p.destroy(); }

在這里會很好。 我也在問自己是否可以編譯您的方法。 通常是Runtime.getRuntime().exec(); 必須被try / catch包圍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM