最近项目需要热修复功能,试了andfix,tinker和hotfix 还是觉得hotfix 比较适合自己的项目。

不废话

正片开始。

1.热修复控制台地址

注册一个账号并登陆开通授权。

进入控制台。

在产品列表中 添加项目

编辑完成后 进入该产品的热修复控制台,并添加应用(Android)

点击创建

事后.jpg

down下来这个叫aliyun-emas-services.json的文件 自己保存 里面有所有key的信息。

其中 红框的这组数据很重要。

基本上前期的准备工作已经完成。

接下来开始创建项目。

在build.gradle中增加 仓库 和引用

repositories { maven { url "http://maven.aliyun.com/nexus/content/repositories/releases" } }
compile 'com.aliyun.ams:alicloud-android-hotfix:3.2.3'

注意该文件中的 versionName 版本号名称 跟后续补丁版本需要匹配。


Androidmanifest.xml 添加权限

  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.INTERNET"/>

添加meta

<!--热修復meta-data-->
<meta-dataandroid:name="com.taobao.android.hotfix.IDSECRET"android:value="" />
<meta-dataandroid:name="com.taobao.android.hotfix.APPSECRET" android:value="" />
<meta-dataandroid:name="com.taobao.android.hotfix.RSASECRET" android:value="" />
IDSECRET 
APPSECRET
RSASECRET

这三个与上面json文件对应如下:

IDSECRET= hotfix.idSecret

APPSECRET=emas.appSecret

RSASECRET=hotfix.rsaSecret

配置完成 接下来创建application 类

在该类的

