iOS 客户端
热修复错误码
以下表格显示错误码及其含义。
错误码 | 含义 |
300 | 未知错误 |
301 | 本地 patch 文件为空。请检查 patch 文件是否成功下载,或本地测试时文件路径是否正确。 |
302 |
|
303 | 本地 patch 文件为空。请检查 patch 文件是否成功下载,或本地测试时文件路径是否正确。 |
304 | patch 文件解密失败。请检查无线保镖验签图片 |
305 | patch 文件解压失败。请重试。 |
306 | patch 文件 MD5 校验失败。请确认发布的 patch 文件是否为加密后的 |
本地测试由 OC 转化后的 .js 文件,为什么修复没有生效?
查看下图中调用的方法返回的错误信息,若不为 nil,根据上文的错误码进一步排查。
NSString *jsFile = [[NSBundle mainBundle] pathForResource:@"Test" ofType:@"js"];
NSError *errorJS = [MPDynamicInterface runWithResultDynamicLocalFile:jsFile];
若上一步无报错,请检查 .js
文件语法是否正确,可参考 OC 转 JS 语法。
本地测试加密后的 .zip 文件,为什么修复没有生效?
查看工程中 RSA 非对称加密信息是否正确,可通过下图中 ret 的值是否为 0 判断。
确保工程中的无线保镖图片是正确的且与工程中的
meta.config
是匹配的。如无法确定,可尝试重新生成无线保镖图片以及更新热修复.zip
文件。确保测试的是加密之后的
.zip
文件。查看下图中调用的方法返回的错误信息,若不为 nil,根据上文的错误码进一步排查。
NSString *jsZip = [[NSBundle mainBundle] pathForResource:@"Test" ofType:@"zip"]; NSError *error = [MPDynamicInterface runWithResultDynamicLocalSecFile:jsZip];
在发布平台下发加密后的 .js 文件后,为什么客户端没有修复生效?
原始
.js
文件加密后,本地验证.zip
文件是否修复生效。在控制台上传新的修复任务时,确保上传到发布平台的修复包是加密后的
.js
文件。目标版本需与工程中
info.plist
文件中Product Version
字段保持一致。在 Xcode 控制台查看
alipay.client.getUnionResource
的网关返回结果是否为 1000,保证网络请求成功。若网关返回结果不是 1000,请根据 移动网关 > 客户端编程 > FAQ 进一步排查。网络请求成功后,在本地沙盒路径中查看 patch 包是否已下发到本地,若目录下已生成了
.zip
和.sig
文件,则表示客户端已获取到发布平台下发的脚本,杀进程重启应用后 patch 即可生效。
Android 客户端
使用热修复后,和 RPC 有关的调用发生 apache http 相关的 crash。
请使用 Android 官网上的方式引入 apache http client,禁止使用导入 Jar 包或者 gradle implementation/compile 的方式导入 http client。否则会引起 classloader 加载类混乱。
内部类的白名单热修复
内部类的引用需要完全限定名。如果一定要修复内部类,最简单的方式是反编译成 smali,smali 的文件名就是内部类的类名。
RPC 调用相关
如果通过 RPC 请求进行资源调用的过程中出现异常,请参考 无线保镖结果码说明 进行排查。