正常开发流程

热修复开发流程

当线上的项目出现问题了,需要重新发布版本解决bug,重新发新版本apk;
但是随着技术不断的更新,线上项目出现bug,可以通过热修复,在不需要发布新版本的情况下进行bug的修复。


效果图

-------------------------

Andfix采用native底层替换
Android代码中的每个method在art虚拟机中都有一个ArtMethod结构体指针与其对应。
在Android中一个方法在art中对应一个ArtMethod,ArtMethod中保存着方法的 类、访问权限和执行地址等信息。
也就说虚拟机就是通过ArtMethod结构体来操作java方法。

源码位置:
/art/runtime/art_method.h

ArtMethod结构:
class ArtMethod中成员变量


class ArtMethod FINAL {...
protected:GcRoot<mirror::Class> declaring_class_;std::atomic<std::uint32_t> access_flags_;// Offset to the CodeItem.uint32_t dex_code_item_offset_;// Index into method_ids of the dex file associated with this method.uint32_t dex_method_index_;uint16_t method_index_;uint16_t hotness_count_;struct PtrSizedFields {// Depending on the method type, the data is//   - native method: pointer to the JNI function registered to this method//                    or a function to resolve the JNI function,//   - conflict method: ImtConflictTable,//   - abstract/interface method: the single-implementation if any,//   - proxy method: the original interface method or constructor,//   - other methods: the profiling data.void* data_;// Method dispatch from quick compiled code invokes this pointer which may cause bridging into// the interpreter.void* entry_point_from_quick_compiled_code_;} ptr_sized_fields_;
...

bug类代码:

package com.example.andfix;import android.content.Context;
public class Worker {public void work(Context context) {throw new RuntimeException("今天不搬砖!");}
}

修复的类代码:

package com.example.andfix.web;import android.content.Context;
import android.widget.Toast;public class Worker {public void work(Context context){Toast.makeText(context, "今天又是搬砖的一天。", Toast.LENGTH_SHORT).show();;}
}
替换底层ArtMethod结构体


demo直接使用修复的类底层替换有bug类的方法;
实际项目中从服务器下载dex到手机本地,加载dex找到要修复的bug类进行方法的替换。


总结

不管使用的是art虚拟机还是dalvik虚拟机,实现热修复的关键是在底层进行method的指针的替换,将出现bug的method的指针替换到修复后的method的指针。

每个android版本 ArtMethod结构体内容不同,需要做兼容。

Android Andfix热修复原理相关推荐

  1. Android Xposed热修复原理简析

    简单介绍下热修复,基于Xposed中的思想,通过修改c层的Method实例描述,来实现更改与之对应的java方法的行为,从而达到修复的目的. Xposed: 诞生于XDA论坛,类似一个应用平台,不同的 ...

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

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

  3. Android 热修复原理篇及几大方案比较

    热修复说白了就是"即时无感打补丁",比如你们公司上线一个app,用户反应有重大bug,需要紧急修复.2015年以来,Android开发领域里对热修复技术的讨论和分享越来越多,同时也 ...

  4. Android AndFix热补丁动态修复框架使用教程

    简介 已经上线的项目发现BUG,紧急修复BUG发布新版本?No,也许你需要AndFix. AndFix 是阿里巴巴开源的 Android 应用热修复工具,帮助 Anroid 开发者修复应用的线上问题. ...

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

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

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

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

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

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

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

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

  9. 【大牛系列教学】Android热修复原理,满满干货指导

    优秀的战士需要出色的剑才能战斗.同样,在现代IT中,每个编码人员都需要最好的Android开发人员工具来提高他们的技能和效率.在Android应用程序开发这个残酷的竞争行业中,只有优秀的开发人员才能生 ...

最新文章

  1. QIIME 2用户文档. 9数据导入Importing data(2019.7)
  2. 知识回顾——构造函数
  3. JS中有两种自加法操作
  4. 机器学习大佬的进阶之路!一位北大硕士毕业梳理了完整的学习路线!
  5. 26.Silverlight多线程技术ThreadPool的使用
  6. python写appium_案例分享,Python +appium做登录功能
  7. 原创音乐人炙手可热,中国原创音乐进入新周期?
  8. 「MYSQL」MYSQL中的int(11)到底代表什么意思?
  9. R语言数据异常值处理
  10. Python量化交易之预测茅台股票涨跌
  11. 数据库是根和数据仓库是魂
  12. Java中undefined是什么意思,Haskell中的undefined和Java中的null有什么区别?
  13. 几个黑科技、实用网站(转自公众号:趣说软件)
  14. Scikit入门指南
  15. 【懒懒的Python学习笔记十】
  16. ppt怎么设置页面比例为4:3
  17. 关于XUtils的View 注入解析
  18. 用最生动的语言重现经典!听我细细道来冯·诺依曼体系结构
  19. 测试开发之Python核心笔记(7):输入与输出
  20. Expected one result (or null) to be returned by selectOne(), but found: 4

热门文章

  1. 微软官方自己精简的XP系统--WIN XP基础版WinFLPCs
  2. php查看opcache是否开启,开启opcache
  3. Max杀毒,最强插件,解决清理各种max病毒各种弹窗提示
  4. 第一范式 第二范式 第三范式理解
  5. 算法系列 - 广告反作弊概述
  6. Linux Bonding
  7. 蓝牙、WIFI和802.11b
  8. 稳定的双共轭梯度法(BiCGSTAB)
  9. 机器视觉 头发分割(头发颜色变深蓝色)安卓应用App(Hair Segmentation)基于mediapipe。
  10. 微信中已停止访问该网页怎么办?