上传补丁前您需先生成补丁包,本文介绍如何使用我方提供的打包工具生成补丁包。
补丁版本说明
补丁是针对客户端具体某个版本的,补丁和具体版本绑定。
示例:应用当前版本号是1.1.0,那么只能在后台查询到1.1.0版本对应发布的补丁,而查询不到之前1.0.0旧版本发布的补丁。
针对某个具体版本发布的新补丁,必须包含所有的bugfix,而不能依赖补丁递增修复的方式,因为应用仅可能加载一个补丁。
示例:针对1.0.0版本在后台发布了一个补丁版本号为1的补丁修复了bug1,然后发现此时针对这个版本补丁1修复的不完全,代码还有bug2,在后台重新发布一个补丁版本号为2的补丁,那么此时补丁2就必须同时包含bug1和bug2的修复;如果只包含bug2的修复,bug1的修复就会失效。
打包工具下载
补丁包生成需要使用打补丁工具SophixPatchTool,如还未下载打补丁工具,请前往下载Android打包工具。
打包工具下载地址如下:
我们提供了Windows、macOS和Linux的打包工具,需要安装Java环境且在JDK7或以上才能正常使用。
使用打包工具打包
本操作步骤以macOS打包工具为例介绍打补丁包的操作步骤。
双击打开打包工具,进入打包工具主对话框。
参数
说明
旧包
必填,选择基线包路径(有问题的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!
开始生成补丁。
上传新旧包,进行设置后单击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下的补丁工具若出现一打开就崩溃的情况,请将补丁工具移到“应用程序”目录下即可。