Android双机(网络和USB)调试及其完美ROOT
本文主要講如下兩個(gè)內(nèi)容。
1.? 如何讓一部Android手機(jī)帶兩臺(tái)PC進(jìn)行調(diào)試。
2.? 如何完美Root Android手機(jī)。
? ? 我曾經(jīng)遇到過(guò)這樣的問(wèn)題,Mac OS X上測(cè)試Android的系統(tǒng)程序,大家都知道,Android源代碼的編譯通常需要Ubuntu Linux,所以在Mac OS X上安裝了Vmware ubuntu。這樣本沒(méi)什么問(wèn)題。將Android手機(jī)與MBP相連,系統(tǒng)會(huì)提示連接Mac OS X,還是Ubuntu。不過(guò)這有一個(gè)問(wèn)題,就是ubuntu和mac os x同時(shí)只能連接一個(gè)。由于某些需要,要用到Mac OS X上的Eclipse編寫(xiě)Android應(yīng)用,也能安裝在同一部Android手機(jī)上,這就很郁悶,單單通過(guò)USB線只能連接一臺(tái)PC(包括虛擬機(jī))。
?? 從技術(shù)上說(shuō),adb完全有這個(gè)能力使一部Android手機(jī)連接到兩臺(tái)PC上,不過(guò)可能大多數(shù)讀者用的ROM是官方,為了安全起見(jiàn),將該功能關(guān)了。如果讀 者使用了最新的CM ROM(cm10.1,可能老的版本也有該功能,這個(gè)還沒(méi)測(cè)試),就會(huì)發(fā)現(xiàn)在設(shè)置的“開(kāi)發(fā)者選項(xiàng)”中多了一個(gè)“網(wǎng)絡(luò)ADB調(diào)試”。如圖1所示。這可是夢(mèng)寐 以求的功能。
????????????????????????? 圖1
????? 選擇“網(wǎng)絡(luò)ADB調(diào)試”選項(xiàng)。然后記住下面的ip和端口號(hào)。在一臺(tái)機(jī)器上用USB線連接手機(jī),Eclipse的devices列表就會(huì)顯示該手機(jī)已連接成功。如果仍然用當(dāng)前PC通過(guò)網(wǎng)絡(luò)連接ADB,需要執(zhí)行下面的命令(PC與手機(jī)在同一網(wǎng)段)。
?? adb kill-server
?? adb connect 192.168.17.103:5555
?? 如果一切正常,就已經(jīng)連上了,打開(kāi)Eclipse,會(huì)在devices列表看到如圖2的設(shè)備。
???????????????????????????????????????????? 圖2
?????? 其實(shí)這兩個(gè)設(shè)備是一個(gè),只是上邊那個(gè)通過(guò)網(wǎng)絡(luò)連接的手機(jī),下邊那個(gè)通過(guò)USB線連接的手機(jī)?,F(xiàn)在運(yùn)行程序,仍然會(huì)看到要求選擇運(yùn)行設(shè)備,如圖3所示。
???????????????????????????????????????????????????????????? 圖3
其實(shí)現(xiàn)在選哪個(gè)都行,因?yàn)檫@兩個(gè)設(shè)備只是通過(guò)不同方式與PC連接。
????? 如果在不同的PC上(或PC和虛擬機(jī)),一個(gè)通過(guò)USB線,一個(gè)通過(guò)網(wǎng)絡(luò)。兩臺(tái)機(jī)器中的eclipse就可以在同一部手機(jī)上調(diào)試程序了,是不是很爽呢!
???? 如果要斷開(kāi)網(wǎng)絡(luò)adb連接,執(zhí)行adb disconnect命令。
??? 要注意,這一操作比較危險(xiǎn),一旦選擇“網(wǎng)絡(luò)adb調(diào)試”,只要同一網(wǎng)段的其他用戶獲知IP和端口號(hào),就可以任意操作你的手機(jī),而且不會(huì)有任何提示。甚至是在地球的另一端(只要你們?cè)谕粋€(gè)網(wǎng)段,包括VPN)。
現(xiàn)在進(jìn)入第二個(gè)主題,如果完美獲取Android手機(jī)的ROM。由于前面使用的是CMROM(不知道CM ROM是什么的上網(wǎng)自己查),所以這里仍然討論CM ROM的root過(guò)程。
???? 可能剛一接觸Android手機(jī)的讀者會(huì)感覺(jué)root一部手機(jī)很復(fù)雜,其實(shí)再簡(jiǎn)單不過(guò)了。Root的基本原理就是在Android系統(tǒng)的/system /xbin目錄放一個(gè)su命令。用過(guò)su的linux用戶都知道su是什么東西,一個(gè)提取root權(quán)限的命令。如果讀者用的是CM ROM,在/system/xbin目錄已經(jīng)有了su命令。而且在設(shè)置里可以打開(kāi)root權(quán)限(cm的低版本直接就打開(kāi)了root權(quán)限),所以使用CM ROM,這一步可以省了。當(dāng)然,如果使用的不是CM ROM,也好吧。下一個(gè)CM ROM壓縮包,將里面的雜七雜八的東西都刪掉(包括內(nèi)核鏡像boot.img),只保留system/xbin目錄中的su文件(該文件也可以上網(wǎng)找一個(gè) 現(xiàn)成的,或直接編譯android源代碼中的su也可以,默認(rèn)是不帶這個(gè)命令的)和META-INF目錄,然后重新打包成update.zip。然后最好 刷一個(gè)clockworkmod recovery,這個(gè)比較好,update.zip不需要簽名驗(yàn)證就可以刷。之后就可以在recovery模式下刷update.zip了。這個(gè) update.zip并不是完整的ROM,只是一個(gè)升級(jí)包,目的是將su文件放到/system/xbin目錄中(該目錄沒(méi)有root權(quán)限是只讀的)。刷 完后,進(jìn)入手機(jī)的shell(adb shell),然后執(zhí)行su,發(fā)現(xiàn)原來(lái)的$變成了#,表明已經(jīng)是root了,當(dāng)然,有些目錄還是不可寫(xiě),例如,為了使system及其子目錄可寫(xiě),需要再 次執(zhí)行下面的命令。
mount –o rw,remount /system
????? 現(xiàn)在還有一個(gè)問(wèn)題,就是通過(guò)adb shell進(jìn)入Shell,默認(rèn)仍然是$,這就有些麻煩,因?yàn)閷?duì)于程序員來(lái)說(shuō),需要調(diào)試系統(tǒng)程序,要用adbremount命令使/system/app 目錄變成可寫(xiě)的,然后可用adb push命令直接將apk文件上傳到該目錄。但如果默認(rèn)不是root,是不能執(zhí)行該命令的(權(quán)限不允許)。所以我們還需要做另外一件事,就是修改 Android系統(tǒng)根目錄的default.prop的內(nèi)容,通??梢愿某扇缦聝?nèi)容。
ro.adb.secure=0 ro.secure=0 ro.allow.mock.location=1 ro.debuggable=1 persist.sys.usb.config=mass_storage,adb persist.service.adb.enable=1?????? 最大的問(wèn)題就是default.prop是內(nèi)存文件,改了也沒(méi)用,一重啟就會(huì)恢復(fù)原樣,而且只有重啟才能生效(好像進(jìn)入了二難推理)。所以修改 default.prop文件的方法是直接修改boot.img文件。該文件由兩部分組成:zImage和ramdisk.img。其中zImage就是 linux內(nèi)核的二進(jìn)制文件。ramdisk.img是內(nèi)存磁盤鏡像。該鏡像中就包含了被稱為Android第一個(gè)運(yùn)行的程序init。 default.prop文件也包含在該鏡像中。下面就需要android源代碼和linux內(nèi)核源代碼了。強(qiáng)烈建議使用CM提供的源代碼,因?yàn)镃M團(tuán)隊(duì) 已經(jīng)為我們進(jìn)行了完美的適配,所以只需要修改與業(yè)務(wù)相關(guān)的內(nèi)容即可?,F(xiàn)在讓我們向CM團(tuán)隊(duì)致敬。
?????? Android源代碼編譯后,在out目錄的相關(guān)子目錄錄生成了一個(gè)root目錄,該目錄中的內(nèi)容就是ramdisk.img文件解壓后的內(nèi)容?,F(xiàn)在找到default.prop文件,并安著上面的內(nèi)容修改該文件。然后使用下面的命令重新生成ramdisk.img文件。
mkbootfs root | minigzip > /ramdisk.img
接下來(lái)使用下面的命令重新生成boot.img文件。
mkbootimg --kernel kernel? --ramdisk ramdisk.img -o boot.img
其中kernel是內(nèi)核二進(jìn)制文件,與zImage完全一樣。只是編譯android源代碼時(shí)將其命名為
?????? ok, 現(xiàn)在可以進(jìn)入bootloader模式,然后重新執(zhí)行fastboot flash bootboot.img刷內(nèi)核鏡像,然后再重啟手機(jī),現(xiàn)在進(jìn)入shell,ok,默認(rèn)就是#了。退出shell,執(zhí)行adb remount。就可以用adb push上傳文件到/system的其他目錄了,如/system/app。
轉(zhuǎn)載于:https://www.cnblogs.com/nokiaguy/archive/2013/05/05/3061431.html
總結(jié)
以上是生活随笔為你收集整理的Android双机(网络和USB)调试及其完美ROOT的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 五个iOS小技巧,你都会吗
- 下一篇: 域名恶意指向的问题解决