全部产品
阿里云办公

调试补丁

更新时间:2018-10-16 17:42:39

调试补丁

调试工具用于patch正式发布前的调试环节,目前有两种测试方式:

  • 扫码二维码方式,将刚刚上传到后台的补丁通过扫描二维码下载到本地,尝试加载补丁;
  • 应用本地补丁方式,传入本地补丁的绝对路径,尝试加载补丁。此方式必须确保Sophix初始化时setEnableDebug为true。出于安全考虑,我们禁止在setEnableDebug为false的包上加载本地补丁,因此setEnableDebug为false的包需要以二维码方式进行验证。

如还未下载调试工具,请下载Android调试工具,地址如下

调试工具地址:http://ams-hotfix-repo.oss-cn-shanghai.aliyuncs.com/hotfix_debug_tool-release.apk

连接测试的应用

  • 在编辑框内输入要进行测试的应用包名,确认输入无误后点击连接应用按钮;
  • 工具与测试的应用建立连接,连接成功后输出应用的信息;aidl方式连接原应用,所以在部分机型上可能导致失败,比如MIUI最新系统上,默认禁用了跨应用aidl,MIUI上可以设置取消这个限制,其它系统类似处理。

应用补丁

扫描二维码方式

  • 打补丁工具生成的sophix-patch.jar补丁包上传到hotfix产品后台;
  • 点击扫描二维码按钮,打开二维码页面,将二维码置于扫描框内;
  • 扫描完成以后返回,输出扫描到的patch地址,向应用发出拉取patch的请求;
  • patch拉取和加载状态在输出台输出,当显示下载和加载成功,打开应用进行检查。¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨

应用本地补丁方式

  • 打补丁工具生成的sophix-patch.jar补丁包推送到本地存储任何一个目录下;
  • 应用本地补丁按钮上面的输入框输入补丁在手机存储中的绝对路径;
  • 补丁加载状态在输出台输出,当显示下载和加载成功,打开应用进行检查。

断开连接的应用

点击断开应用连接按钮,将断开与应用的连接。调试到此结束。

清除通知内容

当输出台显示信息过多时,可点击清除下列通知内容按钮对通知信息进行清除。

使用示例

使用示例

  • 下载demo工程后, 安装并打开old.apk, 安装调试工具;
  • 输入“com.taobao.hotfix.demo”包名, 连接应用, 提示连接成功;
  • 应用本地补丁示例

    • 补丁工具生成的补丁包sophix-patch.jar推送到本地的/sdcard/Download目录, 然后输入该补丁包的绝对路径, 点击应用本地补丁按钮;
    • Mode:2 表示本地补丁模式, Code:1 表示加载成功 HandlePatchVersion:-1 表示本地补丁
  • 扫描二维码示例

    • 补丁工具生成的补丁包sophix-patch.jar上传到hotfix控制台;
    • 点击扫描二维码按钮扫后台补丁二维码;
    • Mode:1 表示扫码模式, Code:12 表示应用当前已经有一个补丁, 所以新补丁不会立刻加载需要等下一次重启加载, HandlePatchVersion:89 表示后台拉取下来的补丁版本89。
  • 常见错误码整理

参见PatchLoadStatusListener接口说明

该接口需要自行实现并传入initialize方法中, 补丁加载状态会回调给该接口, 参数说明如下:

  • mode: 无实际意义, 为了兼容老版本, 默认始终为0
  • code: 补丁加载状态码, 详情查看PatchStatus类说明
  • info: 补丁加载详细说明
  • handlePatchVersion: 当前处理的补丁版本号, 0:无 -1:本地补丁 其它:后台补丁

