Android热修复(HotFix)实战
线上的BUG一直是程序员头疼的问题。有时候仅仅是因为几行的代码,就能让你的用户损失严重。谷歌在Android Studio 加入了Insttan Run 机制。通过Apk动态加载的技术实现了应用非安装而进行代码层的改变。之后QQ空间团队的补丁开始了热更新的浪潮。用户不需要通过手动操作,进行App的版本更新,极大的保障了用户对于产品的粘合度,对于开发者而言能使用到这项技术当然再好不过,市面上的热更新,热修复他们的叫称不同,功能相同只是支持的范围有所差别。目前可用的开放平台有腾讯的Tinker以及HotFix。无奈腾讯需要收费,这里就介绍如何集成阿里的HotFix。并且一些踩坑的处理。
首先,你需要一个淘宝账号登陆阿里百川根据角色注册对应账号。之后申请一个App获得他的三个参数:APP ID,App Secret,RSA。这是我的个人测试账号,参数就给你们看啦。如下:
下载RSA到你的电脑。
接入应用:
使用Android Studio.在gradle 文件中添加如下:
allprojects { maven {
url "http://repo.baichuan-android.taobao.com/content/groups/BaichuanRepositories"
}
}
}
在moudle的gradle中添加如下:
compile 'com.taobao.android:alisdk-hotfix:2.0.9'
在清单文件中添加权限:
<! -- 网络权限 -->
<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"/>
在Application中添加百川SDK的参数:
<meta-data
android:name="com.taobao.android.hotfix.IDSECRET"
android:value="App ID" />
<meta-data
android:name="com.taobao.android.hotfix.APPSECRET"
android:value="App Secret" />
<meta-data
android:name="com.taobao.android.hotfix.RSASECRET"
android:value="RSA密钥" />
混淆:
#基线包使用,生成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.**{*;}
之后我们分别在Application中进行代码的初始化化,在onCreate()中优先请求百川补丁下载:
public void onCreate() {
super.onCreate();
initHotFix();
}
private void initHotFix() { SophixManager.getInstance().queryAndLoadNewPatch();
}
在attatchBaseContent中做补丁接收操作,这里的版本要和你后台生成的补丁包的版本一样:
SophixManager.getInstance().setContext(this)
.setAppVersion(appVerSion)
.setAesKey(null)
.setEnableDebug(true)
.setPatchLoadStatusStub(new PatchLoadStatusListener() {
@Override
public void onLoad(final int mode, final int code, final String info, final int handlePatchVersion) {
// // 补丁加载回调通知
// if (code == PatchStatus.CODE_LOAD_SUCCESS) {
// // 表明补丁加载成功
// Toast.makeText(MyApplication.this, "加载补丁成功", Toast.LENGTH_SHORT).show();
// } else if (code == PatchStatus.CODE_LOAD_RELAUNCH) {
// // 表明新补丁生效需要重启. 开发者可提示用户或者强制重启;
// // 建议: 用户可以监听进入后台事件, 然后应用自杀
// } else if (code == PatchStatus.CODE_LOAD_FAIL) {
// // 内部引擎异常, 推荐此时清空本地补丁, 防止失败补丁重复加载
// // SophixManager.getInstance().cleanPatches();
// } else {
// // 其它错误信息, 查看PatchStatus类说明
// }
}
}).initialize();
对于新旧版本的补丁你需要在官网下载生成补丁的工具,之后再进行补丁包的上传。官方还有补丁的测试工具。把补丁上传之后发布就饿可以进行热更新了。下面我们来测试一下,我在我的界面的新版本中把三个banner隐藏了。并且进行打补丁。看看效果如何:
可以看到已经成功的应用了补丁。
Android热修复(HotFix)实战的更多相关文章
- Android热修复框架汇总整理(Hotfix)
Android平台出现了一些优秀的热更新方案,主要可以分为两类:一类是基于multidex的热更新框架,包括Nuwa.Tinker等:另一类就是native hook方案,如阿里开源的Andfix ...
- 深入探索Android热修复技术原理读书笔记 —— 代码热修复技术
在前一篇文章 深入探索Android热修复技术原理读书笔记 -- 热修复技术介绍中,对热修复技术进行了介绍,下面将详细介绍其中的代码修复技术. 1 底层热替换原理 在各种 Android 热修复方案中 ...
- Android热修复技术选型(不在市场发布新版本的情况下,直接更新app)
2015年以来,Android开发领域里对热修复技术的讨论和分享越来越多,同时也出现了一些不同的解决方案,如QQ空间补丁方案.阿里AndFix以及微信Tinker,它们在原理各有不同,适用场景各异,到 ...
- 全面了解Android热修复技术
WeTest 导读 本文探讨了Android热修复技术的发展脉络,现状及其未来. 热修复技术概述 热修复技术在近年来飞速发展,尤其是在InstantRun方案推出之后,各种热修复技术竞相涌现.国内大部 ...
- Android热修复技术选型——三大流派解析
声明,本文转载自微信公众号文章 2015年以来,Android开发领域里对热修复技术的讨论和分享越来越多,同时也出现了一些不同的解决方案,如QQ空间补丁方案.阿里AndFix以及微信Tinker,它们 ...
- Android热修复技术原理详解(最新最全版本)
本文框架 什么是热修复? 热修复框架分类 技术原理及特点 Tinker框架解析 各框架对比图 总结 通过阅读本文,你会对热修复技术有更深的认知,本文会列出各类框架的优缺点以及技术原理,文章末尾简单 ...
- Android热修复技术总结
https://blog.csdn.net/xiangzhihong8/article/details/77718004 插件化和热修复技术是Android开发中比较高级的知识点,是中级开发人员通向高 ...
- Android热修复之AndFix使用教程
AndFix的github地址 AndFix 全称Android hot-fix,是alibaba的Android热修复框架,支持Android 2.3到6.0的版本,支持arm与X86系统架构,支持 ...
- 深入探索Android热修复技术原理读书笔记 —— 热修复技术介绍
1.1 什么是热修复 对于广大的移动开发者而言,发版更新是最为寻常不过的事了.然而,如果你 发现刚发出去的包有紧急的BUG需要修复,那你就必须需要经过下面这样的流程: 这就是传统的更新流程,步骤十分繁 ...
- 深入探索Android热修复技术原理读书笔记 —— so库热修复技术
热修复系列文章: 深入探索Android热修复技术原理读书笔记 -- 热修复技术介绍 深入探索Android热修复技术原理读书笔记 -- 代码热修复技术 深入探索Android热修复技术原理读书笔记 ...
随机推荐
- 【Spring学习笔记-MVC-15.1】Spring MVC之异常处理=404界面
作者:ssslinppp 异常处理请参考前篇博客:<[Spring学习笔记-MVC-15]Spring MVC之异常处理>http://www.cnblogs.com/sssl ...
- http接口测试工具——RESTClient
摘要: RESTClient是用java Swing编写的基于http协议的接口测试工具,工具比较灵巧,便于做接口的调试,源码在官网上可以下到,感兴趣的可以研究一下 WizTools.org REST ...
- python selenium 问题汇总
FAQ 1.python+selenium+Safari浏览器,定位元素 selenium.common.exceptions.ElementNotVisibleException: Message: ...
- 关于java.lang.IncompatibleClassChangeError: Implementing class错误解决
在javaagent使用asm字节码编程的时候启动异常,java.lang.IncompatibleClassChangeError: Implementing class, 这是包冲突引起的问题,加 ...
- 半联结&反联结!
半联结是在两个数据集(表)之间的联结,其中第一个数据集中的数据行在决定是否返回时会根据在另一个数据集中出现或不出现至少一个相匹配的数据行来确定.“不出先”匹配行——这是半联结的一种特殊形式,称为反联结 ...
- JDK1.5多线程提高
1.名词: 1.任务的执行与任务的提交解耦 2.任务的执行策略-可中断,取消 2.线程封闭机制: 针对单线程池而言,提高任务执行的速度,但是无需锁定 3.饥饿死锁: 任务长期得不到执行,其实就是形成闭 ...
- guess_age
age_shanshan = 18count = 3num = 0while num < count: age = int(input("age:")) if age == ...
- aspxGridview 根据单元格值得不同,设置单元格字体的颜色(设置和读取值)
protected void ASPxGridView1_HtmlRowCreated(object sender,DevExpress.Web.ASPxGridView.ASPxGridViewTa ...
- leetcode27
public class Solution { public int RemoveElement(int[] nums, int val) { var len = nums.Length; ; ; i ...
- 巧用JLINK来实现nrf51822的蓝牙设备流水号
项目需求:在蓝牙广播的时候名字为 SN_设备流水号(如SN_00000001). 我们可以在原来的代码中进行一下修改和增加 ; 备注这个地址0X0001B160根据自己具体情况来设定 /**@brie ...