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

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

1.2 生成apatch包

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

命令是:apkpatch.bat -f -t -o -k -p <> -a -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

22788384b54bc6885f59b18f0a22713b.png

生成的补丁:

c1e3a3100aa8e4b35eec8eac8d2b06a7.png

1.3 修复apatch包

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

public class BaseApplication extends Application {

// Patch管理类

public static PatchManager mPatchManager;

@Override

public void onCreate() {

super.onCreate();

// 捕捉崩溃信息

ExceptionCrashHandler.getInstance().init(this);

// Ali热修复

try {

mPatchManager = new PatchManager(this);

// 初始化patch版本

String pkName = this.getPackageName();

String versionName = getPackageManager().getPackageInfo(pkName, ).versionName;

// 初始化版本名称

mPatchManager.init(versionName);

// 加载之前的patch

mPatchManager.loadPatch();

} catch (PackageManager.NameNotFoundException e) {

e.printStackTrace();

}

}

}

主页面MainActivity

public class MainActivity extends BaseSkinActivity {

@Override

protected void initData() {

// 获取上次的崩溃信息

File crashFile = ExceptionCrashHandler.getInstance().getCrashFile();

// 上传到服务器,后面再说.......

}

@Override

protected void initView() {

}

@Override

protected void setContentView() {

setContentView(R.layout.activity_main);

}

@Override

protected void initTitle() {

}

@Onclick(R.id.test)

public void test(View view) {

// 没有修复之前会报异常闪退

Toast.makeText(this, Utils.test(), Toast.LENGTH_LONG).show();

}

@Onclick(R.id.ali_fix)

public void aliHotFix(View view) {

try {

// 测试 目前暂且放在本地

String patchFileString = Environment.getExternalStorageDirectory()+"/fix.apatch";

Log.e("TAG", patchFileString);

// 修复apatch,不需要重启可立即生效

BaseApplication.mPatchManager.addPatch(patchFileString);

Toast.makeText(this, "Bug修复成功", Toast.LENGTH_LONG).show();

} catch (Exception e) {

e.printStackTrace();

Toast.makeText(this, "Bug修复失败", Toast.LENGTH_LONG).show();

}

}

}

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

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

1.每次生成之后一定要测试;

2.尽量的不要分包,不要分多个dex

3.混淆的时候,设计到NDK   AndFix.java 不要混淆

4.生成包之后一般会加固什么的,这个时候生成的差分包,一定要在之前去生成。

5.既然是去修复方法,第一个不能增加成员变量,不能增加方法

阿里开源的热补丁框架AndFix使用教程

阿里巴巴推出的AndFix框架 首次给出大家这个框架的地址:https://github.com/alibaba/AndFix 对源码比较感兴趣的同学们可以自行研究代码 AndFix原理介绍 AndF ...

Android热修复原理(一)热修复框架对比和代码修复

在Android应用开发中,热修复技术被越来越多的开发者所使用,也出现了很多热修复框架,比如:AndFix.Tinker.Dexposed和Nuwa等等.如果只是会这些热修复框架的使用那意义并不大,我 ...

深入探索Android热修复技术原理读书笔记 —— 热修复技术介绍

1.1 什么是热修复 对于广大的移动开发者而言,发版更新是最为寻常不过的事了.然而,如果你 发现刚发出去的包有紧急的BUG需要修复,那你就必须需要经过下面这样的流程: 这就是传统的更新流程,步骤十分繁 ...

热修复 AndFix 阿里 apkpatch MD

Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

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

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

Android 插件化和热修复知识梳理

概述 在Android开发中,插件化和热修复的话题越来越多的被大家提及,同时随着技术的迭代,各种框架的发展更新,插件化和热修复的框架似乎已经日趋成熟,许多开发者也把这两项技术运用到实际开发协作和正式的 ...

Android热修复技术总结

https://blog.csdn.net/xiangzhihong8/article/details/77718004 插件化和热修复技术是Android开发中比较高级的知识点,是中级开发人员通向高 ...

阿里Sophix热修复

阿里巴巴对Android热修复技术已经进行了长达多年的探索. 最开始,是手淘基于Xposed进行了改进,产生了针对Android Dalvik虚拟机运行时的Java Method Hook技术,Dex ...

android Qzone的App热补丁热修复技术

转自:https://mp.weixin.qq.com/s?__biz=MzI1MTA1MzM2Nw==&mid=400118620&idx=1&sn=b4fdd5055731 ...

随机推荐

wampserver安装后 mysql 所有数据库丢失的解决方案

事情起源: 晚上十点客户紧急来电,说是网站全部瘫痪.同事登陆数据库一看,Mysql Workbench Database下一片空白.当时我们都傻了. 发现原因: 服务器环境是windows serve ...

MongoDB 复制集 &lpar;一&rpar; 成员介绍

一 MongoDB 复制集简介          MongoDB的复制机制主要分为两种:          Master-Slave    (主从复制)      这个已经不建议使用       ...

&lbrack;Cycle&period;js&rsqb; Hyperscript as our alternative to template languages

Usually we use template languages like Handlebars, JSX, and Jade to create. One simple way we can cr ...

Python中的深浅拷贝,赋值及引用

简单来说,若对象a中存的是列表或字典等可变对象,b对a的浅拷贝只是对对象第一层的复制,修改b第二层的元素仍然会影响两个对象. 深拷贝则是不会影响原来的对象. import copy.copy() 浅拷 ...

java 时间格式化&lpar;2016&period;04&period;12 12&colon;32&colon;55&rpar;

输入的时间格式如:2016.04.12 12:32:55所示: 想要获取一定格式的日期,时间的方法 String startString = "2016.04.25 12:25:44&quo ...

4&period;从AbstractQueuedSynchronizer&lpar;AQS&rpar;说起&lpar;3&rpar;——AQS结语

前两节的内容<2.从AbstractQueuedSynchronizer(AQS)说起(1)——独占模式的锁获取与释放> .<3.从AbstractQueuedSynchronize ...

dedecms&lowbar;分页技术

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值