2012-05-03 58 views
1

我基本上想要從應用程序java命令啓動一個駐留在/system/bin/...中的進程。 我試過所有類型的Runtime.process.exec()選項 嘗試了suouputStream組合,但沒有任何東西能夠啓動應用程序。 我在設備和模擬器中使用代碼,兩者都沒有運氣。 我能夠成功地從ADB Shell運行相同的命令(因爲它具有root權限)。在Android應用程序上執行基於Root Access的命令

該設備是紮根的,我可以看到#當我使用adb來調試我的設備,它也可以通過adb進入su。 基於我的搜索我發現(在從adb外殼做ps之後) 我可以從應用程序層使用lrwz -x-x權限運行任何命令,例如(ls-> toolbox,ps-> toolbox)但我無法執行任何其他未鏈接到工具箱的命令。

這並不執行ls

Process p = Runtime.getRuntime().exec("su"); 
DataOutputStream os=new DataOutputStream(p.getOutputStream()); 
os.writeBytes("ls \n"); 
os.flush(); 

但這並執行ls

Process p = Runtime.getRuntime().exec("ls"); 

我真的很感激,如果我能得到任何幫助這裏!我在做了大量的研究之後發佈這篇文章。

+0

嘗試執行程序時會得到什麼錯誤消息或錯誤代碼或異常? – sarnold

+0

您是否在您的超級用戶應用程序中驗證了該應用程序允許訪問「su」。我很確定超級用戶保留一個應用列表黑名單,也許你在某個時候將它列入黑名單 – user931366

+0

@sarnold我沒有得到任何異常或錯誤,只是劑量執行,如果我給 進程p = Runtime.getRuntime()。exec ( 「ス」); DataOutputStream os = new DataOutputStream(p.getOutputStream()); os.writeBytes(「ls \ n」); os.flush(); ls dosent得到執行......但是 進程p = Runtime.getRuntime()。exec(「ls」); 執行沒有任何問題,我得到使用標準輸入流讀取數據。 – codester

回答

0

嘗試創建一個shell腳本文件(如:init.sh)和寫在它下面的命令:

重啓

現在嘗試通過 調用Runtime.getRuntime執行這個shell腳本( ).exec(「sh init.sh」);

如果這個重新啓動你的機器人,那麼你可以編寫你需要的代碼在init.sh文件&運行它。

+0

我試過這個,但它沒有執行:( – codester

+0

嘗試從這個[鏈接]的例子(http://muzikant-android.blogspot.in/2011/02/how-to-get-root-access-and-execute。 html) 它可以幫助你找出究竟是哪裏出了問題 –

1

比發送ls \nsu命令的標準輸入相反,嘗試運行:

su -c ls 

-c選項su(1)要求它運行具有提升的權限命令,而不是開始一個交互的shell。

+0

這也不起作用 – codester

相關問題