这里就有一个概念那就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

生成的补丁:

1.3 修复apatch包

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

public classBaseApplication extends Application {//Patch管理类

public staticPatchManager mPatchManager;

@Overridepublic voidonCreate() {

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 classMainActivity extends BaseSkinActivity {2

3 @Override4 protected voidinitData() {5 //获取上次的崩溃信息

6 File crashFile =ExceptionCrashHandler.getInstance().getCrashFile();7 //上传到服务器,后面再说.......

8 }9

10 @Override11 protected voidinitView() {12

13 }14

15 @Override16 protected voidsetContentView() {17 setContentView(R.layout.activity_main);18 }19

20 @Override21 protected voidinitTitle() {22

23 }24

25 @Onclick(R.id.test)26 public voidtest(View view) {27 //没有修复之前会报异常闪退

28 Toast.makeText(this, Utils.test(), Toast.LENGTH_LONG).show();29 }30

31 @Onclick(R.id.ali_fix)32 public voidaliHotFix(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.既然是去修复方法,第一个不能增加成员变量,不能增加方法

android的热修复,Android热修复之相关推荐

  1. 【Android 热修复】热修复原理 ( 多 Dex 打包机制 | 多 Dex 支持 | Dex 分包设置 | 开发和产品风格设置 | 源码资源 )

    文章目录 一.Dex 打包设置 1.多 Dex 支持 2.Dex 分包设置 3.开发和产品风格设置 ( 非必须 ) 二.完整 build.gradle 配置 1.build.gradle 配置 2.d ...

  2. 【Android 热修复】热修复原理 ( 合并两个 Element[] dexElements | 自定义 Application 加载 Dex 设置 | 源码资源 )

    文章目录 一.合并两个 Element[] dexElements 二. 完整修复包加载工具类 三. 源码资源 一.合并两个 Element[] dexElements 在 [Android 热修复] ...

  3. 【Android 热修复】热修复原理 ( Dex 文件拷贝后续操作 | 外部存储空间权限申请 | 执行效果验证 | 源码资源 )

    文章目录 一.Dex 文件准备 二.外部存储空间权限申请 1.清单文件申请权限 2.动态申请权限 三.文件拷贝 1.文件拷贝 2.执行效果 四. 源码资源 一.Dex 文件准备 在 [Android ...

  4. 【Android 热修复】热修复原理 ( 修复包 Dex 文件准备 | Dex 优化为 Odex | Dex 文件拷贝 | 源码资源 )

    文章目录 一.修复包 Dex 文件准备 二.Odex 优化 三.Dex 文件拷贝 四. 源码资源 一.修复包 Dex 文件准备 异常代码 : 故意写一个异常代码 , 并执行该代码 , 肯定会崩溃 ; ...

  5. 【Android 热修复】热修复原理 ( 热修复框架简介 | 将 Java 字节码文件打包到 Dex 文件 )

    文章目录 一. 热修复框架简介 1.类替换 2.so 替换 3.资源替换 4.全平台支持 5.生效时间 6.性能损耗 7.总结 二. 将 Java 字节码文件打包到 Dex 文件 一. 热修复框架简介 ...

  6. android的热修复,Android热修复原理

    热修复框架技术主要有三类,代码修复,资源修复,动态链接库修复. 资源修复 很多资源修复的框架参考了Instant Run资源修复的原理,所以先了解一下Instant Run Instant Run I ...

  7. 动态化部署:Android热修复之代码修复(一)

    前记 传统发版要经过应用市场审核这一过程,但面对需要紧急修复的bug时无疑会增加时间成本,并且为了应对现在日渐强烈的运营需求,动态化部署应运而生,包括插件化和热修复,当然插件化和热修复充满了黑科技,包 ...

  8. Android热修复升级探索——代码修复冷启动方案

    前言 前面一篇文档, 我们提到热部署修复方案有诸多特点(有关热部署修复方案实现, Android热修复升级探索--追寻极致的代码热替换).其根本原理是基于native层方法的替换, 所以当类结构变化时 ...

  9. 浅析“热更新”(热修复)解决方案

    新闻事件背景:11月27日,苹果应用商店集中下架了拼多多.搜狗.科大讯飞.悦跑圈等多家公司的应用产品.科大讯飞和悦跑圈均表示,下架与"热更新"相关.然而,这并不是苹果应用商店第一次 ...

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

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

最新文章

  1. 计算机、数学、运筹学等领域的32个重要算法
  2. Delphi保存网页中的图片
  3. arcgis批量按掩膜提取栅格
  4. 深入浅出 Javascript API(二)--地图显示与基本操作 转
  5. BUUCTF Web [ACTF2020 新生赛]Include
  6. 微型计算机 持续更新,2020年南京邮电大学810《微机原理及应用》硕士研究生入学考试大纲...
  7. 几大主流的前端框架(UI/JS)框架
  8. 解决新版本谷歌浏览器CROS跨域问题
  9. el-input 正则,非负数且只有一个小数点
  10. ·使用Xtext/Xtend 实现域专用语言DSL(1)
  11. 软碟通 (UltraISO)制作启动盘
  12. 卡巴斯基实验室:2019Q1 IT威胁发展趋势统计报告
  13. ebcdic java_java EBCDIC
  14. TextView显示省略号问题
  15. 提供免费可商用的优秀背景视频素材——COVERR
  16. 威客witkey模式的提出
  17. 【知识点】增量式编码器的工作原理和使用方法
  18. 福建计算机会考试题及答案,福建省信息技术会考笔试201006试题答案
  19. centos7安装ftp服务登录不上的坑总结
  20. 关于图片无缝拼接的学习(PTGui)

热门文章

  1. 骞云科技携手上海电力、兴业证券,双案例入选2022年CMP优秀案例
  2. spring boot 运行提示:Process finished with exit code 1
  3. Nginx配置虚拟主机(基于域名、端口及IP)
  4. 周杰伦一发新歌,服务器为什就挂掉了?
  5. android宿舍管理系统源码,基于android的学生宿舍管理系统的实现.doc
  6. linux 设置系统时钟,linux clock命令查看和设置硬件时钟
  7. Tensorflow keras中实现语义分割多分类指标:IOU、MIOU
  8. SpringMVC常用方法大全
  9. Driver中使用的内核机制
  10. php资产管理,php固定资产管理系统