1.1 基本介绍
 
  我们先去github上面了解它https://github.com/alibaba/AndFix

这里就有一个概念那就AndFix.apatch补丁用来修复方法,接下来我们看看到底是怎么实现的。

  
1.2 生成apatch包
  
  假如我们收到了用户上传的崩溃信息,我们改完需要修复的Bug,这个时候就会有一个新的的apk我们就叫它为new.apk,原来的那个有Bug的apk你也有我们就叫它old.apk。这个时候我们就可以利用阿里github上面提供的工具生成一个xxxx.apatch包用于修复Bug。

命令是:apkpatch.bat -f <new> -t <old> -o <output> -k <keystore> -p <> -a <alias> -e <>

-f : 没有Bug的新版本apk
-t : 有bug的旧版本apk
-o : 生成的补丁文件所放的文件夹
-k : 签名打包密钥
-p : 签名打包密钥密码
-a : 签名密钥别名
-e : 签名别名密码(这样一般和密钥密码一致)

我的是这样子:

apkpatch.bat -f new.apk -t old.apk -o out -k joke.jks -p 240336124 -a 内涵段子 -e 240336124

生成的补丁:

1.3 修复apatch包

怎么获取apatch包呢?我们肯定是请求接口获取下载我们的修复好的apatch包,当然有可能没有就太好了佛祖保佑。下载下来之后我们就可以调用方法进行修复了,我们可以暂时放在本地测试一下,这些代码肯定之前就得写好:

public class BaseApplication extends Application {// Patch管理类public static PatchManager mPatchManager;@Overridepublic void onCreate() {super.onCreate();// 捕捉崩溃信息ExceptionCrashHandler.getInstance().init(this);// Ali热修复try {mPatchManager = new PatchManager(this);// 初始化patch版本String pkName = this.getPackageName();String versionName = getPackageManager().getPackageInfo(pkName, 0).versionName;// 初始化版本名称
            mPatchManager.init(versionName);// 加载之前的patch
            mPatchManager.loadPatch();} catch (PackageManager.NameNotFoundException e) {e.printStackTrace();}}
}

主页面MainActivity
 1 public class MainActivity extends BaseSkinActivity {
 2
 3     @Override
 4     protected void initData() {
 5         // 获取上次的崩溃信息
 6         File crashFile = ExceptionCrashHandler.getInstance().getCrashFile();
 7         // 上传到服务器,后面再说.......
 8     }
 9
10     @Override
11     protected void initView() {
12
13     }
14
15     @Override
16     protected void setContentView() {
17         setContentView(R.layout.activity_main);
18     }
19
20     @Override
21     protected void initTitle() {
22
23     }
24
25     @Onclick(R.id.test)
26     public void test(View view) {
27         // 没有修复之前会报异常闪退
28         Toast.makeText(this, Utils.test(), Toast.LENGTH_LONG).show();
29     }
30
31     @Onclick(R.id.ali_fix)
32     public void aliHotFix(View view) {
33         try {
34             // 测试 目前暂且放在本地
35             String patchFileString =  Environment.getExternalStorageDirectory()+"/fix.apatch";
36             Log.e("TAG", patchFileString);
37             // 修复apatch,不需要重启可立即生效
38             BaseApplication.mPatchManager.addPatch(patchFileString);
39             Toast.makeText(this, "Bug修复成功", Toast.LENGTH_LONG).show();
40         } catch (Exception e) {
41             e.printStackTrace();
42             Toast.makeText(this, "Bug修复失败", Toast.LENGTH_LONG).show();
43         }
44     }
45 }

运行的效果就在最上面,如果直接点击测试会报异常闪退,当我们点击完阿里开源热修复后再次点击测试,发现不闪退了。接下来的内容你可能要看不懂了请做好准备。

1.4 正式开发需要注意的地方:

1.每次生成之后一定要测试;
2.尽量的不要分包,不要分多个dex
3.混淆的时候,设计到NDK   AndFix.java 不要混淆
4.生成包之后一般会加固什么的,这个时候生成的差分包,一定要在之前去生成。
5.既然是去修复方法,第一个不能增加成员变量,不能增加方法
 

http://www.cnblogs.com/ganchuanpu/p/8184554.html

