生成补丁

上传补丁前您需先生成补丁包,本文介绍如何使用我方提供的打包工具生成补丁包。

补丁版本说明

  1. 补丁是针对客户端具体某个版本的,补丁和具体版本绑定。

    示例:应用当前版本号是1.1.0,那么只能在后台查询到1.1.0版本对应发布的补丁,而查询不到之前1.0.0旧版本发布的补丁。

  2. 针对某个具体版本发布的新补丁,必须包含所有的bugfix,而不能依赖补丁递增修复的方式,因为应用仅可能加载一个补丁。

    示例:针对1.0.0版本在后台发布了一个补丁版本号为1的补丁修复了bug1,然后发现此时针对这个版本补丁1修复的不完全,代码还有bug2,在后台重新发布一个补丁版本号为2的补丁,那么此时补丁2就必须同时包含bug1和bug2的修复;如果只包含bug2的修复,bug1的修复就会失效。

打包工具下载

补丁包生成需要使用打补丁工具SophixPatchTool,如还未下载打补丁工具,请前往下载Android打包工具。

打包工具下载地址如下:

说明

我们提供了Windows、macOS和Linux的打包工具,需要安装Java环境且在JDK7或以上才能正常使用。

使用打包工具打包

说明

本操作步骤以macOS打包工具为例介绍打补丁包的操作步骤。

  1. 双击打开打包工具,进入打包工具主对话框。

    图片替换文本

    参数

    说明

    旧包

    必填,选择基线包路径(有问题的APK)。

    新包

    必填,选择新包路径(修复过该问题APK)。

    日志

    打开日志输出窗口。

    设置

    • 补丁输出路径:必填,指定生成补丁之后补丁的存放位置,必须是已存在的目录。

    • Key Store Path:选填,本地的签名文件的路径,不输入则不做签名。目前只支持jks的签名文件。

    • Key Store Password:选填,证书文件的密码。

    • Key Alias:选填,Key的别名。

    • Key Password:选填,Key的密码。

    • AES Key:选填,自定义aes密钥,必须是16位数字或字母的组合。必须与setAesKey中设置的密钥一致。

    • Filter Class File:选填,本地的白名单类列表文件的路径,放进去的类不会再计算patch,文件格式:一行一个类名。

    高级

    • 强制冷启动:勾选的话强制生成补丁包为需要冷启动才能修复的格式。默认不选的话,工具会根据代码变更情况自动选择即时热替换或者冷启动修复。

    • 不比较资源:打补丁时不比较资源的变化。

    • 不比较SO库:打补丁时不比较SO库的变化。

    • 检查初始化:检查初始化写法是否正确。

    • 快速打包:加快补丁生成速度。

    • 优化资源补丁:压缩补丁资源的大小。

    GO!

    开始生成补丁。

  2. 上传新旧包,进行设置后单击GO

使用命令行方式打包

说明

打包工具SophixPatchTool 3.1.6版本之后支持命令行的方式生成补丁包。

采用命令行方式前,需要准备以下JSON格式的配置文件:

{
    "AesKey": "",
    "ClassFilterFilePath": "",
    "KeyAlias": "",
    "KeyPassword": "",
    "KeyStorePassword": "",
    "KeyStorePath": "",
    "NewApkPath": "/path/to/new.apk",
    "OldApkPath": "/path/to/old.apk",
    "OutputDirPath": "/path/to/output/dir/",
    "isForceColdFix": false,
    "isIgnoreRes": false,
    "isIgnoreSo": false
}

其中,必填的项目是NewApkPath、OldApkPath、OutputDirPath。其他的配置与图形界面所对应项一致。然后把它存为profiles.json文件即可。

接下来,可以用下面的命令进行打包:

SophixPatchTool在windows平台下为SophixPatchTool.exe,mac平台下为SophixPatchTool.app/Contents/macOS/SophixPatchTool

SophixPatchTool --profiles profiles.json

执行完毕后就可以在OutputDirPath下输出补丁文件了。

注意事项

  • 支持多渠道包仅选用某个渠道包的补丁,只需要保证变化相同即可,不过对于不同的基线包最好进行全面的测试。

  • 发布前请严格按照补丁发布推荐流程进行,以保证补丁包能够正常在所有Android版本的机型上生效。

  • mac下的补丁工具若出现一打开就崩溃的情况,请将补丁工具移到“应用程序”目录下即可。

常见问题