和封閉的iOS設(shè)備相比,Android最大的優(yōu)勢(shì)就是開放,玩家可通過無數(shù)渠道下載刷入第三方ROM資源。比如,讓華為手機(jī)體驗(yàn)小米的MIUI,讓三星手機(jī)體驗(yàn)錘子的Smartisan OS。那么,你了解Android刷機(jī)背后的技術(shù)原理嗎?
從Android的啟動(dòng)機(jī)制談起
在手機(jī)關(guān)機(jī)的狀態(tài)下,當(dāng)我們按下電源按鈕,短暫的震動(dòng)提示過后屏幕里就會(huì)出現(xiàn)歡迎界面(比如品牌或運(yùn)營商的Logo),稍等片刻就能進(jìn)入Android系統(tǒng)。而這個(gè)過程就是常規(guī)的“Normal Mode”(正常啟動(dòng)模式),直接調(diào)用最底層的CPU、內(nèi)存等硬件引導(dǎo)系統(tǒng)直至啟動(dòng)成功。
實(shí)際上,除了“Normal Mode”之外,Android還擁有另外兩種啟動(dòng)模式:“Recovery Mode” (恢復(fù)模式)和“Bootloader- Fastboot Mode”(快速啟動(dòng)模式)(圖1)。如果你的Android手機(jī)想體驗(yàn)一番刷機(jī)之旅,那就離不開后面兩種模式的幫忙(圖2)。
“救火隊(duì)員”Fastboot
在PC剛開機(jī)時(shí)我們可以通過按Delete鍵進(jìn)入BIOS,而Bootloader就是嵌入式設(shè)備(如手機(jī)、平板)領(lǐng)域的BIOS。簡單來說,Bootloader是將經(jīng)過編譯的“uboot.bin”鏡像燒錄至設(shè)備里的一個(gè)特定分區(qū)。它支持交互式啟動(dòng),當(dāng)手機(jī)進(jìn)入Bootloader完成初始化后并不會(huì)啟動(dòng)OS,而是停留在當(dāng)前狀態(tài),等待用戶告訴它接下來要去做什么。在這個(gè)狀態(tài)下就是我們常說的“Fastboot Mode”了。
對(duì)Android手機(jī)來說,打開USB調(diào)試模式,連接PC通過“adb reboot bootloader”命令即可進(jìn)入“Fastboot Mode”。此外,在手機(jī)關(guān)機(jī)時(shí)同時(shí)按住音量加和電源鍵(不同品牌型號(hào)的手機(jī)進(jìn)入該模式的方法可能不同,比如有些品牌是需要同時(shí)按音量減和電源鍵),也能進(jìn)入這一模式(圖3)。
對(duì)Android手機(jī)而言,“Fastboot Mode”又被玩家譽(yù)為“直刷模式”和“救磚模式”。顧名思義,“直刷模式”意味著該模式必須在連接PC并安裝相關(guān)驅(qū)動(dòng)和客戶端程序后才能刷入固件ROM或Recovery;而“救磚模式”,則代表無論手機(jī)遇到了多么嚴(yán)重的軟件系統(tǒng)沖突而導(dǎo)致無法正常使用等問題,只要能進(jìn)入這一模式就有機(jī)會(huì)“原地滿血復(fù)活”。
以三星手機(jī)為例,如果手機(jī)系統(tǒng)崩潰無法正常開機(jī),只需提前在網(wǎng)上下載完整的固件ROM,并在Fastboot模式下連接PC,運(yùn)行三星Odin客戶端程序。等Odin識(shí)別出手機(jī)后,選擇固件ROM的路徑即可進(jìn)行“直刷”(圖4),即將固件ROM強(qiáng)行寫入手機(jī)的內(nèi)存中。如果不出意外,直刷后你的手機(jī)就能恢復(fù)正常了。
刷機(jī)的核心Recovery
“Recovery”應(yīng)該是所有Android手機(jī)用戶最為耳熟能詳?shù)年P(guān)鍵詞了。該模式又被稱為“恢復(fù)模式”和“卡刷模式”,一般通過同時(shí)按音量減和電源鍵進(jìn)入(圖6)。比如,當(dāng)你忘記手機(jī)的解鎖密碼,只需進(jìn)入Recovery并執(zhí)行雙清就等同于恢復(fù)了出廠設(shè)置,從而破解密碼重新進(jìn)入系統(tǒng)界面。此外,當(dāng)我們想刷入第三方ROM,也需要進(jìn)入Recovery并選擇ROM對(duì)應(yīng)的zip壓縮包進(jìn)行刷機(jī)(需提前將固件ROM包下載到存儲(chǔ)卡內(nèi))。而上述所有操作都可脫離PC直接在手機(jī)端獨(dú)立完成,卡刷之名就是由此而來。
實(shí)際上,無論是官方OTA(在線升級(jí)),還是我們刷入第三方ROM,其實(shí)都是在Recovery模式下完成的。比如,當(dāng)Android手機(jī)提示有系統(tǒng)更新時(shí)(圖7),當(dāng)我們下載好升級(jí)包并選擇重啟升級(jí)時(shí),手機(jī)便會(huì)自動(dòng)進(jìn)入官方Recovery并執(zhí)行update.zip的更新操作。需要注意的是,在Fastboot模式下也能刷入system.img和boot.img鏡像,只是Recovery模式下的操作更簡單快捷。
當(dāng)我們辛辛苦苦下載了一個(gè)動(dòng)輒800MB的第三方ROM包,在進(jìn)入Recovery進(jìn)行卡刷時(shí)往往會(huì)出現(xiàn)無法識(shí)別或升級(jí)錯(cuò)誤的提示,這是什么原因造成的?
第三方Recovery“參上”
一般來說,官方Recovery都暗藏簽名驗(yàn)證,它只能識(shí)別并刷入官方認(rèn)證的ROM,并將所有第三方ROM資源拒之門外。因此,當(dāng)我們想刷入第三方ROM(比如給OPPO手機(jī)刷MIUI系統(tǒng)),就需要提前先刷入第三方的Recovery。
Recovery的版本是由Recovery.img鏡像決定的,而我們則可通過Fastboot模式刷入第三方的Recovery.img鏡像。好消息是,絕大多數(shù)熱門手機(jī)都能在網(wǎng)上的各大論壇下載到由達(dá)人制作的一鍵Root或一鍵刷第三方Recovery的工具箱(圖8)。手機(jī)與PC連接并根據(jù)工具箱界面提示操作,幾乎毫無難度和危險(xiǎn)性可言。
總之,如果你對(duì)手機(jī)自帶的系統(tǒng)不滿意,想體驗(yàn)第三方ROM的功能,完整的流程應(yīng)該是先進(jìn)入Fastboot模式刷入一個(gè)第三方recovery.img鏡像,再進(jìn)入Recovery模式刷入一個(gè)包含system.img鏡像和boot.img鏡像的zip包。
Wipe “雙清”的必要性
Android手機(jī)用戶一定聽說過“雙清”或“雙Wipe”,它們到底是什么意思,在什么情況下才有必要進(jìn)行上述操作呢?
簡單來說,雙清就是雙Wipe,它是Recovery模式所提供的主要功能之一。所謂雙Wipe指的是“wipe data/factory reset”(清除/data程序數(shù)據(jù)和恢復(fù)出廠設(shè)置)和“wipe cache partition”(清除緩存數(shù)據(jù))。為了便于用戶理解和操作,很多手機(jī)廠商都對(duì)官方Recovery進(jìn)行了圖形化和中文化處理,將雙Wipe直接翻譯成了中文選項(xiàng)(圖9)。除了雙清以外,很多Recovery還提供了四清甚至六清,即加入了清除dalvik cache、格式化系統(tǒng)分區(qū)、格式化手機(jī)內(nèi)置存儲(chǔ)卡和格式化外置存儲(chǔ)卡四個(gè)選項(xiàng),只是這些操作在絕大多數(shù)情況下并沒有實(shí)際意義。
那么,在什么情況下才需要進(jìn)行雙清呢?答案是當(dāng)你想刷入第三方ROM,那就請(qǐng)?jiān)谒⑷隦OM前后分別進(jìn)行一次雙清;或當(dāng)系統(tǒng)版本遇到重要更新,比如從Android 4.x升級(jí)到Android 5.x,在升級(jí)后也請(qǐng)進(jìn)行一次雙清(雙清前請(qǐng)先備份好重要數(shù)據(jù))。此外,當(dāng)你感覺手機(jī)速度變得越來越慢,或頻頻出現(xiàn)不穩(wěn)定的問題,通過雙清(或進(jìn)入系統(tǒng)設(shè)置進(jìn)行恢復(fù)出廠設(shè)置)一般都能讓手機(jī)恢復(fù)到最佳狀態(tài)。
而導(dǎo)致雙清的原因,是因?yàn)锳ndroid系統(tǒng)代碼code和數(shù)據(jù)data是分開的,當(dāng)手機(jī)進(jìn)行多次固件更新或刷入新ROM時(shí)可能會(huì)改變code,也就是相當(dāng)于改變了data默認(rèn)的路徑或者格式。當(dāng)新系統(tǒng)使用不了原來的data就會(huì)崩潰或死機(jī),這就好像我們用暴風(fēng)影音播放器去打開Word文檔卡死是一個(gè)道理。
當(dāng)然,code和data的沖突屬于小概率事件,一般的系統(tǒng)更新不會(huì)導(dǎo)致它們間出現(xiàn)“隔閡”,但刷入第三方ROM或系統(tǒng)重大版本更新則會(huì)使沖突幾率大增。雙清的意義就是最大限度杜絕code和data沖突的出現(xiàn)。
擴(kuò)展閱讀
固件升級(jí)到底更新了什么
無論是系統(tǒng)更新包,還是完整的ROM(固件)包,它們都是以zip為后綴的壓縮文件。對(duì)正常使用的Android系統(tǒng)來說,它主要是由兩個(gè)分區(qū)組成:包含Android運(yùn)行框架、系統(tǒng)APP、第三方APP以及各種驅(qū)動(dòng)配置文件的“System分區(qū)”,以及由Kernel和Rootfs構(gòu)成的“Boot分區(qū)”,它們所對(duì)應(yīng)的鏡像分別稱為system.img和boot.img。在Recovery刷機(jī)前,我們通常會(huì)將system.img和boot.img打包壓縮成一個(gè)zip文件,也就是最開始提到的系統(tǒng)更新或完整ROM包。而Recovery刷機(jī)的過程,就是后臺(tái)將zip解壓并將框架、APP等更新內(nèi)容上傳到Android手機(jī)內(nèi)存對(duì)應(yīng)路徑的過程。
小結(jié)
刷機(jī)是Android手機(jī)的一大特色,它可讓A品牌手機(jī)體驗(yàn)到B、C……等品牌系統(tǒng)特有的功能和UI。不過,如果你對(duì)刷機(jī)情有獨(dú)鐘,那就請(qǐng)盡量挑選熱門機(jī)型,因?yàn)橹挥惺謾C(jī)口碑好銷量大,才有達(dá)人有興趣為其開發(fā)第三方ROM的適配包。而一些小眾手機(jī),連第三方Recovery和ROOT都搞不定。