本發(fā)明涉及一種android智能終端系統(tǒng)軟件熱修復(fù)的方法,屬于安卓系統(tǒng)技術(shù)領(lǐng)域。
背景技術(shù):
當(dāng)android智能終端設(shè)備(手機(jī)、平板、電視等)的系統(tǒng)版本在發(fā)布之后,往往有個(gè)別系統(tǒng)軟件會(huì)在使用中出現(xiàn)問題,此時(shí)需要立即對(duì)該系統(tǒng)軟件進(jìn)行修復(fù),一般做法即將修復(fù)后的安卓應(yīng)用整體打包成安卓安裝包,并生成ota(over-the-airtechnology,空中下載技術(shù))版本。系統(tǒng)開發(fā)測(cè)試部門則隨后對(duì)ota版本進(jìn)行測(cè)試,在測(cè)試通過后向用戶推送ota升級(jí)包,用戶下載ota升級(jí)包后手動(dòng)完成安裝更新。對(duì)系統(tǒng)軟件問題的解決,某些情況下僅是修改若干代碼,但仍需按上述過程生成ota版本,繼而對(duì)終端系統(tǒng)進(jìn)行更新,實(shí)際上ota版本絕大部分內(nèi)容保持不變,這導(dǎo)致了不必要的系統(tǒng)開銷和時(shí)間浪費(fèi),大大降低了用戶使用體驗(yàn)。
中國(guó)專利文獻(xiàn)cn106095502a公開了一種安卓應(yīng)用的熱修復(fù)方法。該方法包括:獲取指定安卓應(yīng)用的補(bǔ)丁包,補(bǔ)丁包中包括指定安卓應(yīng)用中的修復(fù)后的指定類文件;當(dāng)指定安卓應(yīng)用啟動(dòng)時(shí),加載該補(bǔ)丁包;當(dāng)指定安卓應(yīng)用需要調(diào)用指定的類文件時(shí),從該補(bǔ)丁包中調(diào)用修復(fù)后的指定類文件以執(zhí)行相應(yīng)功能。但該方法存在以下缺陷:對(duì)于智能終端及系統(tǒng)提供者來講,它無法對(duì)不同型號(hào)及不同區(qū)域終端設(shè)備的某個(gè)系統(tǒng)軟件進(jìn)行控制,比如對(duì)于某個(gè)系統(tǒng)軟件來講,大陸地區(qū)和港澳臺(tái)地區(qū)是不同的;而終端設(shè)備型號(hào)不同,系統(tǒng)軟件也會(huì)不同。
技術(shù)實(shí)現(xiàn)要素:
為克服上述背景技術(shù)所存在的缺陷和不足,本發(fā)明提出了一種android智能終端系統(tǒng)軟件熱修復(fù)的方法。當(dāng)智能終端中系統(tǒng)軟件出現(xiàn)問題時(shí),軟件工程師針對(duì)問題修改完畢后,僅生成該軟件的補(bǔ)丁包,并將補(bǔ)丁包根據(jù)匹配信息匹配在服務(wù)器端。當(dāng)用戶打開該系統(tǒng)軟件后,其將從服務(wù)器端把補(bǔ)丁包下載到終端,并判斷補(bǔ)丁包中的匹配信息和終端的具體設(shè)備信息是否相同,若相同,系統(tǒng)軟件在下次用戶打開應(yīng)用時(shí)動(dòng)態(tài)加載,從而完成對(duì)軟件的修復(fù)。
本發(fā)明的技術(shù)方案如下:
一種android智能終端系統(tǒng)軟件熱修復(fù)的方法,依次通過四個(gè)模塊來完成,該四個(gè)模塊包括patch文件獲取模塊、patch文件匹配模塊、終端下載模塊和動(dòng)態(tài)加載模塊,該方法具體步驟如下:
1)patch文件獲取模塊:
該模塊輸入端是兩個(gè)apk,包括原apk和更新后的apk,原apk即是需要修復(fù)的原版本系統(tǒng)軟件,更新后的apk即是已修復(fù)完成的系統(tǒng)軟件,一般已修復(fù)完成的系統(tǒng)軟件版本號(hào)比原系統(tǒng)軟件版本號(hào)高1,apk文件實(shí)際可看成一個(gè)zip文件,其包括res資源文件和class.dex文件,通過差分比較可以將有差別的文件部分保存到一個(gè)hashset集合變量中,然后通過編譯打包生成patch文件,具體步驟為:
①將原apk和更新后的apk進(jìn)行差分算法比較,將有差別的文件部分保存到一個(gè)集合變量中;
②通過編譯并打包可生成patch文件;
2)patch文件匹配模塊:
在服務(wù)器端將patch文件進(jìn)行匹配,匹配信息包括終端型號(hào)、終端系統(tǒng)版本號(hào)、終端網(wǎng)絡(luò)區(qū)域、android版本及內(nèi)核版本,匹配結(jié)果用flag表示,flag初始值為false,匹配成功后修改flag標(biāo)識(shí)為true,服務(wù)器端將匹配信息注入到patch文件中,然后進(jìn)行patch文件的下發(fā),具體步驟為:
①獲取patch文件所含系統(tǒng)應(yīng)用的信息,包括應(yīng)用名稱、應(yīng)用包名、應(yīng)用簽名;
②服務(wù)器端根據(jù)匹配信息進(jìn)行patch文件下發(fā)前的匹配,包括終端型號(hào)、終端系統(tǒng)版本號(hào)、終端網(wǎng)絡(luò)區(qū)域、android版本、內(nèi)核版本匹配屬性;
③匹配結(jié)果用flag表示,flag初始值為false,匹配成功后修改flag標(biāo)識(shí)為true;
④服務(wù)器端將匹配信息注入到patch文件中,然后進(jìn)行patch文件的下發(fā),將patch文件推送至智能終端;
3)終端下載模塊:
當(dāng)用戶打開該系統(tǒng)應(yīng)用時(shí),首先判斷終端當(dāng)前連接的網(wǎng)絡(luò)是否為本地網(wǎng)絡(luò),如果否,則自動(dòng)配置本地網(wǎng)絡(luò),如果是,則不用配置本地網(wǎng)絡(luò);隨后再判斷此時(shí)終端處理器是否處于空閑時(shí)段,當(dāng)終端處理器處于空閑時(shí)段時(shí),終端從服務(wù)器獲取匹配標(biāo)識(shí)flag的值和patch文件,并在后臺(tái)自動(dòng)下載,具體步驟為:
①判斷當(dāng)前終端連接的網(wǎng)絡(luò)是否為本地預(yù)設(shè)網(wǎng)絡(luò),如果是,則直接轉(zhuǎn)入步驟②;如果否,則自動(dòng)配置本地預(yù)設(shè)網(wǎng)絡(luò),然后轉(zhuǎn)入步驟②;
②判斷處理器此時(shí)是否處于忙時(shí)閾值之下,如果是,則轉(zhuǎn)入步驟③;如果否,則轉(zhuǎn)入步驟②,此時(shí)說明處理器正進(jìn)行多任務(wù)執(zhí)行,不適宜再為處理器增加任務(wù),這樣可避免處理器崩潰;
③智能終端從服務(wù)器獲取flag的值和patch文件,并在后臺(tái)自動(dòng)下載;
4)動(dòng)態(tài)加載模塊:
patch文件下載后,首先終端獲取patch文件中的匹配信息,將匹配信息和終端的具體設(shè)備信息進(jìn)行校驗(yàn),判斷patch文件中的匹配信息和終端的具體設(shè)備信息是否相同,如果前后信息相同則校驗(yàn)成功,若不同則說明此終端不在修復(fù)范圍之內(nèi),則將patch文件刪除;校驗(yàn)成功后,待用戶第二次啟動(dòng)該系統(tǒng)應(yīng)用時(shí),或該系統(tǒng)應(yīng)用通過廣播或服務(wù)被喚醒重新加載時(shí),系統(tǒng)會(huì)先加載patch文件中的class文件,而不再加載原apk中的class文件,完成軟件修復(fù),具體步驟為:
①終端獲取patch文件中的匹配信息和終端的具體設(shè)備信息;
②將步驟①中的匹配信息和具體設(shè)備信息進(jìn)行對(duì)比,校驗(yàn)二者是否相同,若相同,則轉(zhuǎn)到步驟③;若不同,則刪掉該patch文件,流程結(jié)束;
③待用戶重啟該系統(tǒng)軟件或者該系統(tǒng)軟件被broadcast(廣播)或者service(服務(wù))所喚醒重新加載,系統(tǒng)會(huì)加載patch文件中的class文件而不去加載原apk中的class文件,軟件完成修復(fù),流程結(jié)束。
所述的apk是androidpackage的縮寫,即android安裝包(apk)。
所述的patch多指補(bǔ)丁的意思比如文件補(bǔ)丁、內(nèi)存補(bǔ)丁等,是電腦命令程序的一種。
所述的zip文件是用zip計(jì)算機(jī)壓縮算法進(jìn)行壓縮而產(chǎn)生的壓縮文件。
所述的class文件是一種二進(jìn)制流文件,它由java源文件編譯后所產(chǎn)生。
本發(fā)明方法的有益效果為:
1,本發(fā)明無需通過生成ota,即可實(shí)現(xiàn)對(duì)不同型號(hào)終端設(shè)備系統(tǒng)軟件對(duì)應(yīng)的修復(fù),節(jié)約了大量成本;
2,本發(fā)明免除了ota系統(tǒng)版本的下載與安裝,在用戶無感知情況下靜默完成修復(fù),在解決問題的同時(shí)又不影響用戶使用體驗(yàn)。
附圖說明
圖1為本發(fā)明方法的實(shí)施例中的總流程圖。
圖2為本發(fā)明方法的實(shí)施例中patch文件獲取模塊示意圖。
圖3為本發(fā)明方法的實(shí)施例中patch文件匹配模塊流程圖。
圖4為本發(fā)明方法的實(shí)施例中終端下載模塊流程圖。
圖5為本發(fā)明方法的實(shí)施例中動(dòng)態(tài)加載模塊流程圖。
具體實(shí)施方式
下面結(jié)合說明書附圖和實(shí)施例對(duì)本發(fā)明作進(jìn)一步說明,但不限于此。
實(shí)施例:
一種android智能終端系統(tǒng)軟件熱修復(fù)的方法,如圖1-5所示,依次通過四個(gè)模塊來完成,該四個(gè)模塊包括patch文件獲取模塊、patch文件匹配模塊、終端下載模塊和動(dòng)態(tài)加載模塊,該方法具體步驟如下:
1)patch文件獲取模塊:
該模塊輸入端是兩個(gè)apk,包括原apk和更新后的apk,原apk即是需要修復(fù)的原版本系統(tǒng)軟件,更新后的apk即是已修復(fù)完成的系統(tǒng)軟件,一般已修復(fù)完成的系統(tǒng)軟件版本號(hào)比原系統(tǒng)軟件版本號(hào)高1,apk文件實(shí)際可看成一個(gè)zip文件,其包括res資源文件和class.dex文件,通過差分比較可以將有差別的文件部分保存到一個(gè)hashset集合變量中,然后通過編譯打包生成patch文件,具體步驟為:
①將原apk和更新后的apk進(jìn)行差分算法比較,將有差別的文件部分保存到一個(gè)集合變量中;
②通過編譯并打包可生成patch文件;
2)patch文件匹配模塊:
在服務(wù)器端將patch文件進(jìn)行匹配,匹配信息包括終端型號(hào)、終端系統(tǒng)版本號(hào)、終端網(wǎng)絡(luò)區(qū)域,比如終端型號(hào)為h60-l02,終端系統(tǒng)版本號(hào)為h60-l02v100r001chnc00b317,終端區(qū)域?yàn)樯綎|濟(jì)南;意思是終端型號(hào)為h60-l02且終端系統(tǒng)版本號(hào)為h60-l02v100r001chnc00b317且終端網(wǎng)絡(luò)區(qū)域?yàn)樯綎|濟(jì)南的終端才能收到此patch文件。匹配信息不僅包括上述匹配屬性還包括android版本、內(nèi)核版本匹配屬性,匹配結(jié)果用flag表示,flag初始值為false,匹配成功后修改flag標(biāo)識(shí)為true,服務(wù)器端將匹配信息注入到patch文件中,然后進(jìn)行patch文件的下發(fā),具體步驟為:
①獲取patch所含系統(tǒng)應(yīng)用的信息,包括應(yīng)用名稱、應(yīng)用包名、應(yīng)用簽名;
②服務(wù)器端根據(jù)匹配信息進(jìn)行patch文件下發(fā)前的匹配,包括終端型號(hào)、終端系統(tǒng)版本號(hào)、終端網(wǎng)絡(luò)區(qū)域、android版本、內(nèi)核版本匹配屬性;
③匹配結(jié)果用flag表示,flag初始值為false,匹配成功后修改flag標(biāo)識(shí)為true;
④服務(wù)器端將匹配信息注入到patch文件中,然后進(jìn)行patch文件的下發(fā),將patch文件推送至智能終端;
3)終端下載模塊:
當(dāng)用戶打開該系統(tǒng)應(yīng)用時(shí),首先判斷終端當(dāng)前連接的網(wǎng)絡(luò)是否為本地網(wǎng)絡(luò),如果否,則自動(dòng)配置本地網(wǎng)絡(luò),若是,則不用配置本地網(wǎng)絡(luò);隨后再判斷此時(shí)終端處理器是否處于空閑時(shí)段,當(dāng)終端處理器處于空閑時(shí)段時(shí),終端從服務(wù)器獲取匹配標(biāo)識(shí)flag的值和patch文件,并在后臺(tái)自動(dòng)下載,具體步驟為:
①判斷當(dāng)前終端連接的網(wǎng)絡(luò)是否為本地預(yù)設(shè)網(wǎng)絡(luò),如果是,則直接轉(zhuǎn)入步驟②;如果否,則自動(dòng)配置本地預(yù)設(shè)網(wǎng)絡(luò),然后轉(zhuǎn)入步驟②;
②判斷處理器此時(shí)是否處于忙時(shí)閾值之下,如果是,則轉(zhuǎn)入步驟③;如果否,則轉(zhuǎn)入步驟②,此時(shí)說明處理器正進(jìn)行多任務(wù)執(zhí)行,不適宜再為處理器增加任務(wù),這樣可避免處理器崩潰;
③智能終端從服務(wù)器獲取flag的值和patch文件,并在后臺(tái)自動(dòng)下載;
4)動(dòng)態(tài)加載模塊:
patch文件下載后,首先終端獲取patch文件中的匹配信息,將匹配信息和終端的具體實(shí)際信息進(jìn)行校驗(yàn),判斷patch文件中的匹配信息和終端的具體實(shí)際設(shè)備信息是否相同,比如獲取的patch文件中的匹配信息是上述patch匹配模塊中的匹配信息,那么需要將終端的具體設(shè)備信息和此匹配信息進(jìn)行比較:此終端型號(hào)是否為h60-l02,終端系統(tǒng)版本號(hào)是否為h60-l02v100r001chnc00b317,終端區(qū)域是否為山東濟(jì)南,但不僅局限于此匹配屬性。如果前后信息都相同則校驗(yàn)成功,若不相同則說明此終端不在修復(fù)范圍之內(nèi),則將patch文件刪除;校驗(yàn)成功后,待用戶第二次啟動(dòng)該系統(tǒng)應(yīng)用時(shí),或者該系統(tǒng)應(yīng)用通過broadcast(廣播)、service(服務(wù))被喚醒重新加載時(shí),系統(tǒng)就會(huì)先加載patch文件中的class文件,而不再加載原apk中的class文件,完成軟件修復(fù),具體步驟為:
①終端獲取patch文件中的匹配信息和終端的具體設(shè)備信息;
②將步驟①中的匹配信息和具體設(shè)備信息進(jìn)行對(duì)比,校驗(yàn)二者是否相同,若相同,則轉(zhuǎn)到步驟③;若不同,則刪掉該patch文件,流程結(jié)束;
③待用戶重啟該系統(tǒng)軟件或者該系統(tǒng)軟件被broadcast(廣播)或者service(服務(wù))所喚醒重新加載,系統(tǒng)會(huì)加載patch文件中的class文件而不去加載原apk中的class文件,完成軟件修復(fù),流程結(jié)束。