Skip to content
何定旭 edited this page Nov 24, 2017 · 11 revisions

Robust是美团点评提供的Android热更新解决方案。

Robust特性

  1. 无需更改,完美兼容Android 2.x-8.x,完全使用Public Api
  2. 补丁成功率高达99%

Robust结构

Robust热更新系统分了三大块,前期的代码插桩、补丁加载策略,以及补丁的自动化,我们开源的重点是代码插桩和补丁的自动化,对于补丁的加载策略不同的业务方有着不同的需求,因为这部分我们预留了实现接口,大家可以参看demo中的类PatchManipulateImp的注释,根据注释来实现个性化的补丁加载策略。 关于Robust的详细介绍,可以参考这篇文章,Android热补丁之Robust原理解析(一)

Robust的接入:

这部分可以参考Android 美团Robust热更新 使用入门,需要额外补充的一些如下:

  1. 上述的版本号请参考release页面的最新版本号。

  2. 关于robust.xml文件的配置,请仔细参考robust.xml文件中的注释,尤其是对Robust插入代码的包名配置项<packname name="hotfixPackage">,样例给出的com.meituancom.sankuai,这个配置控制Robust插入代码的包名,各个App应该不尽相同。请务必注意配置项<patchPackname name="patchPackname">的注释,保证和PatchManipulateImp一致性。

  3. 关于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);
  4. 生成apk的时候保存mapping文件和methodidmap.robust文件。

  5. 制作补丁的时候需要和生成apk的代码保持一致,执行的gradle命令也应该相同(避免不同的打包命令使用不同的代码和资源生成不同flavor的apk),当被补丁的方法中包含资源id的时候尤其注意需要保证代码的一致性。

  6. 对于全是字段访问的方法,robust没有插入代码,也就是不能为这类方法生成补丁。