記接入美團robust踩過的坑--多補丁應用

        直接記坑, 接入過程就不寫了, 參看robust官方文檔, github地址:https://github.com/Meituan-Dianping/Robustgit

        坑1、setTempPath是設置補丁完整真實路徑, 查看源碼得知路徑爲xxxxx/補丁文件名_temp.jar, 我開始直接用demo中PatchManipulateImp文件, 只從新調用setLocalPath, 忘記下面verifyPatch方法中寫死patch.setTempPath(context.getCacheDir()+ File.separator+"robust"+File.separator + "patch");, 結果儘管LocalPath文件夾中有多個補丁, TempPath文件夾中的文件最後都被最後一個覆蓋掉, 只有一個patch_temp.jar public String getTempPath() { return tempPath + "temp" + ".jar"; } github

        坑2、多個補丁只有一個補丁生效. 把路徑的坑填完後, 滿心歡喜打了兩個補丁, 結果發現只有一個補丁生效. 具體是這樣的: 開始修改方法A添加一行代碼, 生成一個補丁零patch_v0.jar, 而後修改方法B,一樣是添加一行代碼, 生成補丁一patch_v1.jar, 把補丁逐個放到/storage/emulated/0/robust/目錄下測試, 都達到預期效果. 但後來發現補丁一中已經包含了補丁零的修改, 只須要加載補丁一就實現了兩次修改, 那麼實際上補丁零沒用, 這也致使了補丁一比補丁零大,而且達不到補丁列表的效果. 後來我試下在製做補丁前把以前製做補丁零的標識(如@modify )去掉, 製做出來的補丁一就比上次製做的補丁包小了, 單獨測試也生效了. 但這時同時把補丁零和補丁一放到robust/目錄, 日誌顯示兩補丁都apply result true, 但實際上只有補丁一輩子效. 日誌以下:app

11-05 14:20:27.123 27371-27819/? D/robust: current path:com.gm.gumi.ui.activity.RobustActivity find:ChangeQuickRedirect com.gm.gumi.kit.robust.RobustActivityPatchControl
11-05 14:20:27.126 27371-27819/? D/robust: patch LocalPath:/storage/emulated/0/robust/patch_v0.jar,apply result true
11-05 14:20:27.222 27371-27819/? D/robust: current path:com.gm.gumi.ui.activity.RobustActivity
11-05 14:20:27.223 27371-27819/? D/robust: current path:com.gm.gumi.ui.activity.RobustActivity find:ChangeQuickRedirect com.gm.gumi.kit.robust.RobustActivityPatchControl
11-05 14:20:27.224 27371-27819/? D/robust: patch LocalPath:/storage/emulated/0/robust/patch_v1.jar,apply result true
測試

        這個問題我昨天在問答中提問了, 沒有人回答, 因此我只能本身慢慢爬. 我以前製做補丁都是在同一個類中修改, 今天早上忽然腦殼抽筋, 閃過一個念頭, 因而在A類是修改製做了一個補丁零, 而後把補丁零的標識去掉, 而後修改B類製做了補丁一, 結果也抽筋了, 兩補丁都生效了. 我懷疑真的是哪一個步驟出bug了, 趕忙全局搜索@modify, 結果只有B類中有且只有一個. 難道真相就這麼被我發現了? 因而, 我用一樣的方法修改C類生成補丁二, 結果三個補丁都生效. 因此結論就是, robust是支持多補丁的, 只不過一個類只能有一個補丁, 多補丁是在修改多個類的前提下, 若是官方文檔在這個方面沒有說清楚一點就沒有我這個問題了.ui

相關文章
相關標籤/搜索