Sophix熱修復問題以及加固

聽說這個可以兩行代碼實現熱修復,瞬間按耐不住了,
正好公測階段,申請了一下權限,等了將近一天吧,通過了認證。然後就是開開心心去嘗試了


以下是嘗試中遇到的問題:
額,,等會說吧,要不先說一下怎麼接入,雖然產品文檔已經很透明瞭,但是還是說一下吧


  • 導包都會哈

  • 這裏我用的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 中,否則無網絡權限,建議放在後面任意時刻,如onCreateSophixManager.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 跳轉一下,啦啦啦 —成功


不用謝我,推薦一波個人網站,喜歡的話請收藏吧,
–! 臣跪謝

發佈了96 篇原創文章 · 獲贊 74 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章