Skip to content

SDK热修复使用文档

乱 edited this page Oct 15, 2019 · 3 revisions

SDK热修复使用文档

一、接入后打包,生成支持热更的aar

好了,你已经改完了业务SDK代码,现在即将要打包上传到Maven。

  1. 修改根目录中 gradle.properties 中的业务SDK版本号

注意:请先改好版本号再进行下面的操作!!!因为版本号会打包进SDK中,用于接口请求补丁分发。同时该版本号也是Maven上SDK的版本号

  1. 打开gradle.propertiesisAppModule 开关

  1. 运行 assembleRelease Gradle

  1. 运行结果

成功插桩结果如下:

现在我们的SDK已经插桩好,本地打包好了,需要上传到Maven了。

注:脚本会拦截 uploadTask 获取这个路径插桩成功的 aar ,所以不要移动这个aar喔。

  1. 修改开关,把 isAppModule 置为 false(是的,你没看错,要把开关改回来,因为Application模式没有 uploadArchives Task)

  1. 运行 uploadArchives Gradle

上传成功即可,如有报错,请见SDK热修复使用常见问题

  1. 这样,你的业务方就可以愉快地使用业务方SDK了。

二、写补丁代码

如果线上出了bug,我们需要热更SDK,第一步就是编写补丁代码:

修改代码,在改动的方法上面添加@Modify注解,对于Lambda表达式请在修改的方法里面调用RobustModify.modify()方法!

	@Modify
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.e("TAG", "我是补丁插入的log");
     }
     //或者是在被修改的方法里面调用RobustModify.modify()方法
     protected void onCreate(Bundle savedInstanceState) {
        RobustModify.modify()
        super.onCreate(savedInstanceState);
        Log.e("TAG", "我是补丁插入的log");
     }
     

新增的方法和字段使用 @Add 注解

    //增加方法
    @Add
    public String getString() {
        return "Robust";
    }
    //增加类
    @Add
    public class NewAddCLass {
        public static String get() {
           return "robust";
         }
    }

支持修复的层级如下图:

三、打补丁

  1. 确定打补丁的基准包,例:我针对 1.0.0 下发补丁,那需要找到 1.0.0 插桩 SDK 后在 robustjar 文件夹下生成的 methodsMap.robust,找业务方要对应版本的 mapping.txt,一起放在 robust 目录下。(没有目录就新建一个)

注:如果你的补丁不会用到业务方混淆的 API,例如 Kotlin、Java 的 API,则可以无需 mapping.txt文件。

  1. 开启 Robust 开关(非必需操作)

如果有mapping.txt,需要开启 Robust 的混淆开关,如果没有则无需操作,默认为 false。

  1. 打开gradle.propertiesisAppModuleisPatchModule 开关

  1. 运行 assembleRelease Gradle,没错,还是assembleRelease GradleTask

  1. 补丁制作成功后会停止构建,出现类似于如下的提示,表示补丁生成成功 。

image.png

四、上传补丁

  1. copy 生成的 patch.jar 到SDKHotfix项目的根目录,补丁生成目录: XX/build/outputs/robust/patch.jar

  2. 修改SDKHotfix项目根目录的gradle.properties 中的版本号、描述、补丁作用的对应sdk包名。

  1. 运行SDKHotfix项目_uploadPatch GradleTask

五、请求补丁

此时已经成功上传,重新打开你的业务SDK,初始化热修复SDK,就可以看到请求补丁下载后自动应用啦。