一種基於Android平臺的應用升級方法及系統的製作方法
2023-08-06 03:59:01
專利名稱:一種基於Android平臺的應用升級方法及系統的製作方法
技術領域:
本發明屬於移動網際網路領域,主要涉及Android平臺下應用的APK差量包生成和升級方法及系統。
背景技術:
Android是一種以Linux為基礎的開放原始碼作業系統,主要使用於便攜設備。Android作業系統最初由Andy Rubin開發,最初主要支持手機。2005年由Google收購注資,並組建開放手機聯盟開發改良,逐漸擴展到平板電腦及其他領域上。2011年第一季度,Android在全球的市場份額首次超過塞班系統,躍居全球第一。2012年2月數據,Android佔據全球智慧型手機作業系統市場52. 5%的份額,中國市場佔有率為68. 4%。 隨著移動網際網路產業的井噴式發展,象會說話的湯姆貓、憤怒的小鳥、植物大戰殭屍以及水果忍者等好的移動智能終端應用不斷的湧現,深受智慧型手機用戶歡迎。這些好的應用不斷有新版本出現,用戶需要進行應用升級。在Android平臺的應用被打包為apk格式。APK是AndroidPackage的縮寫,即Android安裝包(apk)。通過將APK文件直接傳到Android模擬器或Android手機中執行即可安裝。APK文件其實是zip格式,但後綴名被修改為apk,通過UnZip解壓後,可以看到Dex文件、其他資源文件、籤名以及XML格式的程序全局配置文件AndroidManifest. xml。Android平臺下的應用以往的升級方式必須下載整個APK包,而新舊版本APK之間的差異不大,下載整個新版本APK包的方式產生了大量的無效流量。如果用戶下載的只是一個可以將舊版本軟體修改為新版本軟體的小的「差量包」,那麼這將減少網絡流量,加快下載速度。而其目前移動智能終端上網費用跟流量有密切關係的,因此APK差量升級方法有很好的應用前景。該方法的難點在於APK差量包生成。產生兩個序列的差異信息的算法稱之為「差異算法(Differencing Algorithm) 」。除了用於產生更新包,也有其他多方面應用。早期用於產生更新數據,更新信息只需包含前後兩份數據的差異信息,而無需傳送整份新數據。UNIX的算法diff用於尋找並產生文件的變化內容。還有文件的版本管理、系統備份及恢復等應用。此外,差異算法也可以找出兩個序列的公共子序列,並且當兩個序列越相似,算法找出的公共子序列長度越接近最長公共子序列(LCS)算法找出的最優長度。所以差異算法可作為相似序列的LCS近似算法,也能用於文本相似度檢測。早期的差異算法使用最長公共子序列(LCS)算法,Miller及Myers指出了 LCS算法用於尋找文件差異的缺陷。編輯距離是另一個用來衡量序列差異信息的尺度。編輯距離定義為一個序列變化為另一個序列所需的最少的編輯次數,相比LCS,編輯距離能更好刻畫出序列間的差異,從而也能得到更小的差異信息文件。Tichy提出塊移動(block move)的做法,對編輯距離算法進行改進,使得算法可以對字符成塊的進行操作,而不是每次只操作一個字符。這樣相比原編輯距離算法,該算法能更好的用於尋找序列間的差異。90年代初Christoph Reichenberger給出了時間複雜度為0(m n)的貪心算法。雖然算法相比Tichy的算法更適用於尋找序列間的差異,但時間複雜度仍然太過於高。後來Randal C. Bums和Darrell D. E. Long給出了性能較差,但時間複雜度為O (m+n)的線性算法。
發明內容
本發明提出一種基於Android平臺的應用升級方法,並實現了採用該應用升級方法的系統,該系統分為伺服器端差量包管理系統和Android應用升級客戶端。本發明改變了現有Android平臺下升級應用必須下載完整apk包的模式,大大節省了應用升級過程產生的流量,為用戶節約了流量費。本升級方法主要包括以下步驟1)在伺服器端,通過比較Android應用的不同版本的apk包之間差異,生成差量包;2)在伺服器端,對應用不同版本的之間的差量包進行管理、存儲和部署;3) Android應用升級客戶端,可以將系統所安裝應用的信息列表,與伺服器端的差量包信息進行匹配,如果有可用的升級,將提示用戶可以下載差量包進行升級;4)升級過程中,首先下載伺服器端的差量包,接著解壓手機中原有版本軟體的apk包和差量包,然後整合生成新版本軟體,並籤名打包生成新的apk包,隨後用戶可以安裝新的apk包,完成升級過程。本發明的重點在於APK升級差量包生成方法,在應用升級系統伺服器端包含了APK差量包生成模塊,該模塊先將新舊版本APK包分別解壓,接著對解壓後的新舊版本文件夾進行比較,找出新增文件、刪除的文件以及有修改的文件,然後比較修改的文件之間的二進位差異,生成差異文件。在伺服器端比較Android應用的不同版本的apk包之間差異,生成差量包,其主要流程如下
①先將apk包分別解壓;
②對解壓後的新舊版本文件夾進行比較,找出新增文件、刪除的文件以及有修改的文
件;
③比較修改的文件之間的二進位差異,生成差異文件;
④將新舊版本之間的差異信息(包括新版本相對舊版本需新增的文件、刪除的文件以及有修改的文件等信息)寫入xml格式文檔;
⑤將新增文件、有修改文件的差異文件以及差異信息xml文檔打包成apk包。APK升級差量包生成方法的主要難點在於伺服器端差量包生成方法中的步驟③,如何高效地比較修改的文件之間的二進位差異,生成差異文件。本發明提出尋找序列的變化內容的算法。尋找兩個序列X、Y的差異內容,產生Y相對X的差異信息Z,使得X能夠根據Z變化為Y。如果X、Y是同一種文件的不同版本,Z往往比Y小得多,這樣存儲或傳送Z將比直接存儲或傳送Y更節約資源。本發明提出一種基於序列結構因素的啟發式算法,對兩個序列進行劃分,再進行相同內容的匹配。算法時間複雜度為0((n + m) log (min(n,m))),空間複雜度為0(n+m),其中n、m分別為X、Y的長度。在實際應用中該算法的執行速度是接近線性的,相比已有的算法,該算法更符合實際應用需求。由於算法主要是解決相似序列的相關問題,算法設計針對相似序列提出。如
圖1,設S2為SI修改而來的序列。Ml與為兩個序列相同的內容,如果|#2|很大,SI中在其他地方出現於一樣內容的子串的概率將非常小。於是可以認為由分修改為泣時,#7未經修改而對應於,那麼可以推出S是由J修改而來4由C修改而來,這樣通過#2,#之可以將序列進行劃分。如圖2,在分,泣中搜索#7,麗 。分,泣下標從0開始,長度分別為nl、n2。Pl為分的前Ien個字符'P2為泣前Ien個字符。設兩個指針i,j,分別為Pl、P2第一個字符的下標,開始時有i 二 J' = O。PU P2的關係有以下4種情況 il)P2未經修改,與W —樣;
⑵P2為S2中新增的內容
(3)W在泣中被刪除了 (A、P1、P2同時符合情況(2)、(3)
以W為模式串在泣中搜索匹配,設在處獲得匹配,如圖3。若找不到匹配則令off2 =⑴。同樣,以沒為模式串在分中搜索匹配,可得o//7。如果有of/7 = off2 = 0,則W、沒屬於情況(I) -Moffl = off2 =⑴,則屬於情況(4);然而,當0〈 offl,off2 <⑴時,判斷其屬於後三種情況的哪一種卻是困難的。採用貪心策略來做判斷。苯offl/nl <認為是情況(2),否則認為是情況(3)。為了處理/^,沒屬於情況(4)而0 toffl, off2< ^的情況,在泣{SI、中搜索產2 {P2)時根據7m長度適當減小搜索長度,即並不一定在整個泣(分)中搜索W (Z^)0除非o//7 二 off2 = 否則都可以找到一對匹配,即#2,麗 。當o//7 二 off2 二①時,將指針i,J分別右移一段距離,繼續以上過程。以上已經討論,\M1 I必須很大,劃分是正確的概率才大。但7m設置大了,很多匹配的小片段就無法搜索出來,從而使找出來的不同的序列內容比實際多很多。算法採用多次搜索的方法來解決這個問題。首先,設置仏/7的值比較大,先搜索出相同的大片段,對分,泣進行劃分。再將7m逐漸變小,找出相同小片段。設弘忍的長度分別為/ 7,/^,設置參數skipCoe ,Aoffl = off2 =⑵時,將PU P2 的起始指針 i,J 分別右移二 nl*skipCoe,skipLen2 = n2*skopCoe 個單位。設置函,根據i (J')右移的長度返回搜索模式串時最大搜索長度searcAZefli {searchLen2)。searchLen為skipLen的單調遞增函數。只在泣
中搜索模式串Pl,如果泣
中沒有與Pl匹配的串,認為Pl在S2中沒有匹配。若searchLen2 ^ n2,則在整個S2中搜索Pl。開始時,先搜索大片相同的內容,將分,泣劃分,再逐漸尋找小段相同的子串。所以開始時7m值設得較大,需要在較大範圍內搜索匹配,seardZm需要設置得較大。算法中,模式串的長度Ien是searchLen的一個單調遞增的函數。算法中searchLen為skipLen的函數,可以採用一個簡單的倍數關係,即searchLen= a ^skipLen。當很大時,很小,就很大了 ;當很小時,Ct則需要比較大,搜索距離才不會太短。以下為定義的函數
權利要求
1.一種Android平臺的應用軟體升級方法,其特徵在於 Android平臺的應用升級方法,依次有以下步驟 1)在伺服器端,通過比較Android應用的不同版本的apk包之間差異,生成差量包; 2)在伺服器端,對應用不同版本的之間的差量包進行管理、存儲和部署; 3)Android應用升級客戶端,可以將系統所安裝應用的信息列表,與伺服器端的差量包信息進行匹配,如果有可用的升級,將提示用戶可以下載差量包進行升級; 4)升級過程中,首先下載伺服器端的差量包,接著解壓手機中原有版本軟體的apk包和差量包,然後整合生成新版本軟體,並籤名打包生成新的apk包,隨後用戶可以安裝新的apk 包。
2.根據權利要求I所述的一種Android平臺的應用軟體升級方法,其特徵在於 所述步驟I)的APK升級差量包生成方法,依次有以下步驟 ①先將apk包分別解壓; ②對解壓後的新舊版本文件夾進行比較,找出新增文件、刪除的文件以及有修改的文件; ③比較修改的文件之間的二進位差異,生成差異文件; ④將新舊版本之間的差異信息(包括新版本相對舊版本需新增的文件、刪除的文件以及有修改的文件等信息)寫入xml格式文檔; ⑤將新增文件、有修改文件的差異文件以及差異信息xml文檔打包成apk包。
3.根據權利要求2所述的一種Android平臺的應用軟體升級方法,其特徵在於 所述步驟③中的比較修改的文件之間的二進位差異,生成差異文件的基於序列結構因素的啟發式算法,通過對兩個序列X、Y進行劃分,再進行相同內容的匹配,尋找兩個序列的差異內容,產生Y相對X的差異信息Z,使得X能夠根據Z變化為Y(算法時間複雜度為0 ((n+ m) log (min (n, m))),空間複雜度為0 (n+m),其中n、m分別為X、Y的長度)。
4.實現Android平臺的應用軟體升級方法的系統,其特徵在於 伺服器端主要包括兩個模塊,即差量包生成模塊和差量包管理模塊; 差量包生成模塊即採用如權利要求2所述的APK升級差量包生成方法和如權利要求3所述的基於序列結構因素的啟發式算法來為各種應用的不同版本之間生成差量包; 差量包管理模塊主要功能是管理各種應用的不同版本APK包、調用差量包生成模塊來生成不同版本的差量包,並管理和存儲這些差量包,同時為應用升級客戶端提供了查詢、下載差量包的服務。
5.根據權利要求4所述的實現Android平臺的應用軟體升級方法的系統,其特徵在於 Android應用升級客戶端(需安裝到基於Android平臺的移動智能終端)主要功能是通過調用應用升級系統伺服器端查詢升級服務,列出有可用更新的應用,並提示手機用戶可以下載差量包進行升級;當用戶選擇特定應用升級後,首先下載伺服器端的差量包,接著解壓手機中原有版本軟體的apk包和差量包,然後整合生成新版本軟體,並籤名打包生成新的apk包,隨後用戶可以安裝新的apk包,完成升級過程。
全文摘要
本發明提出一種基於Android平臺的應用升級方法,並實現了採用該方法的系統。應用升級方法包括以下步驟1)伺服器端通過比較應用的不同版本apk包之間差異,生成差量包;2)在伺服器端對應用不同版本之間的差量包進行管理、存儲和部署;3)應用升級客戶端將所安裝應用的信息列表,與伺服器端差量包信息進行匹配,如有可用的升級,將可以下載差量包進行升級;4)升級過程中,先下載差量包,接著解壓原有版本軟體的apk包和差量包,然後整合、籤名並打包生成新apk包,隨後安裝,完成升級過程。本發明改變了現有Android平臺下升級應用必須下載完整apk包的模式,大大節省了應用升級過程產生的流量,為用戶節約了流量費。
文檔編號H04L29/08GK102799445SQ20121013324
公開日2012年11月28日 申請日期2012年5月3日 優先權日2012年5月3日
發明者陳昊, 張曉敏, 明仲 申請人:陳昊