直接记坑, 接入过程就不写了, 参看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