更新时间:2020-10-10 15:59
该方法主要做些必要的初始化工作以及如果本地有补丁的话会加载补丁,但不会自动请求补丁。因此需要自行调用queryAndLoadNewPatch方法拉取补丁。initialize调用需要尽可能的早,必须在Application的attachBaseContext方法的最前面调用(在super.attachBaseContext之后,如果有Multidex,也需要在Multidex.install之后),initialize()方法调用之前你需要先调用如下几个方法进行一些必要的参数设置,方法调用说明如下:
传入入口Application即可
应用的版本号,拉取补丁时对应控制台创建的版本。
举例:
三个Secret分别对应AndroidManifest里面的三个参数,可以不在AndroidManifest设置而是用此函数来设置Secret。放到代码里面进行设置可以自定义混淆代码,更加安全,此函数的设置会覆盖AndroidManifest里面的设置,如果对应的值设为null,默认会在使用AndroidManifest里面的。
isEnabled默认为false,是否打开调试模式,调试模式下会输出日志以及不进行补丁签名校验。线下调试此参数可以设置为true,查看日志过滤TAG:Sophix,同时强制不对补丁进行签名校验,所有就算补丁未签名或者签名失败也发现可以加载成功。
注意:正式发布该参数必须为false,false会对补丁做签名校验,否则就可能存在安全漏洞风险。
用户自定义aes秘钥,会对补丁包采用对称加密。这个参数值必须是16位数字或字母的组合,是和补丁工具设置里面AES Key保持完全一致,补丁才能正确被解密进而加载。此时平台无感知这个秘钥,所以不用担心阿里云移动平台会利用你们的补丁做一些非法的事情。
设置patch加载状态监听器,该方法参数需要实现PatchLoadStatusListener接口,接口说明见下文PatchLoadStatusListener说明。
把不支持的设备加入黑名单,加入后不会进行热修复。
adb shell getprop | grep ro.product.model
取得。说明:目前控制台也可以直接设置机型黑名单,更加灵活。详情请参见机型过滤。
该方法主要用于查询服务器是否有新的可用补丁。SDK内部限制连续两次queryAndLoadNewPatch()方法调用不能短于3s,否则的话就会报code:19的错误码。 如果查询到可用的话,首先下载补丁到本地,然后:
说明:补丁在后台发布之后,并不会主动下行推送到客户端,需要手动调用queryAndLoadNewPatch方法查询后台补丁是否可用。
移动热修复控制台上线了“全部回滚”补丁的功能,如果后台进行了“全部回滚”的操作,那么这个方法将会返回code:18的状态码。 此时本地补丁将会被强制清除,同时不清除本地补丁版本号。
可以在PatchLoadStatusListener监听到CODE_LOAD_RELAUNCH后在合适的时机,调用此方法杀死进程。
注意:不可以直接
Process.killProcess(Process.myPid())
来杀进程,这样会扰乱Sophix的内部状态。因此如果需要杀死进程,建议使用killProcessSafely
方法,它在内部做一些适当处理后才杀死本进程。
清空本地补丁,并且不再拉取被清空的版本的补丁。正常情况下不需要开发者自己调用,因为Sophix内部会判断对补丁引发崩溃的情况进行自动清空。
该接口需要自行实现并传入initialize
方法中,补丁加载状态会回调给该接口,参数说明如下:
该参数设置端上拉取补丁包时的标签,可以支持条件更为丰富的灰度发布,以下为简单示例:
List<String> tags = new ArrayList<>();
tags.add("test");
//此处调用在queryAndLoadNewPatch()方法前
SophixManager.getInstance().setTags(tags);
List<String> tags = new ArrayList<>();
tags.add("production");
//此处调用在queryAndLoadNewPatch()方法前
SophixManager.getInstance().setTags(tags);
如上,设置不同的tags,同一版本号下,可以打两个或者多个基线包,线上发布时用production的基线包,测试环境用test的基线包,这样就可以测试同一版本号下的同一个补丁了,两个环境互不影响。tags可以add多个,结构为前后非空字符串即可。生成补丁时,用同样tags的基线包和修复包。
在文档使用中是否遇到以下问题
更多建议
匿名提交