常见状态码说明如下: 一个补丁的加载一般分为三个阶段: 查询/预加载/加载

  1. //兼容老版本的code说明
  2. int CODE_LOAD_SUCCESS = 1;//加载阶段, 成功
  3. int CODE_ERR_INBLACKLIST = 4;//加载阶段, 失败设备不支持
  4. int CODE_REQ_NOUPDATE = 6;//查询阶段, 没有发布新补丁
  5. int CODE_REQ_NOTNEWEST = 7;//查询阶段, 补丁不是最新的
  6. int CODE_DOWNLOAD_SUCCESS = 9;//查询阶段, 补丁下载成功
  7. int CODE_DOWNLOAD_BROKEN = 10;//查询阶段, 补丁文件损坏下载失败
  8. int CODE_UNZIP_FAIL = 11;//查询阶段, 补丁解密失败
  9. int CODE_LOAD_RELAUNCH = 12;//预加载阶段, 需要重启
  10. int CODE_REQ_APPIDERR = 15;//查询阶段, appid异常
  11. int CODE_REQ_SIGNERR = 16;//查询阶段, 签名异常
  12. int CODE_REQ_UNAVAIABLE = 17;//查询阶段, 系统无效
  13. int CODE_REQ_SYSTEMERR = 22;//查询阶段, 系统异常
  14. int CODE_REQ_CLEARPATCH = 18;//查询阶段, 一键清除补丁
  15. int CODE_PATCH_INVAILD = 20;//加载阶段, 补丁格式非法
  16. //查询阶段的code说明
  17. int CODE_QUERY_UNDEFINED = 31;//未定义异常
  18. int CODE_QUERY_CONNECT = 32;//连接异常
  19. int CODE_QUERY_STREAM = 33;//流异常
  20. int CODE_QUERY_EMPTY = 34;//请求空异常
  21. int CODE_QUERY_BROKEN = 35;//请求完整性校验失败异常
  22. int CODE_QUERY_PARSE = 36;//请求解析异常
  23. int CODE_QUERY_LACK = 37;//请求缺少必要参数异常
  24. //预加载阶段的code说明
  25. int CODE_PRELOAD_SUCCESS = 100;//预加载成功
  26. int CODE_PRELOAD_UNDEFINED = 101;//未定义异常
  27. int CODE_PRELOAD_HANDLE_DEX = 102;//dex加载异常
  28. int CODE_PRELOAD_NOT_ZIP_FORMAT = 103;//基线dex非zip格式异常
  29. int CODE_PRELOAD_REMOVE_BASEDEX = 105;//基线dex处理异常
  30. //加载阶段的code说明 分三部分dex加载, resource加载, lib加载
  31. //dex加载
  32. int CODE_LOAD_UNDEFINED = 71;//未定义异常
  33. int CODE_LOAD_AES_DECRYPT = 72;//aes对称解密异常
  34. int CODE_LOAD_MFITEM = 73;//补丁SOPHIX.MF文件解析异常
  35. int CODE_LOAD_COPY_FILE = 74;//补丁拷贝异常
  36. int CODE_LOAD_SIGNATURE = 75;//补丁签名校验异常
  37. int CODE_LOAD_SOPHIX_VERSION = 76;//补丁和补丁工具版本不一致异常
  38. int CODE_LOAD_NOT_ZIP_FORMAT = 77;//补丁zip解析异常
  39. int CODE_LOAD_DELETE_OPT = 80;//删除无效odex文件异常
  40. int CODE_LOAD_HANDLE_DEX = 81;//加载dex异常
  41. // 反射调用异常
  42. int CODE_LOAD_FIND_CLASS = 82;
  43. int CODE_LOAD_FIND_CONSTRUCTOR = 83;
  44. int CODE_LOAD_FIND_METHOD = 84;
  45. int CODE_LOAD_FIND_FIELD = 85;
  46. int CODE_LOAD_ILLEGAL_ACCESS = 86;
  47. //resource加载
  48. public static final int CODE_LOAD_RES_ADDASSERTPATH = 123;//新增资源补丁包异常
  49. //lib加载
  50. int CODE_LOAD_LIB_UNDEFINED = 131;//未定义异常
  51. int CODE_LOAD_LIB_CPUABIS = 132;//获取primaryCpuAbis异常
  52. int CODE_LOAD_LIB_JSON = 133;//json格式异常
  53. int CODE_LOAD_LIB_LOST = 134;//lib库不完整异常
  54. int CODE_LOAD_LIB_UNZIP = 135;//解压异常
  55. int CODE_LOAD_LIB_INJECT = 136;//注入异常


其它问题,技术支持参见:地址