前言
上一篇文章 http://www.reibang.com/p/654e812d1222 我簡單寫了一下阿里百川Hotfix的配置過程,就在我剛寫完的第二天,Hotfix出了升級(jí)版本的Sophix,這次支持的更多了!首先贊一個(gè),出了Hotfix2.0版本以后,我也是第一時(shí)間進(jìn)行了接入,比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+"----補(bǔ)丁加載成功,當(dāng)前的補(bǔ)丁版本為:"+patchVersion);
break;
case PatchStatus.CODE_LOAD_FAIL:
//內(nèi)部引擎異常, 推薦此時(shí)清空本地補(bǔ)丁, 防止失敗補(bǔ)丁重復(fù)加載
XLog.d("SophixManager",info+"---補(bǔ)丁加載失敗,下面將清空本地補(bǔ)丁再重新拉取補(bǔ)丁!");
SophixManager.getInstance().cleanPatches();
break;
default:
XLog.d("SophixManager","--mode是"+mode+"--code是"+code
+"--info是"+info+"--patchVersion是"+patchVersion);
break;
}
}).initialize();
SophixManager.getInstance().queryAndLoadNewPatch();
這一段代碼我寫在application的onCreate()里面
其實(shí)真正核心的東西也就這么多了,下面我簡單就里面的幾個(gè)方法做一下解釋!
代碼分析部分
SophixManager.getInstance()//獲取單例的SophixManager對(duì)象
setContext(this)//這個(gè)就不用解釋了吧
setAppVersion()//設(shè)置當(dāng)前的appVersion,建議直接通過utils拿當(dāng)前app版本的版本號(hào)
setAeskey()//這個(gè)是一個(gè)加密,防止你的補(bǔ)丁包被別人抓取然后泄露信息,因?yàn)槲覜]有用到,所以傳的null,有需求的可以去具體看阿里百川的教程
setEnableDebug(true)//是否打印Sophix的log日志,默認(rèn)關(guān)閉,這個(gè)建議跟當(dāng)前app的debug版本一致
setPatchLoadStatusStub()//設(shè)置patch加載狀態(tài)監(jiān)聽器, 該方法參數(shù)需要實(shí)現(xiàn)PatchLoadStatusListener接口,
//(因?yàn)槲矣昧薼amada,所以這個(gè)是序列化以后的寫法,不了解的去看看lamada),下面我一個(gè)一個(gè)來介紹
//mode :這個(gè)參數(shù)顯示的是你當(dāng)前加載補(bǔ)丁到底是通過哪個(gè)途徑來添加的: 0:正常請(qǐng)求模式 1:掃碼模式 2:本地補(bǔ)丁模式
//code: 補(bǔ)丁加載狀態(tài)碼, 詳情查看PatchStatusCode類說明
//info: 補(bǔ)丁加載詳細(xì)說明, 詳情查看PatchStatusCode類說明
//handlePatchVersion: 當(dāng)前處理的補(bǔ)丁版本號(hào), 0:無 -1:本地補(bǔ)丁 其它:后臺(tái)補(bǔ)丁
介紹的話 大家也可以看下面的鏈接
開發(fā)者集成文檔http://baichuan.taobao.com/docs/doc.htm?spm=a3c0d.7629140.0.0.eJJ4qK&treeId=234&articleId=106531&docType=1
queryAndLoadNewPatch方法
該方法主要用于查詢服務(wù)器是否有新的可用補(bǔ)丁. SDK內(nèi)部限制連續(xù)兩次queryAndLoadNewPatch()方法調(diào)用不能短于3s, 否則的話就會(huì)報(bào)code:19的錯(cuò)誤碼. 如果查詢到可用的話, 首先下載補(bǔ)丁到本地, 然后
- 應(yīng)用原本沒有補(bǔ)丁, 那么如果當(dāng)前應(yīng)用的補(bǔ)丁是熱補(bǔ)丁, 那么會(huì)立刻加載(不管是冷補(bǔ)丁還是熱補(bǔ)丁). 如果當(dāng)前應(yīng)用的補(bǔ)丁是冷補(bǔ)丁, 那么需要重啟生效.
- 應(yīng)用已經(jīng)存在一個(gè)補(bǔ)丁, 首先會(huì)把之前的補(bǔ)丁文件刪除, 然后不立刻加載, 而是等待下次應(yīng)用重啟再加載該補(bǔ)丁
補(bǔ)丁在后臺(tái)發(fā)布之后, 并不會(huì)主動(dòng)下行推送到客戶端, 需要手動(dòng)調(diào)用queryAndLoadNewPatch方法查詢后臺(tái)補(bǔ)丁是否可用. - 只會(huì)下載補(bǔ)丁版本號(hào)比當(dāng)前應(yīng)用存在的補(bǔ)丁版本號(hào)高的補(bǔ)丁, 比如當(dāng)前應(yīng)用已經(jīng)下載了補(bǔ)丁版本號(hào)為5的補(bǔ)丁, 那么只有后臺(tái)發(fā)布的補(bǔ)丁版本號(hào)>5才會(huì)重新下載.
同時(shí)1.4.0以上版本服務(wù)后臺(tái)上線了“一鍵清除”補(bǔ)丁的功能, 所以如果后臺(tái)點(diǎn)擊了“一鍵清除”那么這個(gè)方法將會(huì)返回code:18的狀態(tài)碼. 此時(shí)本地補(bǔ)丁將會(huì)被強(qiáng)制清除, 同時(shí)不清除本地補(bǔ)丁版本號(hào)
cleanPatches()方法
清空本地補(bǔ)丁
版本管理說明
說明一:patch是針對(duì)客戶端具體某個(gè)版本的走净,patch和具體版本綁定
- eg. 應(yīng)用當(dāng)前版本號(hào)是1.1.0, 那么只能在后臺(tái)查詢到1.1.0版本對(duì)應(yīng)發(fā)布的補(bǔ)丁, 而查詢不到之前1.0.0舊版本發(fā)布的補(bǔ)丁.
說明二:針對(duì)某個(gè)具體版本發(fā)布的新補(bǔ)丁, 必須包含所有的bugfix, 而不能依賴補(bǔ)丁遞增修復(fù)的方式, 因?yàn)閼?yīng)用僅可能加載一個(gè)補(bǔ)丁
- eg. 針對(duì)1.0.0版本在后臺(tái)發(fā)布了一個(gè)補(bǔ)丁版本號(hào)為1的補(bǔ)丁修復(fù)了bug1, 然后發(fā)現(xiàn)此時(shí)針對(duì)這個(gè)版本補(bǔ)丁1修復(fù)的不完全, 代碼還有bug2, 在后臺(tái)重新發(fā)布一個(gè)補(bǔ)丁版本號(hào)為2的補(bǔ)丁, 那么此時(shí)補(bǔ)丁2就必須同時(shí)包含bug1和bug2的修復(fù)才行, 而不是只包含bug2的修復(fù)(bug1就沒被修復(fù)了)
本來很多打算自己寫的,但是覺得官方的拷過來更專業(yè),畢竟解釋的很詳細(xì)!下面具體講一下后臺(tái)的用法
后臺(tái)創(chuàng)建應(yīng)用
http://console.baichuan.taobao.com/applications.htm?spm=a3c0d.8115102.0.0
- 點(diǎn)擊創(chuàng)建應(yīng)用
- 創(chuàng)建成功之后
- 點(diǎn)進(jìn)去應(yīng)用
- 想要管理后臺(tái)的話點(diǎn)擊這里
- 然后選擇自己已開通的hotfix
可以看到創(chuàng)建一個(gè)應(yīng)用會(huì)有兩個(gè)操作系統(tǒng)的,我們只針對(duì)android,不過ios目前開始打擊熱更新這一塊了!
點(diǎn)進(jìn)去管理,接下來的如圖
版本號(hào)和當(dāng)前的app的版本號(hào)一致,點(diǎn)進(jìn)去新建的版本就會(huì)看到上傳補(bǔ)丁,補(bǔ)丁包的制作詳見下面鏈接!http://baichuan.taobao.com/docs/doc.htm?spm=a3c0d.7629140.0.0.UX6d4l&treeId=234&articleId=106532&docType=1
里面的強(qiáng)制冷啟動(dòng)修復(fù)什么時(shí)候用,我第一篇博客里面貼出來的圖里面有!
調(diào)試工具使用說明
鏈接里面介紹的很詳細(xì),有什么疑問歡迎留言!
http://baichuan.taobao.com/docs/doc.htm?spm=a3c0d.7629140.0.0.cgWAIG&treeId=234&articleId=105842&docType=1
最后
小弟寫博客不久,可能還有很多地方寫的不好,希望大家及時(shí)指出來,共同進(jìn)步!當(dāng)然,要是能點(diǎn)個(gè)喜歡或者關(guān)注一下就更好了!!