日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國(guó)內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁(yè) > php開源 > 綜合技術(shù) > 在android程序中調(diào)用shell命令與腳本

在android程序中調(diào)用shell命令與腳本

來(lái)源:程序員人生   發(fā)布時(shí)間:2015-01-17 09:44:07 閱讀次數(shù):3163次

最近做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)

Runtime.getRuntime().exec("ls");

這是最簡(jiǎn)單的1種,你輸入后就可以就會(huì)履行l(wèi)s命令,如果要取得輸出的話可以這樣寫

Process p = Runtime.getRuntime().exec("ls"); String data = null; BufferedReader ie = new BufferedReader(new InputStreamReader(p.getErrorStream())); BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream())); String error = null; while ((error = ie.readLine()) != null && !error.equals("null")) { data += error + " "; } String line = null; while ((line = in.readLine()) != null && !line.equals("null")) { data += line + " "; } Log.v("ls", data);


(2)

但是我所要寫的需要通過(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后履行以下命令

Process proc = Runtime.getRuntime().exec(new String[]{"su", reboot});

但是?。。?!這個(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)行的命令以下:


Process proc = Runtime.getRuntime().exec(su -c reboot);

這樣機(jī)子就可以通過(guò)root權(quán)限履行重啟命令了。


(3)

但當(dāng)我們遇到這樣的需求呢!要求運(yùn)行的shell命令以下

<pre name="code" class="java">Process proc = Runtime.getRuntime().exec(su -c "ls /data");


經(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)用就成功了。


Process proc = Runtime.getRuntime().exec("su -s sh -c /data/initcommand.sh");

注意,這里面有和上面相同的問(wèn)題,如果不加里面的-c參數(shù)的話還是會(huì)把后面的文件當(dāng)作su的參數(shù),固然-c也能夠改成-s,這樣就可以履行initcommand.sh腳本了,如果不行試試將腳本改成777權(quán)限。

生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 日韩午夜精品 | 久久精品一级 | 日本免费色 | 精品国产自在精品国产浪潮 | 国产精品久久久久久网站 | 精品综合久久久 | 九九在线免费视频 | 这里精品 | 最新av电影网站 | 欧美日本国产 | 亚洲一区二区在线免费观看 | 99国产在线| 国产精彩免费视频 | 国产高清一区二区三区 | 国产性―交一乱―色―情人免费看 | 久久综合影视 | 日本一区二区三区四区 | 亚洲网在线 | 综合av在线| 一区二区三区在线视频播放 | 久9热这里只有精品视频 | 国产一区二区三区在线看 | 欧美日韩免费中文字幕 | 日韩精品久久一区二区三区 | 国产伦精品一区二区三区在线 | 91麻豆精品一二三区在线 | 日韩久 | 国产精品一区二 | 污污的视频网站 | 亚洲福利在线观看 | 91第一页 | 欧美日韩综合精品 | 亚洲欧美成人网 | 精品久久a | 久久中文字幕一区二区 | 国产一级免费 | 精品久久精品久久 | 亚洲福利电影网 | 精品一区二区三区国产 | 日韩免费高清 | 99国产精品99久久久久久 |