標籤:發送 注意 setup tle androi 一個 通知欄 二進位 情境
1.增量升級的原理
累加式更新的原理就是將本地apk與伺服器端最新版本比對,並得到差異包。比如現在的版本是1.1.4,大小是7.2M,新版本是1.1.5.大小是7.3M。我們發現兩個版本只有0.1M的差異,這樣我們如果採用增量升級產生0.1M左右的差異包,這樣使用者只需要下載0.1M的差異包進行升級而不需要重新下載7.3M的新版本了。
2.以往增量升級的實現
首先要有服務端來產生差異包,這一步使用bsdiff(二進位差分工具)來產生老版本和新版本的差異包,再提供給應用下載差異包。應用端則是封裝bspatch成so動態庫,通過jni調用動態庫將舊版本的apk和差異包合成新版本的apk。
3.以往增量升級的弊端
1. 服務端和用戶端都需要實現功能,時間周期長
2. 無法保證使用者每次的及時升級到最新,所以必須對發布的每一個版本都和最新的版本作成差異包,難以維護。
3. 用戶端下載服務端產生的差異包進行合成,可能會出現合成失敗問題,有可能是服務端產生的差異包不對,也有可能用戶端合成有問題,需要大量的測試和聯調。
4.友盟升級
4.1 匯入SDK所需jar包
下載最新版SDK的zip包,將其中的libs檔案夾合并到本地工程libs子目錄下。libs目錄下的libs/armeabi/libbspatch.so檔案是用於支援累加式更新功能的庫檔案,也需要在eclipse中添加。
4.2 添加資源檔
將SDK提供的res檔案夾拷入工程目錄下, 和工程本身res目錄合并。請不要隨便刪除其中的檔案
4.3 配置AndroidManifest.xml
4.3.1 添加SDK需要的許可權到標籤下:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission><uses-permission android:name="android.permission.INTERNET"></uses-permission>
4.3.2 接著添加APPKEY和渠道到標籤下: (如果已經整合了統計SDK等友盟其他服務,不需要重複添加APPKEY)
<meta-data android:value="YOUR APP KEY" android:name="UMENG_APPKEY"/><meta-data android:value="Channel ID" android:name="UMENG_CHANNEL"/>
UMENG_APPKEY:用來定位該應用的唯一性,用您該應用的UMENG APPKEY,替換value中的”YOUR APP KEY”。
UMENG_CHANNEL:用來標註應用推廣渠道,不同渠道可以上傳不同更新包,您可以使用20位以內的英文和數字為渠道定名,替換value中的”Channel ID”。如果不改動,將代表預設渠道,如果需要使用友盟自動更新多渠道更新,必須先整合友盟統計SDK。
4.3.3 添加Service和Activity到標籤下: (請注意:v2.4的SDK中,對話方塊改為Activity實現,com.umeng包名可能有變,如果不能下載,請檢查包名,替換成正確的包名)
<service android:name="com.umeng.update.net.DownloadingService" android:process=":DownloadingService" ></service><activity android:name="com.umeng.update.UpdateDialogActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar" ></activity>
4.3.4 調用更新介面
主要應用情境:最常見的自動更新模式,當使用者進入應用首頁後,如果處於wifi環境則檢測更新,如果有更新,彈出對話方塊提示有新版本,使用者點選更新開始下載更新。
在應用程式入口Activity裡的OnCreate() 方法中調用
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); UmengUpdateAgent.update(this);
目前預設在Wi-Fi接入情況下才進行自動提醒。如需要在任意網路環境下都進行更新自動提醒,則請在update調用之前添加以下代碼:UmengUpdateAgent.setUpdateOnlyWifi(false)。
4.4 上傳最新的APK
如果開發人員已經有了最新的APK版本,只要上傳到友盟網站,同時用戶端版本的版本號碼(VersionCode)小於上傳的最新版本,用戶端在啟動時就會有更新提示。
5.友盟更新情境
5.1 自動更新
最常見的自動更新模式,當使用者進入應用首頁後,如果處於wifi環境則自動檢測更新(預設只在wifi環境下檢測,是為了使用者流量考慮。這個行為可以更改),如果有更新,彈出對話方塊提示有新版本,使用者點選更新開始下載更新。
在應用程式入口Activity裡的OnCreate() 方法中調用
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); UmengUpdateAgent.update(this) //UmengUpdateAgent.update(this, "appkey", "channel");
5.2 手動更新
主要使用情境:許多應用的設定介面中都會有檢查更新等類似功能,需要使用者主動觸發而檢測更新。它的預設行為基本和自動更新基本一致。
它和自動更新的主要區別是:在這種手動更新的情況下,無論網路狀況是否Wifi,無論使用者是否忽略過該版本的更新,都可以像下面的樣本一樣在按鈕的回調中發起更新檢查,代替update(Context context):
public void onClick(View v) { UmengUpdateAgent.forceUpdate(mContext);}
5.3 靜默下載更新
主要使用情境:當使用者進入應用首頁後如果處於wifi環境檢測更新,如果有更新,後台下載新版本,如果下載成功,則進行通知欄展示,使用者點擊通知欄開始安裝。
靜默下載中途如果wifi斷開,則會停止下載。
在應用程式入口Activity裡的OnCreate() 方法中調用
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); UmengUpdateAgent.silentUpdate(this);
6.友盟增量升級
友盟累加式更新的原理是:應用整合友盟自動更新SDK之後,SDK會在應用啟動時將手機端的Version Code和應用APK檔案的MD5值發送到友盟的伺服器端。伺服器通過對MD5值尋找到老版本的APK, 同新老版本的APK做diff, 產生patch檔案,返回給SDK。 SDK再將patch檔案和手機上的老版本APK檔案合成產生新版本的APK。手機端產生的新版APK檔案的MD5值會和伺服器端的新版APK MD5值保持嚴格一致。在此過程中, 要求友盟伺服器必須存在新老兩個版本的APK檔案。
友盟預設是採用的累加式更新,如果想採用全量更新可以調用setDeltaUpdate(boolean deltaUpdate)設定,預設true,設為false則為全量更新
Android友盟累加式更新