-
Notifications
You must be signed in to change notification settings - Fork 84
SDK热修复使用文档
乱 edited this page Oct 15, 2019
·
3 revisions
好了,你已经改完了业务SDK代码,现在即将要打包上传到Maven。
- 修改根目录中
gradle.properties
中的业务SDK版本号
注意:请先改好版本号再进行下面的操作!!!因为版本号会打包进SDK中,用于接口请求补丁分发。同时该版本号也是Maven上SDK的版本号
- 打开
gradle.properties
中isAppModule
开关
- 运行
assembleRelease
Gradle
- 运行结果
成功插桩结果如下:
现在我们的SDK已经插桩好,本地打包好了,需要上传到Maven了。
注:脚本会拦截 uploadTask 获取这个路径插桩成功的 aar ,所以不要移动这个aar喔。
- 修改开关,把
isAppModule
置为false
(是的,你没看错,要把开关改回来,因为Application模式没有 uploadArchives Task)
- 运行
uploadArchives
Gradle
上传成功即可,如有报错,请见SDK热修复使用常见问题
- 这样,你的业务方就可以愉快地使用业务方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.0.0 下发补丁,那需要找到 1.0.0 插桩 SDK 后在 robustjar 文件夹下生成的
methodsMap.robust
,找业务方要对应版本的mapping.txt
,一起放在 robust 目录下。(没有目录就新建一个)
注:如果你的补丁不会用到业务方混淆的 API,例如 Kotlin、Java 的 API,则可以无需
mapping.txt
文件。
- 开启 Robust 开关(非必需操作)
如果有mapping.txt
,需要开启 Robust 的混淆开关,如果没有则无需操作,默认为 false。
- 打开
gradle.properties
中isAppModule
和isPatchModule
开关
- 运行
assembleRelease
Gradle,没错,还是assembleRelease
GradleTask
- 补丁制作成功后会停止构建,出现类似于如下的提示,表示补丁生成成功 。
-
copy 生成的 patch.jar 到
SDKHotfix
项目的根目录,补丁生成目录:XX/build/outputs/robust/patch.jar
-
修改
SDKHotfix
项目根目录的gradle.properties
中的版本号、描述、补丁作用的对应sdk包名。
- 运行
SDKHotfix
项目_uploadPatch
GradleTask
此时已经成功上传,重新打开你的业务SDK,初始化热修复SDK,就可以看到请求补丁下载后自动应用啦。