Android热修复之AndFix使用教程
AndFix
全称Android hot-fix,是alibaba的Android热修复框架,支持Android 2.3到6.0的版本,支持arm与X86系统架构,支持Dalvik和ART Runtime。
原理
AndFix的原理就是方法的替换,把有bug的方法替换成补丁文件中的方法。

使用教程
1. 添加依赖和混淆
compile 'com.alipay.euler:andfix:0.4.0@aar'
}```
**混淆:**
-keep class * extends java.lang.annotation.Annotation
-keepclasseswithmembernames class * {
native <methods>;
}
**. 在Application.onCreate()中初始化PatchManager**
public class AndFixApplication extends Application {
public static PatchManager mPatchManager; @Override
public void onCreate() {
super.onCreate(); // 初始化patch管理类
mPatchManager = new PatchManager(this); // 初始化patch版本
mPatchManager.init("1.0");
// String appVersion = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
// mPatchManager.init(appVersion);
// 加载已经添加到PatchManager中的patch
mPatchManager.loadPatch();
}
}
**3. 找个地方加载补丁,我们这里为了演示,点击按钮进行加载补丁**
findViewById(R.id.main_btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
update();
}
});
private static final String APATCH_PATH = "/fix.apatch"; // 补丁文件名
private void update() {
String patchFileStr = Environment.getExternalStorageDirectory().getAbsolutePath() + APATCH_PATH;
try {
AndFixApplication.mPatchManager.addPatch(patchFileStr);
} catch (IOException e) {
e.printStackTrace();
}
}
PatchManager的addPatch方法加载新补丁,项目中可以在下载补丁文件之后调用,这里为了演示就把补丁文件放在本地的SD卡中了,代码中patchFileStr就是补丁存放的位置,**.apatch**就是生成补丁文件的后缀名,fix就是补丁文件的名字,这里我们将其名字写死。
我们看一下打补丁之前MainActivity的所有代码
public class MainActivity extends AppCompatActivity {
private static final String APATCH_PATH = "/fix.apatch"; // 补丁文件名
private TextView mainTv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); mainTv = (TextView) findViewById(R.id.main_tv);
mainTv.setText("点击Toast");
mainTv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showToast();
}
}); findViewById(R.id.main_btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
update();
}
}); } private void showToast() {
Toast.makeText(this, "打补丁之前", Toast.LENGTH_LONG).show();
} /**
* 动态更新,加载补丁文件
* @author zehua_chen
* create at 2016/8/3 14:35
*/
private void update() {
String patchFileStr = Environment.getExternalStorageDirectory().getAbsolutePath() + APATCH_PATH;
try {
AndFixApplication.mPatchManager.addPatch(patchFileStr);
} catch (IOException e) {
e.printStackTrace();
}
}
}
**. 我们将以上应用打包,我们命名为andfix_v1.**
 **. 修改MainActivity中的代码,打包成andfix_v2.**
private void showToast() {
Toast.makeText(this, "打补丁之后", Toast.LENGTH_LONG).show();
}
mainTv.setText("加载了补丁之后");
上面代码可知,我们只修改TextView的文字和TextView点击之后的Toast内容,然后打包
 **. 使用官方提供的工具[apkpatch](https://github.com/alibaba/AndFix/blob/master/tools/apkpatch-1.0.3.zip)生成.apatch补丁文件**
点击上面的链接下载apkpatch之后解压

将两个apk文件和该app的签名文件放入到该目录中
 使用命令生成.apatch补丁文件,先cmd进入该目录 
使用命令生成补丁

上图所示则表示补丁包生成完成 <u>apkpatch.bat -f andfix_v2..apk -t andfix_v1..apk -o output -k AndFixKey.jks -p andfix -a andfix -e andfix</u> <u>apkpatch.bat -f 新apk -t 旧apk -o 输出目录 -k app签名文件 -p 签名文件密码 -a 签名文件别名 -e 别名密码</u> * -f <new.apk> :新apk
* -t <old.apk> : 旧apk
* -o <output> : 输出目录(补丁文件的存放目录)
* -k <keystore>: 打包所用的keystore
* -p <password>: keystore的密码
* -a <alias>: keystore 用户别名
* -e <alias password>: keystore 用户别名密码 生成的output文件:
  将生成的.apatch补丁文件改成代码中写死的fix.apatch
 **.运行andfix_v1.0查看修复之前的效果,把补丁文件push到sd卡目录下, 点击Button更新按钮加载补丁文件,再看其效果,到这里我们就完成了AndFix的热修复了**   * 运行andfix_v1.0没有点击动态更新按钮,点击TextView

* 点击动态更新Button之后再Toast,我们发现Tost的内容变了,但是TextView的内容没换
 * 退出之后我们重新进入该应用就会发现TextView的内容也变化了。

Android热修复之AndFix使用教程的更多相关文章
- [Android]热修复框架AndFix测试说明
AndFix,全称是Android hot-fix.是阿里开源的一个热补丁框架,允许APP在不重新发布版本的情况下修复线上的bug.支持Android 2.3 到 6.0,并且支持arm 与 X86系 ...
- 十分钟教会你使用安卓热修复框架AndFix
腾讯最近开发出一个Tinker,阿里也有一个Dexposed框架,当然还有一个就是今天的主角热修复框架AndFix.接下来,我会从它的概念.原理.使用方法等为你详细介绍. 1.什么是AndFix? A ...
- 走进热修复框架AndFix的世界
关于阿里的开源热修复框架AndFix引起了广泛共鸣,受到了很多人的青睐.那今天就跟随我的步伐来详细了解一下AndFix的详细信息和使用方法.1.什么是AndFix? AndFix是阿里巴巴出的一个专门 ...
- Android热修复之微信Tinker使用初探
文章地址:Android热修复之微信Tinker使用初探 前几天,万众期待的微信团队的Android热修复框架tinker终于在GitHub上开源了. 地址:https://github.com/ ...
- 全面了解Android热修复技术
WeTest 导读 本文探讨了Android热修复技术的发展脉络,现状及其未来. 热修复技术概述 热修复技术在近年来飞速发展,尤其是在InstantRun方案推出之后,各种热修复技术竞相涌现.国内大部 ...
- Android热修复框架汇总整理(Hotfix)
Android平台出现了一些优秀的热更新方案,主要可以分为两类:一类是基于multidex的热更新框架,包括Nuwa.Tinker等:另一类就是native hook方案,如阿里开源的Andfix ...
- Android热修复技术原理详解(最新最全版本)
本文框架 什么是热修复? 热修复框架分类 技术原理及特点 Tinker框架解析 各框架对比图 总结 通过阅读本文,你会对热修复技术有更深的认知,本文会列出各类框架的优缺点以及技术原理,文章末尾简单 ...
- Android热修复技术总结
https://blog.csdn.net/xiangzhihong8/article/details/77718004 插件化和热修复技术是Android开发中比较高级的知识点,是中级开发人员通向高 ...
- Android热修复技术原理详解
阿里Dexposed -- native解决方案 原理: 直接在native层进行方法的结构体信息对换,从而实现完美的方法新旧替换,从而实现热修复功能 他的思想完全来源于Xposed框架,完美诠释 ...
随机推荐
- 关于开发环境无法运行applet
测试一下IE java vm 如果没有正确显示出来,说明java vm插件没有装好: 我用Uninstalle 来清理注册表:重装jdk 1.6_45
- 初识Flask框架,以及Flask中的模板语言jinjia2和Flask内置的Session
一.web框架的对比 首先我们先来看下比较火的web框架 1.Django: 优点:大而全,所有组件都是组织内部开发高度定制化,教科书级别的框架 缺点:大到浪费资源,请求的时候需要的资源较高 2.Fl ...
- mysqladmin常用用法
mysqladmin 工具的使用格式:mysqladmin [option] command [command option] command ...... 参数选项: -c number 自动运行次 ...
- 【实战】JBOSS反序列化Getshell
一.JBOSS4.0.5_GA,5.x,6.x 需要JavaDeserH2HC(https://github.com/joaomatosf/JavaDeserH2HC) 操作起来 javac -cp ...
- 认识CSS中精灵技术(sprite)和滑动门
前端之HTML,CSS(十) 精灵技术与精灵图 精灵技术本质 精灵技术是一种处理网页背景图像的方式,实质是将小的背景图片拼接到一张大的背景图像上.拼接成的大图被称为精灵图.浏览器打开网页时,每一个图片 ...
- OpenERP 中国财务模块 调整
最开始的模样是这个样子的 后三行是没用的,于是在RML文件中注释掉相关的代码,改进后的界面如下: 这个样子看起来是好多了,但是 数量跟是十亿千百的那块看起来还是很别扭,调整行高后的结果: 最诡异的事情 ...
- Cygwin、Msys、MinGW、Msys2的区别与联系(转)
网上有很多文章讲它们之间的区别与联系,初学者看的一头雾水,在知乎上看到这篇文章讲的很清楚,容易理解. 在讲区别联系之前,我们先看一下这几个东东的前世今生. Cygwin,原 Cygnus 出品(已 ...
- Java PrepareStatement
1.PreparedStatement是预编译的,对于批量处理可以大大提高效率. 也叫JDBC存储过程2.使用 Statement 对象.在对数据库只执行一次性存取的时侯,用 Statement 对象 ...
- Ibatis框架之系统架构
如果用最简洁的话来总结 iBATIS 主要完成那些功能时,我想下面几个代码足够概括. Class.forName("oracle.jdbc.driver.OracleDriver" ...
- 我的“MIT Challenge”
前言 在学习之余看到了一个有趣的挑战,名叫"MIT Challenge",这个挑战的目标是在一年365天之内学习 MIT 计算机系本科本科学生四年的课程.自己大二学习算法时也曾学习 ...