如何使用阿里百川hotfix热修复功能(三)

来源:互联网 发布:vb安装未响应 编辑:程序博客网 时间:2024/06/05 04:14
[+]

     这章我们进行patch补丁操作,参考 :  如何使用阿里百川hotfix热修复功能(一) 如何使用阿里百川hotfix热修复功能(二) 

    1.下载打包工具

patch补丁包生成需要使用到打补丁工具BCFixPatchTools-1.3.0.jar, 如还未下载打包工具,请前往文档SDK下载&版本更新记录下载Android打包工具,

注意:

*该工具需要在JDK7或以上才能正常使用

*查看补丁工具使用说明   输入以下命令:           

Java -jar BCFixPatchTools-1.3.0.jar -cmd help


2.window用户使用cmd命令查看帮助,

BCFixPatchTools-1.3.0.jar 目录下,输入:

java -jar BCFixPatchTools-1.3.0.jar -cmd help

可以看到对应的window,Linux ,mac生成方法:





3.生成补丁

我们需要根据输入命令生成补丁,并把补丁在阿里百川后台发布

这里,因为我的电脑是window7,所以使用window的方法,

3.1 先生成一个签名的apk(i_zhiyuan_uc-1.6.apk)有问题的apk,保存在自己熟悉的路径;

3.2 修改过后,再生成一个签名的apk(i_zhiyuan_huawei-1.6.apk)修改过后没有问题的apk,并保存在自己熟悉的路径;

运行以下命令:

java -jar BCFixPatchTools-1.3.0.jar -c patch -s E:\app_android\APP\app\i_yuan_uc-1.6.apk -f E:\app_android\APP\app\i_yuan_huawei-1.6.apk -w patch-out -k E:\Android\keyStore\Key.store -p 123456 -a 123456 -e appkey -l E:\hotfix_app\patch-out\filterClass.txt


参数说明:

  • -c, -cmd: 值为patch: 打补丁命令 值为help: 查看使用说明
  • -s, -src_apk:填写本地的原始APK(有问题的APK). 必选
  • -f, -fixed_apk:已经修复过该问题APK. 必选
  • -w, -wp:输出patch的路径, 最后如果打补丁成功会在wp目录下自动创建的hotfix-working目录生成baichuan-hotfix-patch.jar补丁文件. 必选
  • -k, -sign_file_url:本地的签名文件的路径,不输入则不做签名. 可选
  • -p, -sign_file_pass: 证书文件的密码, 可选
  • -a, -sign_alias: 证书的别名. 可选
  • -e, -sign_alias_pass: 证书别名的密码. 可选
  • -l, -filterClassFilePath:本地的白名单类列表文件的路径,放进去的类不会再计算patch,文件格式: 一行一个类名. 可选





add modified class表示的是要修复的类, 




这样就生成了补丁(baichuan-hotfix-patch.jar补丁文件在patch-out/hotfix-working目录下);

                                 


注意:这里使用了1.3的打补丁方法,如果使用1.2的,不支持keystore的签名方式,若使用了,请参考以下方法修改:


把这个未签名补丁包重命名为baichuan-hotfix-patch-unsigned.jar

我们使用(JDK默认签名工具jarsigner):输入以下命令:

jarsigner -keystore E:\app/keystore/app.store -storepass 12345 -keypass 12345 -signedjar baichuan-hotfix-patch.jar baichuan-hotfix-patch-unsigned.jar appkey

那么在当前目录下就会生成签名后的baichuan-hotfix-patch.jar,

然后我们就可以使用这个签名后的补丁包上传到服务器即可. 新增版本:



4.上传补丁

将生成的补丁上传到百川后台,这样就完成上传工作了。






5.我们可以使用官方提供的apk进行测试,连接应用并扫描后,看看返回的code参数,







  • mode: 补丁模式, 0:正常请求模式 1:扫码模式 2:本地补丁模式
  • code: 补丁加载状态码, 详情查看PatchStatusCode类说明
  • info: 补丁加载详细说明, 详情查看PatchStatusCode类说明
  • handlePatchVersion: 当前处理的补丁版本号, 0:无 -1:本地补丁 其它:后台补丁

这里列举几个常见的code码说明,

  • code: 1 补丁加载成功
  • code: 6 服务端没有最新可用的补丁
  • code: 12 当前应用已经存在一个旧补丁, 应用重启尝试加载新补丁
  • code: 13 补丁加载失败, 导致的原因很多种, 比如UnsatisfiedLinkError等异常, 此时应该严格检查logcat异常日志
一般code为9说明有新的补丁,并加载成功,此时重新打开自己的应用,看看是否已经改变,并log对比返回的code参数。
如果已经解决了,说明你已经完成啦,这样,不用发布新版本,不用更新,是不是神奇?


ps:
1、在生成补丁的时候要注意参数之间的空格,如果不熟练可以多尝试几次。
2、由于官方正在公测中,目前阿里百川还未支持的:
  • 暂时不支持新增方法, 新增字段, 但是支持新增类, 所以需要新增方法/字段可以通过新增类来实现
  • 不支持资源修复, so修复
  • 三星note3,S4,S5的5.0设备以及X86设备不支持(点击查看具体支持的机型)
  • 参数包括long,double,float基本类型的方法不能被patch, 不包括基本类型封装类Long,Double,Float
  • 被反射调用的非静态方法不能被patch
  • 参数超过8的方法不能被patch
  • 构造方法不能被patch
  • 使用注解的方法视情况而定是否支持被patch(详细说明参考Demo工程BaseBug.md文件中关于注解的说明)
  • 泛型参数的方法如果patch存在兼容性问题
  • 在打包的时候偶尔会存在两次打包内部类的名字不一致问题,这种情况会导致打AndFix打包失败,暂时无解
  • 我们建议不要通过GooglePlay发布带热修复SDK的APP,存在政策风险
  • 暂不支持android7.0
可能会遇其他问题:官方问题解决方案
查看hotfix解决方案、

社区论坛:https://baichuan.bbs.taobao.com/list.html


转载:http://blog.csdn.net/wsdbssxq/article/details/53288257
0 0