聽說這個可以兩行代碼實現熱修復,瞬間按耐不住了,
正好公測階段,申請了一下權限,等了將近一天吧,通過了認證。然後就是開開心心去嘗試了
以下是嘗試中遇到的問題:
額,,等會說吧,要不先說一下怎麼接入,雖然產品文檔已經很透明瞭,但是還是說一下吧
導包都會哈
這裏我用的Kotlin 編寫的,在Application 中實現需要添加的代碼,也就是這兩行代碼實現熱修復
// initialize最好放在attachBaseContext最前面
SophixManager.getInstance().setContext(this)
.setAppVersion(appVersion)
.setAesKey(null)
.setEnableDebug(true)
.setPatchLoadStatusStub(new PatchLoadStatusListener() {
@Override
public void onLoad(final int mode, final int code, final String info, final int handlePatchVersion) {
// 補丁加載回調通知
if (code == PatchStatus.CODE_LOAD_SUCCESS) {
// 表明補丁加載成功
} else if (code == PatchStatus.CODE_LOAD_RELAUNCH) {
// 表明新補丁生效需要重啓. 開發者可提示用戶或者強制重啓;
// 建議: 用戶可以監聽進入後臺事件, 然後應用自殺
} else if (code == PatchStatus.CODE_LOAD_FAIL) {
// 內部引擎異常, 推薦此時清空本地補丁, 防止失敗補丁重複加載
// SophixManager.getInstance().cleanPatches();
} else {
// 其它錯誤信息, 查看PatchStatus類說明
}
}
}).initialize();
// queryAndLoadNewPatch不可放在attachBaseContext 中,否則無網絡權限,建議放在後面任意時刻,如onCreate中
SophixManager.getInstance().queryAndLoadNewPatch();
然後就完了—zzz
像之前玩Tinker的時候可沒這麼簡單
好了接下來就是問題所在了
很簡單的問題,我弄了一上午,最後發現一句關鍵的話
1.4 版本管理說明
說明一:patch是針對客戶端具體某個版本的,patch和具體版本綁定
eg. 應用當前版本號是1.1.0, 那麼只能在後臺查詢到1.1.0版本對應發佈的補丁, 而查詢不到之前1.0.0舊版本發佈的補丁.
說明二:針對某個具體版本發佈的新補丁, 必須包含所有的bugfix, 而不能依賴補丁遞增修復的方式, 因爲應用僅可能加載一個補丁
eg. 針對1.0.0版本在後臺發佈了一個補丁版本號爲1的補丁修復了bug1, 然後發現此時針對這個版本補丁1修復的不完全, 代碼還有bug2, 在後臺重新發佈一個補丁版本號爲2的補丁, 那麼此時補丁2就必須同時包含bug1和bug2的修復才行, 而不是隻包含bug2的修復(bug1就沒被修復了)
我當時手賤改了一下
SophixManager.getInstance().setContext(this)
.setAppVersion(“1.0.1”)//注意下我寫的是1.0.1
實際中我測試的版本是1.0 –而且我在版本=控制檯寫的也是1.0,
這就尷尬了,輪詢器查找不到1.0.1版本jar 文件。
後來改了一下,瞬間世界觀崩塌,好傷心一下子好用了~~
問題二:加固
加固問題,Tinker 不支持加固,後來我就沒深入嘗試,但是Sophix 可以呀,但是不能拿加固完成的版本作爲舊包,新包。
你需要的只是在加固之前生成差異包,不然會無法生成jar 文件
問題三:四大組件
對於Sophix 不能創建四大組件的問題,我想了一下,我覺得我們可以嘗試一下在舊版本先佔幾個坑,作爲空實現,我們起名 TextActivity1,記得在清單文件中註冊一下
我們發佈後發現出問題了,腫麼辦,OK ,現在只需要在我們佔的坑TextActivity1中實現方法以及邏輯,最後通過intent 跳轉一下,啦啦啦 —成功
不用謝我,推薦一波個人網站,喜歡的話請收藏吧,
–! 臣跪謝