Android 热修复方案--阿里百川HotFix

news/2024/12/21 21:06:57/

概述

我们都知道一旦我们的应用被发布到各大平台上面之后修复bug是一件很麻烦的事情,如果要重新发布审核周期之长,用户肯定不接受,虽然也可以在应用中自检更新,但是一个小小的bug动辄就更新应用实在是大材小用,但是不更新用户怎么办?这时就有人就想到了热修复方案,热修复的方案有很多,但是找到一个相对比较优秀的方案就显得尤为重要了,下图是各大方案的对比:
这里写图片描述(图片来源:阿里百川官网)
tip:
阿里百川地址:http://baichuan.taobao.com/product/hotfix.htm
快速集成地址:
http://baichuan.taobao.com/docs/doc.htm?spm=a3c0d.7629140.0.0.I8PCvL&treeId=234&articleId=106531&docType=1

Part1准备工作

2.1 android studio集成方式

gradle远程仓库依赖, 打开项目找到app的build.gradle文件,添加如下配置:
添加maven仓库地址

repositories {maven {url "http://repo.baichuan-android.taobao.com/content/groups/BaichuanRepositories"}
}

添加gradle坐标版本依赖:

dependencies {compile 'com.taobao.android:alisdk-hotfix:2.0.9'
}

如果远程仓库访问失败那么可以选择本地库 这是HotFix集成的SDK下载链接解压,粘贴到libs目录下即可。然后更新模块下的build.gradle文件

2.2 eclipse集成方式

  • 下载sophix-sdk-2.0.9.zip,解压出alisdk-hotfix-2.0.9.aar文件后再解压这- 个aar文件
  • 复制解压文件jni目录下的libsophix.so到自己的jni目录下, eclipse jni目录一般指的就是项目libs目录
  • 复制utdid4all-1.1.5.3_proguard.jar和alicloud-android-utils-1.0.1.jar文件到项目libs目录下
  • 重命名classes.jar为alisdk-hotfix-2.0.9.jar并复制到项目libs目录下
  • 合并AndroidManifest.xml文件中的内容到本项目AndroidManifest.xml文件
  • 编译期间报utdid类重复异常, 那么步骤2中添加的utdid4all-1.1.5.3_proguard.jar从项目libs目录移除即可

2.3 权限说明

<! -- 网络权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<! -- 外部存储读权限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

tip:6.0以及以上的设备注意权限问题

2.4 配置AndroidManifest文件

        <meta-dataandroid:name="com.taobao.android.hotfix.IDSECRET"android:value="App ID" /><meta-dataandroid:name="com.taobao.android.hotfix.APPSECRET"android:value="App Secret" /><meta-dataandroid:name="com.taobao.android.hotfix.RSASECRET"android:value="RSA密钥" />

RSA密钥

2.5 混淆设置

#基线包使用,生成mapping.txt
-printmapping mapping.txt
#生成的mapping.txt在app/buidl/outputs/mapping/release路径下,移动到/app路径下 
#修复后的项目使用,保证混淆结果一致
#-applymapping mapping.txt
#hotfix
-keep class com.taobao.sophix.**{*;}
-keep class com.ta.utdid2.device.**{*;}

2.6 特别申明

检查当前项目结构是否存在jniLibs,如果没有将不需要做任何操作。 如果有就需要添加armeabi-v7a/arm64-v8a目录,请下载SDK地址解压放入

SDK接口使用

3.1 接入范例

尽量在Application进行初始化操作,查询补丁也在初始化之后就操作。

