1 什麼是busybox?
BusyBox 是一個內建了一百多個最常用linux指令和工具的軟體。BusyBox 包含了一些簡單的工具,例如ls、 cat 和 echo等等,還包含了一些更大、更複雜的工具,例如 grep、find、mount 以及 telnet。有些人将 BusyBox 稱為 Linux 工具裡的瑞士軍刀。簡單的說BusyBox就好像是個大工具箱,它內建壓縮了 Linux 的許多工具和指令。也包含了 Android 系統的自帶的shell.其官網是: http://www.busybox.net/
為什麼要在Android中加入busybox?
用過adb shell的人應該知道,在預設情況下,adb shell下是不能用clear,grep, find,vi等指令的,甚至連Tab鍊自動補全功能都不能用,對于已經習慣了使用這些指令的碼農們來說,這是件比較悲摧的事情。幸運地是,我們有了busybox!
2 下載下傳busybox
打開下載下傳界面:http://www.busybox.net/downloads/binaries/ ,如下圖:
選擇最新的版本: 1.19.0, 然後進入下一個界面:
選擇适合你的裝置的版本進行下載下傳,這裡我們為Android子產品器下載下傳busybox-armv6l.
下載下傳下來後,将其重命名為busybox:
[plain] view plain copy
- $mv busybox-armv6l busybox
- $chmod 755 busybox
3 放入模拟器
首先用adb shell進入模拟器,在/data目錄下建立一個busybox的目錄,然後将busybox放入此目錄下.
[plain] view plain copy
- $adb shell
- #cd /data
- #mkdir busybox
- #exit
- $adb shell push busybox /data/busybox
如下圖:
4 安裝并運作busybox所提供的工具
重新adb shell連接配接上模拟器,進入到/data/busybox目錄下,然後輸入
[plain] view plain copy
- #./busybox clear
試試是不是就可以生效了呢?呵呵
可是這樣還是不是很好使用,因為每次使用 busybox指令時都得在指令行前面加上./busybox字首,這個很麻煩,是以,我們先将bosybox提供的這些指令安裝到模拟器下,就可以省去這些麻煩了。
安裝:
在/data/busybox目前目錄下,輸入:
[plain] view plain copy
- #./busybox --install ./
--install 後面的./表示安裝到目前目錄,之是以要安裝到目前目錄,是因為預設安裝到/system/bin目錄下或/system/xbin目錄下是不能成功的,因為沒有足夠的權限.
然後在目前目錄下再次輸入:
[plain] view plain copy
- #./clear
可以看到clear指令生效了,比之前已前進了一步了.不過還是不是很好,是以運作 busybox所提供的指令必須進入到/data/busy目錄或在指令中輸入./data/busybox/clear,諸如這些的指令,還是比較麻煩,是以,接下來需要修改一個PATH的值:
[plain] view plain copy
- # export PATH=/data/busybox:$PATH
然後試着在任何目錄下運作clear,可以看到已經OK了。恭喜你,終于安裝busybox成功了!
不過,還是有些東西不是很友善,至少還存在以下三個不足之處:
[plain] view plain copy
- 1 Tab 鍵的自動補全功能還是不行.
- 2 #号前沒有顯示目前路徑,這使我們經常不知目前已經進入到目錄的哪一層了.
- 3 退出adb shell後再次進入,得重新設定PATH值才能恢複友善使用busybox工具.
至于前面這個問題,其實busybox下有一個ash的shell,直接運作它:
[plain] view plain copy
- #ash
然後我們就可以試試,看看是不是tab鍵自動補全功能還顯示目前路徑的功能已經有了呢.OK,前面兩個問題已經解決,下次我去使用bosybox的時候,首先先運作ash就可以了.這樣運作之後,原本沒有任何顔色的顯示也會變成豐富多彩起來,如下圖所示:
還剩下最後一個問題.最後一個問題的解決方法,在adb shell後,Android模拟器根目錄下有一個init.rc檔案.如上圖,用vi打開(vi也是busybox提供的工具),在最後一行加入如下指令:
[plain] view plain copy
- # export PATH=/data/busybox:$PATH
然後儲存,系統提示目前檔案為隻讀檔案,不能儲存.看來沒有寫的權限,需要擷取足夠權限後再來修改此檔案,然後儲存才能解決此第三個問題.
隻可惜此檔案為隻讀權限,我試了安裝z4root軟體擷取root權限,修改default.prop等諸多方法,都沒能儲存修改init.rc的内容。。。估計在adb 下是不能修改它的。可以嘗試adb remount
我知道的另一種方法就是在源碼下的out目錄下修改 init.rc檔案,然後重新生成鏡像檔案,再重新啟動模拟器,但是這種方法相當于重新刷機。有一定的局限。