常见问题
Google Play 使用限制
对于通过 Google Play 分发的应用,Google Play 要求应用不得采用 Google Play 更新机制以外的其他任何方式修改、替换或更新应用本身。同样地,应用不得从 Google Play 以外的来源下载可执行代码(例如 dex、JAR 和 .so 文件)。因此应用接入热修复组件将会导致您的应用无法通过 Google Play 应用市场发布审核。详情请参考 Google Play 政策中心 > 设备和网络滥用。
BuildNo应当如何定义
您每一个打包生成的正式Apk都需要定义一个唯一的BuildNo,用于构建热修复时的标识。BuildNo通常由应用版本 + 热修复版本的形式构成,前3 - 5位一般为应用版本号(也可自行设置),最后2 - 3位为补丁版本号。例如:
- 您首次发布应用正式版,应用版本号为 1.2.3,此时对应的BuildNo为 123000。
- 当您需要基于1.2.3版本进行一次热修复时,需要为新打包的 Apk 增加热修复版本,此时新包的 BuildNo 可以定义为123001。
- 如果您再度发布新的热修复,则应当继续增加热修复版本,此时 BuildNo 为 123002。
- 当您应用发布了新版本,此时应当增加应用的版本号并重置热修复版本号。如新版本为1.2.4,则 BuildNo 为 124000。
另外需要注意的是:
- 通常 BuildNo 会作为 TinkerId 的一部分使用。为保证热修复生效,您应当在打包脚本中定义 BuildNo,并在每次发版时修改 BuildNo。
- BuildNo 的值必须单向递增,即使您回滚代码也应当定义更高的 BuildNo 而非减小 BuildNo。
- 控制台填写 BuildNo 时应当与 Apk 真实的 BuildNo保持一致。
TinkerId是什么
TinkerId 是 Apk 的唯一标识,用于标定热修复的基准包以及构建热修复的补丁包,TinkerId 通常由 VerName.BuildNo 的格式构成。如您的应用版本号为 1.2.3,BuildNo 为 123000,则 TinkerId 为 1.2.3.123000。当您在控制台使用 TinkerId 时,应当与您 Apk 打包时真实的 TinkerId 保持一致。
母包 子包 补丁包是什么
母包: 需要被修复的应用包,即用户已安装的 apk。
子包: 针对母包 bug 已修复的应用包。
补丁: 母包与子包 diff 差分所生成的补丁文件。
APK 上传后无法在后台生成补丁文件 日志提示 com.tencent.tinker.android.dex.DexException: Unexpected magic
当您上传 APK 制作补丁文件时,请确保您的 APK 并非通过 Android Studio 的 Run 命令生成,而是通过 assembleDebug 或是 assembleRelease 的方式构建。同时热修复功能仅支持 minSdkVersion 低于24的应用,minSdkVersion 大于等于 24 将无法生成补丁。
热修复相关错误码
概述
热修复主要涉及四个阶段:补丁生成阶段、补丁下载阶段、补丁合并阶段、补丁加载阶段,其中补丁生成在 TMF 服务端,其余阶段则在客户端。
补丁下载阶段-SDK 业务层
以下错误码为 HotpatchListener.onDownloadCallback(HotPatchInfo hotPatchInfo, int errCode) 接口返回
错误码 | 说明 |
---|---|
0 | 成功 |
-7 | 补丁文件下载不完整 |
-5056 | 补丁文件下载过程中 IO 异常 |
-5000 | 补丁文件下载过程中的异常 |
-9 | 补丁文件 MD5 校验失败 |
-7001 | 补丁临时文件不存在 |
-7056 | 补丁文件 IO 操作异常 |
-7000 | 补丁文件操作异常 |
-1053 | 补丁文件下载 URL 异常 |
-10 | 未知异常 |
-7006 | 补丁文件大小校验失败 |
补丁合并阶段-SDK 业务层与 Tinker 层
以下错误码为 HotpatchListener.onMergeCallback(HotPatchInfo hotPatchInfo, int errCode) 接口返回
错误码 | 说明 |
---|---|
21 | 不支持 Manifest 文件修改 |
22 | 不支持 Anim 修改 |
0 | patchCheck 通过 |
-1 | 当前 tinkerFlag 为不可用状态 |
-2 | 输入的临时补丁包文件不存在 |
-3 | 当前:patch 补丁合成进程正在运行 |
-4 | 不能在:patch 补丁合成进程,发起补丁的合成请求 |
-5 | 补丁不支持 N 之前的 JIT 模式 |
-6 | 补丁已经应用 |
-7 | 补丁超过重试次数 |
-21 | ROM 空间不足 |
-22 | 内存 heap 不足 |
-23 | Crash 次数超出限制 |
-24 | 未知异常 |