最近做android的1個(gè)功能就是調(diào)用shell命令來(lái)進(jìn)行1些系統(tǒng)級(jí)別的操作,比如說(shuō)是關(guān)機(jī)開機(jī)之類的,現(xiàn)在總結(jié)1下具體的用法和遇到的坑(基于我所用到的,沒(méi)用到的我就不說(shuō)了)
(1)
這是最簡(jiǎn)單的1種,你輸入后就可以就會(huì)履行l(wèi)s命令,如果要取得輸出的話可以這樣寫
但是我所要寫的需要通過(guò)root權(quán)限來(lái)履行,比如說(shuō)重啟的reboot命令,履行這個(gè)的話用普通的身份去履行的話是不會(huì)成功的,會(huì)報(bào)permission denyed,那我們?nèi)绾尾拍苈男心?,大家都知道adb shell吧,1般root過(guò)的機(jī)子都能夠通過(guò)su來(lái)取得管理員權(quán)限,但是沒(méi)root過(guò)的話就不能了,這就需要把機(jī)子進(jìn)行root了。
root后履行以下命令
但是?。。?!這個(gè)命令貌似不是所有的機(jī)子都可以用的,反正我就是遇到這樣的坑,從報(bào)錯(cuò)信息中可以看到,su和reboot是連起來(lái)履行的,所以會(huì)解析成su reboot,這樣的話會(huì)產(chǎn)生1個(gè)問(wèn)題,su 加上 reboot后reboot會(huì)被解析成su的命令參數(shù),我們打1下su -help可以看到su的所有參數(shù),明顯可以看出reboot不能直接跟在su后面,所以后來(lái)我發(fā)現(xiàn)1種可以運(yùn)行的命令以下:
(3)
但當(dāng)我們遇到這樣的需求呢!要求運(yùn)行的shell命令以下
經(jīng)過(guò)測(cè)試,雖然這段代碼中的命令在adb shell中能夠完善運(yùn)行,但是放到android的java程序中就跪了。。。在android程序中貌似會(huì)把/data"當(dāng)作su的1段參數(shù)致使命令1直履行毛病,無(wú)奈,弄了好久能沒(méi)能弄出來(lái),因而就改變了實(shí)現(xiàn)方法,用第4種方法去實(shí)現(xiàn)了。
(4)
第4種方法也是無(wú)奈之舉,大家誰(shuí)有更好的建議歡迎提出。
這類方法就是將所要履行的命令寫成1個(gè)shell腳本,然后,在程序中調(diào)用這個(gè)shell腳本,
我把命令寫成shell腳本放在了手機(jī)的目錄中,然后按以下方式調(diào)用就成功了。