龔強(qiáng)
摘 要:針對(duì)使用Android系統(tǒng)的智能電視進(jìn)行恢復(fù)出廠設(shè)置時(shí)重置速度慢的情況進(jìn)行了研究和分析,從其重置原理入手,通過(guò)簡(jiǎn)化備份、導(dǎo)入、執(zhí)行等設(shè)置方法以實(shí)現(xiàn)該系統(tǒng)的快速恢復(fù)出廠設(shè)置。實(shí)踐證明,該方法有效,供相關(guān)人員參考和借鑒。
關(guān)鍵詞:Android系統(tǒng);電子產(chǎn)品;出廠設(shè)置;USB
中圖分類號(hào):TN949.2 文獻(xiàn)標(biāo)識(shí)碼:A DOI:10.15913/j.cnki.kjycx.2017.08.113
隨著消費(fèi)類電子產(chǎn)品應(yīng)用的不斷發(fā)展,Android系統(tǒng)已成為電子產(chǎn)品是否能脫穎而出的重要決定因素,很多產(chǎn)品在追求即開(kāi)即用的效果。在這樣的行業(yè)需求下,針對(duì)Android系統(tǒng),設(shè)計(jì)并實(shí)現(xiàn)了一種基于該系統(tǒng)恢復(fù)出廠設(shè)置的快速重置方法,以提高基于該平臺(tái)的智能電視產(chǎn)品的開(kāi)機(jī)啟動(dòng)速度。
1 Android系統(tǒng)恢復(fù)出廠設(shè)置原理分析
1.1 Android系統(tǒng)的原生恢復(fù)出廠設(shè)置
如圖1所示,從Android系統(tǒng)接收到用戶恢復(fù)出廠設(shè)置請(qǐng)求后,過(guò)程包含執(zhí)行恢復(fù)出廠設(shè)置和重新啟動(dòng)系統(tǒng)各兩次,最后重新系統(tǒng)初始化后才進(jìn)入到待機(jī)模式。
恢復(fù)出廠設(shè)置步驟一和恢復(fù)出廠設(shè)置步驟二是整個(gè)恢復(fù)出廠設(shè)置過(guò)程的兩個(gè)關(guān)鍵步驟。
1.1.1 執(zhí)行恢復(fù)出廠設(shè)置步驟一
這是工廠應(yīng)用程序接收到恢復(fù)出廠設(shè)置請(qǐng)求后完成的第一個(gè)關(guān)鍵步驟,主要完成了以下3項(xiàng)內(nèi)容:①清除工廠頻道信息;②將系統(tǒng)語(yǔ)言設(shè)置為默認(rèn)的語(yǔ)言(比如英語(yǔ));③打開(kāi)開(kāi)機(jī)向?qū)Р藛巍?/p>
1.1.2 執(zhí)行恢復(fù)出廠設(shè)置步驟二
這是經(jīng)過(guò)第一次系統(tǒng)重啟后進(jìn)入到恢復(fù)(Recovery)模式下所要完成的主要步驟,在這里主要完成的動(dòng)作是清除用戶數(shù)據(jù),但清除用戶數(shù)據(jù)采用的方法是用格式化命令對(duì)用戶數(shù)據(jù)區(qū)進(jìn)行標(biāo)準(zhǔn)格式化。
1.2 Android系統(tǒng)快速恢復(fù)出廠設(shè)置
1.2.1 Android系統(tǒng)快速恢復(fù)出廠設(shè)置流程
在Android系統(tǒng)的快速恢復(fù)出廠設(shè)置流程中,當(dāng)系統(tǒng)接收到恢復(fù)出廠設(shè)置請(qǐng)求后,直接調(diào)用執(zhí)行恢復(fù)出廠設(shè)置的兩個(gè)步驟,最后發(fā)送Power事件使系統(tǒng)進(jìn)入待機(jī)狀態(tài),省去了兩次系統(tǒng)重新啟動(dòng)及初始化過(guò)程,同時(shí)對(duì)恢復(fù)出廠設(shè)置步驟二的實(shí)現(xiàn)方式進(jìn)行了優(yōu)化,從而大大縮短了恢復(fù)出廠設(shè)置的總體時(shí)間。
1.2.2 原生與快速模式的比較
在兩種模式下,恢復(fù)出廠設(shè)置步驟一所執(zhí)行的動(dòng)作完全相同,恢復(fù)出廠設(shè)置步驟二所完成的動(dòng)作也都是清除用戶數(shù)據(jù),但主要區(qū)別在于采用的方法不同——原生模式采用的方法是直接對(duì)用戶數(shù)據(jù)進(jìn)行格式化處理,快速模式采用的方法則是從備份區(qū)中將原始初始數(shù)據(jù)復(fù)制過(guò)來(lái)覆蓋當(dāng)前用戶數(shù)據(jù)。兩種方法都達(dá)到了恢復(fù)出廠設(shè)置的目的,但效率不同?;謴?fù)出廠設(shè)置步驟二的詳細(xì)比較如表1所示。
2 Android系統(tǒng)快速恢復(fù)出廠設(shè)置的實(shí)現(xiàn)
2.1 備份用戶初始數(shù)據(jù)
由于快速恢復(fù)出廠設(shè)置采用的方法是從備份區(qū)復(fù)制數(shù)據(jù)過(guò)來(lái)覆蓋當(dāng)前用戶數(shù)據(jù),因此,在編譯Android系統(tǒng)時(shí)需要額外保存一份完整的用戶數(shù)據(jù),它的內(nèi)容與當(dāng)前用戶區(qū)被變更前的初始數(shù)據(jù)完全相同,但永遠(yuǎn)不會(huì)再被更改,相當(dāng)于具有只讀屬性。具體實(shí)現(xiàn)方法是當(dāng)前電視首次上電正常開(kāi)機(jī)后,但還沒(méi)有進(jìn)行更改任何設(shè)置前,在串口命令模式下執(zhí)行以下指令:
「busyboxcp-Rdp/data/tvcustomer/」
將/data目錄下的所有數(shù)據(jù)完整復(fù)制到/tvcustomer目錄下備份,以便在快速模式下執(zhí)行恢復(fù)出廠設(shè)置步驟二時(shí)使用。
2.2 導(dǎo)出tvcustomer.img映像文件
接著上一個(gè)步驟,將一個(gè)存儲(chǔ)空間足夠大的U盤插入到電視上的USB接口,在電視端的串口中執(zhí)行如下指令導(dǎo)出tvcustomer.img映像文件:
「busyboxddif=/dev/block/mmcblk0pxx of=/mnt/usb/sda1/
tvcustomer.img」
其中,mmcblk0pxx是tvcustomer分區(qū)所對(duì)應(yīng)的設(shè)備,不同智能電視平臺(tái)會(huì)有所差異,可用「ls-l」查詢獲得;sda1代碼U盤掛載在USB接口1,如果不是USB接口1,則要進(jìn)行更改。
2.3 重新生成emmc.bin文件
emmc.bin文件是編譯Android系統(tǒng)最終編譯生成的用于燒錄eMMC Flash的二進(jìn)制文件。將上一步獲取的包含備份數(shù)據(jù)的tvcustomer.img復(fù)制到Android系統(tǒng)編譯環(huán)境下的相應(yīng)目錄下,重新編譯生成emmc.bin,這樣工廠批量燒錄的所有eMMC Flash都將包含了完整的備份數(shù)據(jù)。
2.4 執(zhí)行快速恢復(fù)出廠設(shè)置
2.4.1 注冊(cè)恢復(fù)出廠設(shè)置服務(wù)
由于在恢復(fù)出廠設(shè)置步驟二中涉及到從備份區(qū)復(fù)制數(shù)據(jù)覆蓋當(dāng)前用戶數(shù)據(jù),需要一定的權(quán)限及優(yōu)先級(jí)保證,因此,在系統(tǒng)初始化時(shí)注冊(cè)了一個(gè)系統(tǒng)服務(wù),具體方法是在init.rc文件定義以下factory_reset服務(wù):
service factory_reset/system/bin/factory_reset.sh
class main
user root
group root
disabled
oneshot
console
其中,服務(wù)名稱為factory_reset,服務(wù)的執(zhí)行腳本為factory_reset.sh,其他字段都是對(duì)本服務(wù)屬性進(jìn)行的一些可選描述,可查詢相關(guān)資料了解。
2.4.2 執(zhí)行快速恢復(fù)出廠設(shè)置過(guò)程
當(dāng)factory.apk接收到用戶的恢復(fù)出廠設(shè)置請(qǐng)求后,可以在處理代碼中執(zhí)行以下語(yǔ)句來(lái)啟動(dòng)factory_reset服務(wù):
private StringFactory_reset_Service="factory_reset";
…
SystemProperties.set("ctl.start",F(xiàn)actory_reset_Service);
通過(guò)設(shè)置系統(tǒng)屬性"ctl.start"將自動(dòng)啟動(dòng)系統(tǒng)服務(wù)factory_reset,從而進(jìn)一步觸發(fā)系統(tǒng)調(diào)用可執(zhí)行腳本factory_reset.sh,完成清除用戶數(shù)據(jù)動(dòng)作。
2.4.3 可執(zhí)行腳本factory_reset.sh分析
在這個(gè)可執(zhí)行腳本中,最主要需要完成以下2個(gè)任務(wù)。
從備份區(qū)還原數(shù)據(jù)到當(dāng)前用戶區(qū):
busybox cp-Rdp/tvcustomer/data/*/data/
發(fā)出一個(gè)Power事件,使系統(tǒng)進(jìn)入到待機(jī)模式:
input keyevent26
從KeyEvent.java的如下定義可知,26正是Power事件:
/**Key code constant:Power key.*/
public static final intKEYCODE_POWER=26;
至此,整個(gè)完整的快速恢復(fù)出廠設(shè)置過(guò)程已經(jīng)分析完畢。
3 總結(jié)
綜上所述,隨著Android智能系統(tǒng)的不斷深化應(yīng)用,目前,眾多的電視產(chǎn)品都有Android智能系統(tǒng)。因此,為了降低制造成本及提高生產(chǎn)效率,我們有必要縮短恢復(fù)出廠設(shè)置的時(shí)間。本文探討了從其重置原理入手,通過(guò)簡(jiǎn)化備份、導(dǎo)入、執(zhí)行等設(shè)置方法縮短恢復(fù)出廠設(shè)置的時(shí)間,并通過(guò)實(shí)踐認(rèn)為此方法具有推廣應(yīng)用的價(jià)值。
參考文獻(xiàn)
[1]崔偉東,貴靖.基于Android手機(jī)的數(shù)據(jù)恢復(fù)途徑的應(yīng)用[J].速讀旬刊,2015(11).
[2]付星,龍超.Android智能電視三屏互動(dòng)的設(shè)計(jì)與實(shí)現(xiàn)[J].中國(guó)高新技術(shù)企業(yè),2012(07).
〔編輯:張思楠〕