Android友盟累加式更新

來源:互聯網
上載者:User

標籤:發送   注意   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友盟累加式更新

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.