2011-09-25 178 views
6

嗨,我正在開發一個應用程序,需要我運行一些bash代碼是否有一種方法,我可以將腳本硬編碼到我的應用程序,然後運行它?舉例來說(這是一個非常簡單的例子)Android在應用中運行bash命令

#!/system/bin/sh 
# 

if [ ! -f /sdcard/hello.txt ] 
then 
echo 'Hello World' >> /sdcard/hello.txt 
else 
echo 'Goodbye World' >> /sdcard/goodbye.txt 
fi 

我有一個運行bash的一行命令下面的方法,但需要運行類似的東西那是多條線路上。再次說,上面的代碼是一個非常簡單的例子,我實際上正在做的事情必須通過腳本來運行,並且不能通過java完成。我也想讓它硬編碼,我知道可以將腳本存儲在手機中,然後使用以下代碼運行它,但不希望腳本只是在應用程序中硬編碼。

public Boolean execCommand(String command) 
    { 
     try { 
      Runtime rt = Runtime.getRuntime(); 
      Process process = rt.exec("su"); 
      DataOutputStream os = new DataOutputStream(process.getOutputStream()); 
      os.writeBytes(command + "\n"); 
      os.flush(); 
      os.writeBytes("exit\n"); 
      os.flush(); 
      process.waitFor(); 
     } catch (IOException e) { 
      return false; 
     } catch (InterruptedException e) { 
      return false; 
     } 
     return true; 
    } 

感謝您對我的問題

回答

8

如果我理解正確,任何幫助,所有你需要做的是改變一個行示例方法來一些東西,接收和發送多條線路,像這樣:

public Boolean execCommands(String... command) { 
    try { 
     Runtime rt = Runtime.getRuntime(); 
     Process process = rt.exec("su"); 
     DataOutputStream os = new DataOutputStream(process.getOutputStream()); 

     for(int i = 0; i < command.length; i++) { 
      os.writeBytes(command[i] + "\n"); 
      os.flush(); 
     } 
     os.writeBytes("exit\n"); 
     os.flush(); 
     process.waitFor(); 
    } catch (IOException e) { 
     return false; 
    } catch (InterruptedException e) { 
     return false; 
    } 
    return true; 
} 

這樣的話,你可以叫你多的bash命令,就像這樣:

String[] commands = { 
      "echo 'test' >> /sdcard/test1.txt", 
      "echo 'test2' >>/sdcard/test1.txt" 
    }; 

    execCommands(commands); 

    String commandText = "echo 'foo' >> /sdcard/foo.txt\necho 'bar' >> /sdcard/foo.txt"; 

    execCommands(commandText.split("\n")); 
+0

感謝代碼要在幾分鐘內嘗試這個嘗試,希望它運作良好:) – user577732

+0

工作正如我想要的第二種方法來運行它將是非常有益的感謝噸! – user577732

+0

我正在使用相同的東西,但它不適合我。 它真的爲你工作嗎?我正在使用系統應用程序。 – NovusMobile