Android app版本升級的問題
阿新 • • 發佈:2019-01-02
方式一:APP自身提示有更新,使用者點選升級就在後面下載更新包
詳細的請跳轉:
以下是我的理解。
效果圖:
第一步:存放資源的後臺,存放一個包含最新版本資訊的update.txt檔案和一個.apk檔案就夠了!
第二步:獲取到最新的版本號,然後與當前APP的版本號進行對比。如果低於最新版本,就開執行緒到下載地址中去下載。
從伺服器中獲得update.txt資訊並解析出來變成一個物件的具體做法就不細說,這裡假設已經獲得了一個物件UpDateInfo的資訊。
public class UpdateInfo { private String versionName; private intversionCode; private String description;//描述 private String url;//apk下載地址 }
文章頭部的連結的作者通過判斷兩個版本的versionName是否相等來判斷,不相等表示有新版本,一開始我覺得很不合理,到處查詢也沒有找到合理的,所以自己想了下面的辦法,先去判斷versionCode,再去把versionName去掉“.”,然後轉換為int型比較,現在覺得好麻煩,同時也可能出現其他問題,細細想來,通過對比是否相等應該是可以實現的,因為你請求伺服器的地址是唯一的,伺服器上的升級一般都會讓你上傳升級後的安裝包,然後覆蓋掉版本低的那個apk,所以伺服器上存在的要不就是和你正用的app的versionName相等的,不相等的就是版本更高的,我在360應用寶上上傳過應用,如果升級就會覆蓋掉之前的版本,不過,360裡面也有一個降級處理,所以如果用相等去判斷,也就順發布者的意,想升級也可以,想降級也可以,
/** * 與當前版本好對比,是否需要升級 * @return */ private boolean isNeedUpdate(UpdateInfo info) { String versionName = info.getVersionName; // 最新版本的版本號 int versionCode=info.getVersionCode; int currentVersionCode=getCurrentVersion().getVersionCode;//獲得 String currentVersionName=getCurrentVersion().getVersionName;if(versionCode>=currentVersionCode){//先判斷VersionCode是否有更改,更改了一定版本變化 try{ int vName=Integer.getInteger(versionName.replace(".",""); int cVName=Integer.getInteger(currentVersionName.replace(".",""); if(vName>cVName){ return true; }else{ return false; } }catch (FormatException e){ return false; } }else{ return false; } } /** * 獲取當前版本的軟體資訊 * @return */ private PackageInfo getCurrentVersion() { try { PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(), 0); return packageInfo; } catch (NameNotFoundException e) { e.printStackTrace(); return "版本號未知"; } }
方式二:Android APP增量升級的實現方式
詳情跳轉
自從 Android 4.1 開始,Google引入了應用程式的增量更新。
- 實現原理
- 實現
弄清楚原理之後,我們就需要解決兩個問題:
1.如何比對兩個版本的apk生成差異包;
2.如何使用舊的apk+差異包,生成一個新apk;
(1)生成差異包
這一步需要在伺服器端來實現,一般來說,apk有新版本之後,需要往後臺管理端上傳新apk,上傳時就應該生成每一箇舊版與最新版本的差異包。
假設,你的apk已經發布了3個版,1.0,2.0,3.0,這時候你要在後臺釋出4.0,在你上傳時,就應該生成
1.0——>4.0的差異包;
2.0——>4.0的差異包;
3.0——>4.0的差異包;
(2)使用舊apk+差異包,在客戶端合成新apk
差異包已經在伺服器端生成,我們只需要在客戶端提示使用者有更新,然後讓使用者來下載差異包,下載成功之後,
使用本地apk與差異包,生成新版apk。
這一步需要在Android應用中開發。
1.首先NDK編譯出一個*.so,APKPatch工程負責生成 libapkpatch so,生成的so檔案位於APKPatch/libs/libapkpatch.so下,其他Android工程便可以使用該so檔案來合成apk。
2.呼叫該so檔案。
任意一個Android工程,使用該so檔案,拷貝至libs\armeabi中,便可以呼叫patch()方法,來和成舊apk+差異包。
附件中,test工程,就是一個呼叫該so檔案的例子。
- 注意事項
2.增量升級成功的前提是,使用者手機端必須有能夠讓你拷貝出來且與你伺服器用於差分的版本一致的apk,這樣就存在,例如,系統內建的apk無法獲取到,無法進行增量升級;對於某些與你差分版本一致,但是內容有過修改的(比如破解版apk),這樣也是無法進行增量升級的,為了防止合成補丁錯誤,最好在補丁合成前對舊版本的apk進行校驗,保證基礎包的一致性。