Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 增量升級學習使用記錄

Android 增量升級學習使用記錄

編輯:關於Android編程

好久沒有發博客了,現在工作忙了,底層代碼跟蹤學習的東西很久沒有做成文檔了,雖然博客寫的爛,但是再寫的過程中,能更清晰的認識到自己那個地方還不清晰,不明白。這樣能更好的嘴一個反饋和記錄。所以,還是要繼續努力……
Android增量升級,一個比較好玩的內容,幾年前做項目的時候做過預研,但是沒有真正應用到項目中去。所以僅僅測試了一下,但是那時候感覺增量升級好像不怎麼靠譜,就沒有繼續深入。這一次由於系統要求android必須要有增量升級,所以又撿起來學習一下。當然核心的庫用的是第三方,我們也只是在拾人牙慧,將其應用到自己系統中而已。所有參考資料見最後。
1. 增量升級原理
增量升級的原理比較簡單,主要是比較兩個不同版本的二進制文件,然後生成兩個版本的差分包,再將差分包與低版本合成即可生成高版本的安裝apk文件。具體實現細節如下下節。
2. 增量升級實現
增量升級按照原理所述,要先生成差分包,在合成差分包。一般生成差分包是在後台服務器生成,合成差分包是在android機器本地合成。差分包主要指的是新版本(V1)與android機器上已經安裝的老版本(V0)之間的差分,為了方便測試,我們模擬服務器端(server)生成差分包(V1-V0=P),然後在本地端(local)合成包(V1)。當然在差分,合成的時候還有一些細節,比如MD5驗證等。具體的流程如下圖所示:
這裡寫圖片描述

如上圖所示,其中填充淡黃色的是server端的流程,主要是生成差分包和MD5值,剩下的是android手機local端流程,該流程是一個比較完成的升級流程。我們在做測試的時候不用這麼多流程,只要完成差分包、合成包、MD5校驗、成功安裝即可。下面將按照功能分成兩個部分來做測試,一部分是模擬server端,一部分是android手機local端。
2.1 Server端實現
(1) 生成差分so包
主要的C部分代碼來自參考地址1,這裡只是自己生成頭文件和頭文件的實現文件,頭文件實現文件也參考地址1中的代碼。這裡僅僅改了包名。
首先創建工程,添加java類DiffUtils,工程與代碼如下:
這裡寫圖片描述

這裡寫圖片描述

然後,用javah命令生成頭文件,當然可以自己配置eclipse一鍵生成,javah命令如下:
javah -jni -encoding utf-8 com.woniu.difflibrary.DiffUtils
執行命令以後如果沒錯無,刷新工程可以發現多了一個頭文件,在工程目錄下建立jni文件夾,將頭文件拷貝到jni下面,然後將參考地址1中的實現代碼考進來,注意,將參考代碼中的h頭文件換成自己剛剛生成的。
這裡寫圖片描述

現在,將差分包需要的第三方c代碼都拷貝到jni目錄下,整個工程目錄如下:
這裡寫圖片描述

第三步,就是編寫mk文件並利用ndk生成so包,mk文件包括上圖所示的Android.mk還有Application.mk。
Application的mk文件主要是配置生成so包的環境。我們要生成arm和x86的,所以配置如下:另外兩個參數表示當前適配版本以及使用的是STLport靜態連接庫,配置項參數意義以及其他參數值可自行百度google。
這裡寫圖片描述vc+88rWlo6y+zcrHvavKtc/WzsS8/rzTvfjAtFdvbml1QVBLRGlmZkxpYnJhcnm+zcrHyfqzybXEc2+w/LXEw/uzxqO6bGliV29uaXVBUEtEaWZmTGlicmFyeS5zbzxiciAvPg0KPGltZyBhbHQ9"這裡寫圖片描述" src="/uploadfile/Collfiles/20160916/201609160941111533.bmp" title="\" />

最後,到android.mk的目錄下執行nkd-build命令,ndk的配置可以搜一下,比較簡單。執行結束,如果沒有錯誤就可生成兩個libWoniuAPKDiffLibrary.so文件,分別是arm和x86平台下的。如下入的兩個so包。如果使用so包現將其拷貝到jni下面分別放到armeabi和x86下。

這裡寫圖片描述

(2) 生成差分包
上面已經生成差分工具so包,下面就是將其加入到模擬server的工程中,模擬生成差分包。
首先,創建工程,將so包以及生成h文件的java工具類也拷貝到工程中,工程目錄如下,其中so包,DiffUtils.java是上一個步驟創建生成的。

然後,自己可以隨便寫個小的android應用程序,並生成V0.apk,然後做一個簡單的界面修改,再生成V1.apk,用這兩個apk模擬差分包生成。拷貝到android手機的sdcard中。
最後,運行上述的工程,並點擊start,如果沒有出錯將會在sdcard中生成一個V0_to_V01.patch的差分包文件。該文件大小只有原包大小的三分之一。也就是增量升級中需要的差分包。
(3) Server端小結
實際上server端的主要功能已經完成了,就是生成一個差分包。實際使用中,server端還要負責生成V1版本的MD5文件,如流程圖中所示。而在我們測試中,可以將V1的MD5文件生成好並保存下來。便於合成差分包以後校驗。
2.2 Local端實現
實際上,Local端的操作步驟已經與Server端比較類似,也是先生成so包,然後將so包以及相關文件拷貝的合成工程的實現代碼中,並用V0和Server端生成的V0_to_V1.patch差分包合成一個V1’,然後V1’與原來的V1本尊的MD5值進行校驗,如果校驗通過,就表示合成成功,否則合成失敗。成功了就直接安裝,替換老版本的V0,失敗以後,在正式環境中就要重新下載V1代碼。下面簡單看下具體流程:
(1) 生成合成so包
So包的生成方法與查分so包生成的步驟一樣,需要先創建一個工程,然後生成h頭文件和實現文件。具體操作按照上述執行即可。其中工程內容如下:
這裡寫圖片描述

(2) 生成合成包
建立本地測試代碼,注意實際使用中一般是對自己本身生成差分包,這裡為了方便測試,用local程序測試其他應用。所以實際使用的時候安裝完以後需要將自身的apk拷貝到一個目錄下做備份,好為後續的增量升級做准備。這裡就用V0代替了。V0放到sdcard下面,V0_to_V1.patch也在該目錄下。Local測試程序只要將測試V0與差分包合成就行。
工程目錄如下:
這裡寫圖片描述

其中包括一些MD5值獲取校驗等工具類。MainActivity中,用一個Task去執行合成代碼,合成以後會進行MD5值校驗,所以測試之前可以先將MD5值做好,放到代碼中寫死。因為這個再實際使用中是由後台做好,然後通過接口獲取得來的。
(3) Local端小結
這裡就是是調用so包進行合成二進制文件,合成以後與原來的apk包的MD5做對比校驗。校驗以後可以安裝。實際使用中要把自身的apk先拷貝到增量升級路徑下,然後與下載下來的patch文件進行合並,然後在做校驗安裝。這樣就完成了本地的操作了。
3. 增量升級總結
增量升級,主要核心的東西,是那些C寫的代碼,我們要做的就是調用別人寫好的東西,然後將流程優化,並正式用於生產環境。上述用到的代碼,實際上在參考地制止都有。我只是根據修妖做了修改。具體代碼如下:

學習參考地址
https://github.com/cundong/SmartAppUpdates
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved