天天看點

分析RunTime執行指令以及得到傳回值RunTime執行指令得到傳回值

我們有在好好幾篇部落格裡提到過RunTime,比如

<a href="http://blog.csdn.net/qq_26787115/article/details/51804311">JAVA之旅(二十三)——System,RunTime,Date,Calendar,Math的數學運算</a>

<a href="http://blog.csdn.net/qq_26787115/article/details/52808525">Android源碼淺析(五)——關于定制系統,如何給你的Android應用系統簽名</a>

而今天同樣的,來聊聊RunTime,我們執行這些指令的時候擷取到我們的傳回值,實際上是比較簡單的,但是RunTime的局限性也有點大,很多都沒有權限。我們接着看,我現在在終端輸入
看下會輸出什麼
分析RunTime執行指令以及得到傳回值RunTime執行指令得到傳回值
那我問你,在Android中我們應該怎麼去做?我們簡單的分析一下,首先,最簡單的就是執行語句了
但是他的工作原理是什麼呢?我們都沒多大的了解,那我們就去源碼裡看看
他實際上執行的是exec的本類方法,我們繼續看:
他這裡重載了多個exec,我們繼續追蹤,但是可以肯定是的是,他的傳回時一個Process 對象,好的,繼續追我們可以看到
他最終是new了一個ProcessBuilder去start執行,這裡就不往下繼續追了,可以看出,他在多個地方有I/O異常,這足以說明了一點,就是他是關于流的操作,那我們肯定是可以我們是能拿到流的,那我們可以直接get了
我們看他的源碼裡知道他的Process 是可以拿到流,那我們嘗試一下就能拿到InputStream 先試着去讀取一下,那我們的執行代碼應該就是這樣寫:
把這段代碼執行下看下是否是能拿到結果:
分析RunTime執行指令以及得到傳回值RunTime執行指令得到傳回值
果不其然,是能拿到的,那樣就很好了解RunTime了,一場關于I和O的戰鬥即将展開,我們看看其他的指令
分析RunTime執行指令以及得到傳回值RunTime執行指令得到傳回值
反複的測試了一下,也驗證了RunTime了其實局限性還是有的,不過大多數是權限的問題,如果有系統的簽名檔案的話,那就比較順利了,不然就隻能使用一些簡單的命名做做Demo ,而關機,關機什麼的,也是需要Root權限的,關于開關機,可以參考我的這篇Blog:

<a href="http://blog.csdn.net/qq_26787115/article/details/50503620">Android實訓案例(二)——Android下的CMD指令之關機重新開機以及重新開機recovery</a>

到這裡,本片算是OK了,簡單的分析了一下過程,Demo就不上傳了,直接貼上代碼
有興趣的加群:555974449,我們繼續聊聊人生

繼續閱讀