-
Notifications
You must be signed in to change notification settings - Fork 807
Home
Robust是美团点评提供的Android热更新解决方案。
- 无需更改,完美兼容Android 2.x-8.x,完全使用Public Api
- 补丁成功率高达99%
Robust热更新系统分了三大块,前期的代码插桩、补丁加载策略,以及补丁的自动化,我们开源的重点是代码插桩和补丁的自动化,对于补丁的加载策略不同的业务方有着不同的需求,因为这部分我们预留了实现接口,大家可以参看demo中的类PatchManipulateImp的注释,根据注释来实现个性化的补丁加载策略。 关于Robust的详细介绍,可以参考这篇文章,Android热补丁之Robust原理解析(一)。
这部分可以参考Android 美团Robust热更新 使用入门,需要额外补充的一些如下:
-
上述的版本号请参考release页面的最新版本号。
-
关于robust.xml文件的配置,请仔细参考robust.xml文件中的注释,尤其是对Robust插入代码的包名配置项
<packname name="hotfixPackage">
,样例给出的com.meituan
和com.sankuai
,这个配置控制Robust插入代码的包名,各个App应该不尽相同。请务必注意配置项<patchPackname name="patchPackname">
的注释,保证和PatchManipulateImp一致性。 -
关于
PatchManipulateImp
这个类控制了补丁的加载策略,代码中也增加不少的注释,在这个类中实际负责补丁的下载、校验和使用策略等,这个类需要实现如下几个方法:/** * 服务器应该返回的数据包括补丁文件的下载链接、补丁的md5、补丁的编号等信息 * * @param context * @return 联网获取补丁列表, */ protected List<Patch> fetchPatchList(Context context); /** * * 对加密的补丁进行校验 * * @param context * @param patch * @return 校验结果 */ protected boolean verifyPatch(Context context, Patch patch); /** * 努力确保补丁文件存在,验证md5是否一致。 * 如果不存在,则动态下载 * * @param patch * @return 是否存在 */ protected boolean ensurePatchExist(Patch patch);
-
生成apk的时候保存mapping文件和methodidmap.robust文件。
-
制作补丁的时候需要和生成apk的代码保持一致,执行的gradle命令也应该相同(避免不同的打包命令使用不同的代码和资源生成不同flavor的apk),当被补丁的方法中包含资源id的时候尤其注意需要保证代码的一致性。
-
对于全是字段访问的方法,robust没有插入代码,也就是不能为这类方法生成补丁。