实时发布常见问题

iOS 客户端

热修复错误码

以下表格显示错误码及其含义。

错误码

含义

300

未知错误

301

本地 patch 文件为空。请检查 patch 文件是否成功下载,或本地测试时文件路径是否正确。

302

.js 文件解析错误。请检查由 OC 转化的 .js 文件是否正确。

303

本地 patch 文件为空。请检查 patch 文件是否成功下载,或本地测试时文件路径是否正确。

304

patch 文件解密失败。请检查无线保镖验签图片 yw_1222.jpg 是否正确。

305

patch 文件解压失败。请重试。

306

patch 文件 MD5 校验失败。请确认发布的 patch 文件是否为加密后的 .js 格式。

本地测试由 OC 转化后的 .js 文件,为什么修复没有生效?

查看下图中调用的方法返回的错误信息,若不为 nil,根据上文的错误码进一步排查。

    NSString *jsFile = [[NSBundle mainBundle] pathForResource:@"Test" ofType:@"js"];
    NSError *errorJS = [MPDynamicInterface runWithResultDynamicLocalFile:jsFile];

若上一步无报错,请检查 .js 文件语法是否正确,可参考 OC 转 JS 语法

本地测试加密后的 .zip 文件,为什么修复没有生效?

  1. 查看工程中 RSA 非对称加密信息是否正确,可通过下图中 ret 的值是否为 0 判断。

    eee
  2. 确保工程中的无线保镖图片是正确的且与工程中的 meta.config 是匹配的。如无法确定,可尝试重新生成无线保镖图片以及更新热修复 .zip 文件。

  3. 确保测试的是加密之后的 .zip 文件。

    zip
  4. 查看下图中调用的方法返回的错误信息,若不为 nil,根据上文的错误码进一步排查。

     NSString *jsZip = [[NSBundle mainBundle] pathForResource:@"Test" ofType:@"zip"];
     NSError *error = [MPDynamicInterface runWithResultDynamicLocalSecFile:jsZip];

在发布平台下发加密后的 .js 文件后,为什么客户端没有修复生效?

  1. 原始 .js 文件加密后,本地验证 .zip 文件是否修复生效。

  2. 在控制台上传新的修复任务时,确保上传到发布平台的修复包是加密后的 .js 文件。

    资源包
  3. 目标版本需与工程中 info.plist 文件中 Product Version 字段保持一致。

    Version
  4. 在 Xcode 控制台查看 alipay.client.getUnionResource 的网关返回结果是否为 1000,保证网络请求成功。若网关返回结果不是 1000,请根据 移动网关 > 客户端编程 > FAQ 进一步排查。 qqq

  5. 网络请求成功后,在本地沙盒路径中查看 patch 包是否已下发到本地,若目录下已生成了 .zip.sig 文件,则表示客户端已获取到发布平台下发的脚本,杀进程重启应用后 patch 即可生效。

    path

Android 客户端

使用热修复后,和 RPC 有关的调用发生 apache http 相关的 crash。

请使用 Android 官网上的方式引入 apache http client,禁止使用导入 Jar 包或者 gradle implementation/compile 的方式导入 http client。否则会引起 classloader 加载类混乱。

内部类的白名单热修复

内部类的引用需要完全限定名。如果一定要修复内部类,最简单的方式是反编译成 smali,smali 的文件名就是内部类的类名。

RPC 调用相关

如果通过 RPC 请求进行资源调用的过程中出现异常,请参考 无线保镖结果码说明 进行排查。