前言
上一篇文章 http://www.itdecent.cn/p/654e812d1222 我簡單寫了一下阿里百川Hotfix的配置過程,就在我剛寫完的第二天,Hotfix出了升級版本的Sophix,這次支持的更多了!首先贊一個,出了Hotfix2.0版本以后,我也是第一時間進行了接入,比1.x的要用起來舒服多了!接下來廢話不多說,直接上代碼吧!
SophixManager.getInstance()
.setContext(this)
.setAppVersion(AppUtils.getVersionName(this))
.setAesKey(null)
.setEnableDebug(Constants.DEBUG_MODE)
.setPatchLoadStatusStub((mode, code, info, patchVersion) ->{
switch (code){
case PatchStatus.CODE_LOAD_SUCCESS:
XLog.d("SophixManager",info+"----補丁加載成功,當前的補丁版本為:"+patchVersion);
break;
case PatchStatus.CODE_LOAD_FAIL:
//內部引擎異常, 推薦此時清空本地補丁, 防止失敗補丁重復加載
XLog.d("SophixManager",info+"---補丁加載失敗,下面將清空本地補丁再重新拉取補丁!");
SophixManager.getInstance().cleanPatches();
break;
default:
XLog.d("SophixManager","--mode是"+mode+"--code是"+code
+"--info是"+info+"--patchVersion是"+patchVersion);
break;
}
}).initialize();
SophixManager.getInstance().queryAndLoadNewPatch();
這一段代碼我寫在application的onCreate()里面
其實真正核心的東西也就這么多了,下面我簡單就里面的幾個方法做一下解釋!
代碼分析部分
SophixManager.getInstance()//獲取單例的SophixManager對象
setContext(this)//這個就不用解釋了吧
setAppVersion()//設置當前的appVersion,建議直接通過utils拿當前app版本的版本號
setAeskey()//這個是一個加密,防止你的補丁包被別人抓取然后泄露信息,因為我沒有用到,所以傳的null,有需求的可以去具體看阿里百川的教程
setEnableDebug(true)//是否打印Sophix的log日志,默認關閉,這個建議跟當前app的debug版本一致
setPatchLoadStatusStub()//設置patch加載狀態(tài)監(jiān)聽器, 該方法參數需要實現PatchLoadStatusListener接口,
//(因為我用了lamada,所以這個是序列化以后的寫法,不了解的去看看lamada),下面我一個一個來介紹
//mode :這個參數顯示的是你當前加載補丁到底是通過哪個途徑來添加的: 0:正常請求模式 1:掃碼模式 2:本地補丁模式
//code: 補丁加載狀態(tài)碼, 詳情查看PatchStatusCode類說明
//info: 補丁加載詳細說明, 詳情查看PatchStatusCode類說明
//handlePatchVersion: 當前處理的補丁版本號, 0:無 -1:本地補丁 其它:后臺補丁
介紹的話 大家也可以看下面的鏈接
開發(fā)者集成文檔http://baichuan.taobao.com/docs/doc.htm?spm=a3c0d.7629140.0.0.eJJ4qK&treeId=234&articleId=106531&docType=1
queryAndLoadNewPatch方法
該方法主要用于查詢服務器是否有新的可用補丁. SDK內部限制連續(xù)兩次queryAndLoadNewPatch()方法調用不能短于3s, 否則的話就會報code:19的錯誤碼. 如果查詢到可用的話, 首先下載補丁到本地, 然后
- 應用原本沒有補丁, 那么如果當前應用的補丁是熱補丁, 那么會立刻加載(不管是冷補丁還是熱補丁). 如果當前應用的補丁是冷補丁, 那么需要重啟生效.
- 應用已經存在一個補丁, 首先會把之前的補丁文件刪除, 然后不立刻加載, 而是等待下次應用重啟再加載該補丁
補丁在后臺發(fā)布之后, 并不會主動下行推送到客戶端, 需要手動調用queryAndLoadNewPatch方法查詢后臺補丁是否可用. - 只會下載補丁版本號比當前應用存在的補丁版本號高的補丁, 比如當前應用已經下載了補丁版本號為5的補丁, 那么只有后臺發(fā)布的補丁版本號>5才會重新下載.
同時1.4.0以上版本服務后臺上線了“一鍵清除”補丁的功能, 所以如果后臺點擊了“一鍵清除”那么這個方法將會返回code:18的狀態(tài)碼. 此時本地補丁將會被強制清除, 同時不清除本地補丁版本號
cleanPatches()方法
清空本地補丁
版本管理說明
說明一:patch是針對客戶端具體某個版本的,patch和具體版本綁定
- eg. 應用當前版本號是1.1.0, 那么只能在后臺查詢到1.1.0版本對應發(fā)布的補丁, 而查詢不到之前1.0.0舊版本發(fā)布的補丁.
說明二:針對某個具體版本發(fā)布的新補丁, 必須包含所有的bugfix, 而不能依賴補丁遞增修復的方式, 因為應用僅可能加載一個補丁
- eg. 針對1.0.0版本在后臺發(fā)布了一個補丁版本號為1的補丁修復了bug1, 然后發(fā)現此時針對這個版本補丁1修復的不完全, 代碼還有bug2, 在后臺重新發(fā)布一個補丁版本號為2的補丁, 那么此時補丁2就必須同時包含bug1和bug2的修復才行, 而不是只包含bug2的修復(bug1就沒被修復了)
本來很多打算自己寫的,但是覺得官方的拷過來更專業(yè),畢竟解釋的很詳細!下面具體講一下后臺的用法
后臺創(chuàng)建應用

http://console.baichuan.taobao.com/applications.htm?spm=a3c0d.8115102.0.0
- 點擊創(chuàng)建應用

- 創(chuàng)建成功之后

- 點進去應用

- 想要管理后臺的話點擊這里

- 然后選擇自己已開通的hotfix

可以看到創(chuàng)建一個應用會有兩個操作系統(tǒng)的,我們只針對android,不過ios目前開始打擊熱更新這一塊了!
點進去管理,接下來的如圖

版本號和當前的app的版本號一致,點進去新建的版本就會看到上傳補丁,補丁包的制作詳見下面鏈接!http://baichuan.taobao.com/docs/doc.htm?spm=a3c0d.7629140.0.0.UX6d4l&treeId=234&articleId=106532&docType=1
里面的強制冷啟動修復什么時候用,我第一篇博客里面貼出來的圖里面有!
調試工具使用說明
鏈接里面介紹的很詳細,有什么疑問歡迎留言!
http://baichuan.taobao.com/docs/doc.htm?spm=a3c0d.7629140.0.0.cgWAIG&treeId=234&articleId=105842&docType=1
最后
小弟寫博客不久,可能還有很多地方寫的不好,希望大家及時指出來,共同進步!當然,要是能點個喜歡或者關注一下就更好了!!