SophixManager.getInstance().setContext(this).setAppVersion(appVersion).setAesKey(null).setEnableDebug(true).setPatchLoadStatusStub(new PatchLoadStatusListener() {@Overridepublic void onLoad(final int mode, final int code, final String info, final int handlePatchVersion) {// 补丁加载回调通知if (code == PatchStatus.CODE_LOAD_SUCCESS) {// 表明补丁加载成功} else if (code == PatchStatus.CODE_LOAD_RELAUNCH) {// 表明新补丁生效需要重启. 开发者可提示用户或者强制重启;// 建议: 用户可以监听进入后台事件, 然后应用自杀} else if (code == PatchStatus.CODE_LOAD_FAIL) {// 内部引擎异常, 推荐此时清空本地补丁, 防止失败补丁重复加载// SophixManager.getInstance().cleanPatches();} else {// 其它错误信息, 查看PatchStatus类说明}}}).initialize();
SophixManager.getInstance().queryAndLoadNewPatch();

3.2 接口说明

3.2.1 queryAndLoadNewPatch方法

该方法主要用于查询服务器是否有新的可用补丁. SDK内部限制连续两次queryAndLoadNewPatch()方法调用不能短于3s, 否则的话就会报code:19的错误码. 如果查询到可用的话, 首先下载补丁到本地, 然后

应用原本没有补丁, 那么如果当前应用的补丁是热补丁, 那么会立刻加载(不管是冷补丁还是热补丁). 如果当前应用的补丁是冷补丁, 那么需要重启生效.
应用已经存在一个补丁, 首先会把之前的补丁文件删除, 然后不立刻加载, 而是等待下次应用重启再加载该补丁

补丁在后台发布之后, 并不会主动下行推送到客户端, 需要手动调用queryAndLoadNewPatch方法查询后台补丁是否可用.

只会下载补丁版本号比当前应用存在的补丁版本号高的补丁, 比如当前应用已经下载了补丁版本号为5的补丁, 那么只有后台发布的补丁版本号>5才会重新下载.

3.2.2 cleanPatches()方法

清除本地补丁

3.2.3 PatchLoadStatusListener接口

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

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

这里列举几个常见的code码说明, 详情查看SDK中PatchStatus类的代码,其中有具体说明

  • code: 1 补丁加载成功
  • code: 6 服务端没有最新可用的补丁
  • code: 11 RSASECRET错误,官网中的密钥是否正确请检查
  • code: 12 当前应用已经存在一个旧补丁, 应用重启尝试加载新补丁
  • code: 13 补丁加载失败, 导致的原因很多种, 比如UnsatisfiedLinkError等异常, 此时应该严格检查logcat异常日志
  • code: 16 APPSECRET错误,官网中的密钥是否正确请检查
  • code: 18 一键清除补丁
  • code: 19 连续两次queryAndLoadNewPatch()方法调用不能短于3s

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

Part2 生成patch补丁

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

一般我都是利用工具来生成补丁的,图形工具使用方便简单。

这里写图片描述

这里写图片描述
也可以签名哦!

利用cmd生成

  • -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: 证书别名的密码. 可选
  • -y, -aes_key: 自定义aes秘钥, 必须是16位. 可选
  • -l, -filterClassFilePath:本地的白名单类列表文件的路径,放进去的类不会再计算patch,文件格式: 一行一个类名. 可选

示例

java -jar BCFixPatchTools-1.3.0.jar -c patch -s old.apk -f new.apk -w patch-out -k test.keystore -p test123 -a test123 -e test123 -y 1234567891234567 -l filterClass.txt

调试工具使用说明

详情见

Android接入常见问题归纳

详情见

大功告成

参考:

阿里百川官网

阿里百川快速集成


http://www.ppmy.cn/news/297915.html

相关文章

强化学习的A3C算法应用(训练Atari游戏)

A3C算法的全称是Asynchronous Advantage Actor-Critic&#xff0c;异步优势执行者/评论者算法。这个算法和优势执行者/评论者算法的区别在于&#xff0c;在执行过程中不是每一步都更新参数&#xff0c;而是在回合结束后用整个轨迹进行更新。因此可以让多个Worker来进行轨迹的搜…

【强化学习】A3C原理

先解释一下什么叫异步、什么叫并发&#xff1a; **异步&#xff1a;**和同步相对&#xff0c;同步是顺序执行&#xff0c;而异步是彼此独立&#xff0c;在等待某个事件的过程中继续做自己的事&#xff0c;不要等待这一事件完成后再工作。线程是实现异步的一个方式&#xff0c;异…

java实现手机尾号评分

30年的改革开放&#xff0c;给中国带来了翻天覆地的变化。2011全年中国手机产量约为11.72亿部。手机已经成为百姓的基本日用品&#xff01; 给手机选个好听又好记的号码可能是许多人的心愿。但号源有限&#xff0c;只能辅以有偿选号的方法了。 这个程序的目的就是&#xff1a…

基于RK3288 平台 Simple card声卡添加及调试

基于RK3288 平台 Simple card声卡添加及调试Simple card即简单通用的machine driver&#xff0c; 如果simple-card框架足够满足需求&#xff0c;建议优先使用simple card框架&#xff0c;简单&#xff0c;方便&#xff0c;且易用.一、 添加声卡 1. 添加codec driver&#xff0c…

M1卡操作

原文传送门&#xff1a;https://www.cnblogs.com/ivantang/p/3904025.html M1卡介绍 本文整理自网络。 M1卡是指菲利浦下属子公司恩智浦出品的芯片缩写&#xff0c;全称为NXP Mifare1系列&#xff0c;常用的有S50及S70两种型号&#xff0c;目前都有国产芯片与其兼容&#xff0…

SIM卡在手机中的主要作用

SIM卡在手机中的主要作用 SIM卡作为智能卡的一种&#xff0c;其作用依旧被限定在数据存储和加解密处理方面。 在移动通讯初期没有SIM卡的概念&#xff0c;当时采用的是机号一体的方式&#xff08;后来对于CDMA技术而言出现了机卡分离和机卡一体的说法&#xff0c;早期还没有SIM…

Python3网络爬虫(十三):王者荣耀那些事!(Fiddler之手机APP爬取)

转载请注明作者和出处&#xff1a;http://blog.csdn.net/c406495762 运行平台&#xff1a; Windows Python版本&#xff1a; Python3.x IDE&#xff1a; Sublime text3 前言实战背景准备工作 什么是Fiddler手机APP抓包设置 Fiddler设置安全证书下载安全证书安装局域网设置Fi…

hmcl手机版_hmcl启动器手机版下载-hmcl启动器安卓版下载mod附教程_易玩网

hmcl启动器是一款专门为我的世界打造的可以加入运行操作的辅助工具。有了hmcl启动器&#xff0c;用户在运行我的世界这款游戏的时候可以体验更加的稳定&#xff0c;有需要的小伙伴们可以下载hmcl启动器前来体验一番哦&#xff0c;非常优秀的启动器。 hmcl启动器使用教程 游戏的…