attachBaseContext中 初始化热修复的init加载
private void initSophix() {//获取版本号String appVersion = "1.0";try {appVersion = this.getPackageManager().getPackageInfo(this.getPackageName(), 0).versionName;} catch (Exception e) {}final SophixManager instance = SophixManager.getInstance();Log.e("aaaaaa", "版本号= " + appVersion);instance.setContext(this).setAppVersion(appVersion).setSecretMetaData(null, null, null) //该类是替换META 标签中的 IDSECRET APPSECRET RSASECRET.setEnableDebug(true).setEnableFullLog().setPatchLoadStatusStub(new PatchLoadStatusListener() {@Overridepublic void onLoad(final int mode, final int code, final String info, final int handlePatchVersion) {if (code == PatchStatus.CODE_LOAD_SUCCESS) {Log.e(TAG, "补丁读取完毕了");} else if (code == PatchStatus.CODE_LOAD_RELAUNCH) {Log.e(TAG, "补丁修复完毕了");//修复完毕后 可以做一些重启 或者提示的动作}else{Log.e(TAG, "\n code= " + code);Log.e(TAG, "mode= " + mode);Log.e(TAG, "info= " + info);Log.e(TAG, "handlePatchVersion= " + handlePatchVersion);}}}).initialize();}

我是在项目启动的时候 检查补丁 然后更新修复 所以我放在里application中的oncreate方法里执行,如果用更新按钮也是可以的。

 @Overridepublic void onCreate() {super.onCreate();SophixManager.getInstance().queryAndLoadNewPatch();}

基本上配置就完成了。

接下来就测试打包数据

旧版本APK 和 修正过的APK 各打包1个(release版本) 。 (随便改个文字什么的就行。 )

下载打包工具:

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

Mac版本打包工具地址:http://ams-hotfix-repo.oss-cn-shanghai.aliyuncs.com/SophixPatchTool_macos.zip

Windows版本打包工具地址:http://ams-hotfix-repo.oss-cn-shanghai.aliyuncs.com/SophixPatchTool_windows.zip

Linux版本打包工具地址:http://ams-hotfix-repo.oss-cn-shanghai.aliyuncs.com/SophixPatchTool_linux.zip

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

下载完成后运行 SophixPatchTool.exe

其中选择 旧包和新包

在设置中 设置中设置输出路劲 签名key

其他的看着设置吧 我是默认设置的

.

然后直接点GO

然后得到一个sophix-patch.jar的补丁文件  这个就是修正后的修复文件(不要改名,改名上传不了)。

然后进入阿里开发后台管理平台 在菜单里选择移动热修复 → 补丁管理

先添加版本:

该版本跟自己的build.gradle 中的

versionName 版本号一致。

添加完应用版本后  开始上传补丁(sophix-patch.jar)

确定后在列表中就可以看到上传的补丁了

现在还并没有完成任务,接下来进入详情页

在左下角 点击新建发布

PS : 右侧其实也可以用本地包 测试本地修复 (二维码方式,有兴趣可以试试)

选择全量发布 确定。

当列表发布中后  老的APK应用就可以自动下载补丁更新了。

如果测试中log中 会有部分提示编码,可以对照下表 检查一下自己问题出在哪里 再重新调整即可

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

完事 收工。

阿里hotfix热修复自动更新,了解一下。相关推荐

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

    这章我们进行patch补丁操作,参考 :  如何使用阿里百川hotfix热修复功能(一) 如何使用阿里百川hotfix热修复功能(二) 1.下载打包工具 patch补丁包生成需要使用到打补丁工具BCF ...

  2. 阿里云热修复sophix详解

    现在网上有几种常用的app热修复技术,个人感觉阿里云热修复操作比较简单,主要几个步骤,创建app---下载sdk---集成(AS和eclipse)---生成补丁---发布补丁(可以本地调试).下面详细 ...

  3. 深入解析阿里Android热修复技术原理

    前言:本文框架 什么是热修复? 热修复框架分类 技术原理及特点 Tinker框架解析 各框架对比图 总结 通过阅读本文,你会对热修复技术有更深的认知,本文会列出各类框架的优缺点以及技术原理,文章末尾简 ...

  4. 阿里SopHix热修复框架

    2015年以来,Android开发领域里对热修复技术的讨论和分享越来越多,同时也出现了一些不同的解决方案,如QQ空间补丁方案.阿里AndFix以及微信Tinker(Bugly sdk也集成Tikner ...

  5. 阿里移动热修复Sophix使用体验

    2019独角兽企业重金招聘Python工程师标准>>> Android 热修复是个热门技术,各大公司都推出了自己的热修复框架,阿里也推出了全新的Sophix,我决定写个Demo 测试 ...

  6. 阿里Sophix热修复体验

    前言: 之前看了关于热修复的相关文章,想找个代码试试,奈何感觉使用起来有些麻烦,之后就不了了之.看到了阿里的Sophix,嗯,感觉不那么复杂,步骤简单,就着手自己敲了敲.主要记录下自己找了很久,费时步 ...

  7. 动态加载、插件化、热部署、热修复(更新)知识汇总

    开发中经常能听到动态加载,插件化,热部署等词,动态加载到底是何方神物,它能实现什么功能,实现原理又如何?动态加载和插件化.热部署又有着什么样的联系呢?下面我们一起来学习吧. 1. 基本知识 1.1 动 ...

  8. HotFix热修复示例

    项目地址:https://github.com/tomyZhou/HotFixDemo 这几天想学习一下HotFix,但我觉得官方给的例子太复杂,作为新手,我只想一个最简单最直观的例子. 在下愚钝,开 ...

  9. idea spring boot中热部署 自动更新不用重启服务

    近来在使用idea做springboot的项目,但是发现每次修改之后我都需要重新将项目关闭再开启,这样比较繁琐,发现通过热部署的方式让我们可以一边修改我们的项目,然后在页面中直接通过刷新展示出来 sp ...

  10. Git之hotfix热修复分支

    1.假设你正在开发一个新功能, 需要新建一个new分支并切换: git checkout -b new 等价于 git branch new git checkout new 然后在这个new分支上已 ...

最新文章

  1. Linux 基础知识----shell
  2. 30分钟带你熟练性能优化的那点儿事儿(案例说明)
  3. 文献记录(part78)--Structure-Constrained Low-Rank Representation
  4. AssetBundle Workflow
  5. MII/MDIO接口详解(转)
  6. python中下划线开头的命名_Python标识符规则 行与缩进 注释
  7. vue 内存溢出问题解决
  8. Ubuntu1404+Django1.9+Apache2.4部署配置1安装
  9. WinMM.dll 函数汇总
  10. go 变量大写_和我一起学Go系列:Go基本语法概览
  11. HTML5期末大作业:商城后台网站设计——网站商城后台通用模板(30页) 大学生后台模板网页作品商城网页设计作业模板 学生网页制作源代码下载
  12. 大神详解开源 BUFF 增益攻略丨直播
  13. Ehcache配置详解及CacheManager使用
  14. Android扫描车牌,车牌拍照识别SDK
  15. LeetCode 805数组切割题目
  16. 小桥加加的英语学习博客
  17. Kali Linux 下载、引导、安装
  18. tensorflow入门实战----VGG16完成猫狗分类
  19. 2006-2020年10月各类型国债利率
  20. 学术不端网查重靠谱吗_学术不端网查重怎么样鉴别是否真品?

热门文章

  1. html图片边框的颜色,css图片的边框怎么设置颜色?
  2. parse_url() vul
  3. HbuilderX开发App调用手机支付宝支付
  4. 软件项目管理EAC、ETC的计算
  5. Redis中的TTL
  6. window平台编译draco库
  7. 基于FBX SDK的FBX模型解析与加载
  8. Ubuntu设置开机启动项目
  9. unity3d 坦克大战实战
  10. 今晚7:30|AI TIME青年学者——英国伯明翰大学计算机学院讲师来啦!