Android热修复之 - 阿里开源的热补丁相关推荐

  1. Android热修复之 阿里开源的热补丁

    1.概述   上一期讲到Android热修复之 - 收集崩溃信息上传至服务器,我们获取到用户手中上线的崩溃信息上传到服务器后该怎么办?如果直接发布版本要用户去下载肯定不乐意.这一期我们来看一下怎么去打 ...

  2. android热补丁作用,Android热修复之 - 阿里开源的热补丁

    这里就有一个概念那就AndFix.apatch补丁用来修复方法,接下来我们看看到底是怎么实现的. 1.2 生成apatch包 假如我们收到了用户上传的崩溃信息,我们改完需要修复的Bug,这个时候就会有 ...

  3. Android热修复(1):热修复的介绍和原理解析

    一.热修复的产生概述 在开发中我们会遇到如下的情况: 1.刚发布的版本出现了严重的bug,这就需要去解决bug.测试并打渠道包在各个应用市场上重新发布,这会耗费大量的人力物力,代价会比较大. 2.已经 ...

  4. 服务器中的热修复怎么做,Android 热修复(全网最简单的热修复讲解)

    首先!我们抛开网上的热修复框架不谈,我们来通过原理手动实现一个热修复工具,在撸码之前我们先通过一张图来了解热修复的流程. Android热修复 ACCCB328-AF5C-4BD9-AD08-6F7D ...

  5. linux内核热修复,揭露内核黑科技 - 热补丁技术真容

    原创 理查德 Linux阅码场 6月12日 内核热补丁是一种无需重启操作系统,动态为内核打补丁的技术.系统管理员基于该技术,可以在不重启系统的情况下,修复内核BUG或安全漏洞,可以在最大程度上减少系统 ...

  6. Android热修复技术原理详解(最新最全版本)

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

  7. Android热修复——深入剖析AndFix热修复及自己动手实现

    前言 去年写过一篇热修复的文章,那时候刚开始接触,照猫画虎画的还算比较成功.但是那种修复需要重新启动APP,也就是在JAVA层实现的热修复.我们知道目前Android主流的修复还有在Native层实现 ...

  8. 干货满满,Android热修复方案介绍

    摘要:在云栖社区技术直播中,阿里云客户端工程师李亚洲(毕言)从技术原理层面解析和比较了业界几大热修复方案,揭开了Qxxx方案.Instant Run以及阿里Sophix等热修复方案的神秘面纱,帮助大家 ...

  9. Android热修复学习之旅——HotFix完全解析

    在上一篇博客 Android热修复学习之旅开篇--热修复概述中,简单介绍了各个热修复框架的原理,本篇博客我将详细分析QQ空间热修复方案. Android dex分包原理介绍 QQ空间热修复方案基于An ...

最新文章

  1. python官网如何调中文-django的settings中设置中文支持的实现
  2. wxWidgets:wxFTP类用法
  3. JavaScript 的性能优化:加载和执行
  4. python什么是入口文件_Python注释是什么东东
  5. Node.js基础学习(第二幕)
  6. mysql dbutil_DBUtil
  7. 灰色按钮克星v.10
  8. 数据库 --- 约束
  9. 依赖注入框架 ----Dagger2 使用详解及源码分析
  10. 48种世间哲学,其中值得借鉴的有10个
  11. 反爬虫破解——裁判文书网
  12. 5个免费商用音频素材网站
  13. cnzz.php,PHP curl抓取cnzz统计数据
  14. Python正则表达式及match函数的用法
  15. 解除计算机屏保密码设置密码,win10屏保密码怎么取消_如何取消Windows10锁屏密码...
  16. RFID定位之隧道人员定位系统解决方案--新导智能
  17. 【软件架构】Michael Perry关于不可变架构、CAP定理和CRDTs
  18. CDN-直播-点播-技术简介
  19. 详述 Java 语言中的格式化输出
  20. 一文了解K8s-概念详解

热门文章

  1. 横向经济联合的理论认识
  2. 数据库连接字符串.udl
  3. MongoDB 进阶-关联查询
  4. 使用sprc097的DSP281x_usDelay.asm
  5. 读书笔记《单核工作法》:2
  6. C语言函数手册:c语言库函数大全|C语言标准函数库|c语言常用函数查询
  7. python下采样_python + opencv 如何在上采样下采样之后导出图片?
  8. centos 系统重新安装ssh
  9. html 加入li的作用,HTML的li有什么作用?
  10. RDD 与 DataFrame原理-区别-操作详解