Android 热补丁和热修复
参考:
1. Xposed
Github地址:https://github.com/rovo89/Xposed
项目描述:Xposed框架使用起来很确实很好用。可是就是有一个巨大的缺点,就是需要Root权限。
2. Dexposed
Github地址:https://github.com/alibaba/dexposed
阿里巴巴(淘宝团队),基于ROOT社区著名开源项目Xposed改造剥离了ROOT部分,实现的一个Android平台上功能强大的无侵入式运行时AOP框架。(基于Xposed改造剥离了ROOT部分)
项目描述:http://www.aplesson.com/?p=925 无需Root也能Hook?——Depoxsed框架演示
支持从Android2.3到4.4(除了3.0)的所有dalvid运行时arm架构的设备,暂不支持5.0系统,可以针对5.0以上版本进行修复。
3. AndFix
Github地址:https://github.com/alibaba/AndFix
项目描述:阿里巴巴(支付宝团队)开源的 Android 应用热修复工具,帮助 Anroid 开发者修复应用的线上问题。
AndFix 支持 Android 2.3 - 6.0,ARM 和 x86 架构,完美支持dalvik 运行时和 art 运行时。AndFix 的分支是 .apatch 文件。
使用方法:http://www.bkjia.com/Androidjc/1055390.html
4. AndroidPatchUpdate
Github地址:https://github.com/JackCho/AndroidPatchUpdate
项目描述:类似Google I/O 上提及的 Smart App update,应用增量更新机制,利用了Linux上的Patch打补丁的方法,将旧项目和新项目进行差别对比(使用bsdiff或者Courgette工具)生成patch文件,然后使用bspatch将旧项目与Patch进行合并
5. HotFix
Github地址:https://github.com/dodola/HotFix
项目描述:该项目是基于QQ空间终端开发团队的技术文章:安卓App热补丁动态修复技术介绍 实现的一个动态打补丁的框架。
该框架完成了作者所描述的基本功能。
项目部分代码从 dalvik_patch 项目中修改而来,这个项目本来是用来实现multidex加载的,修改后可以用来实现热补丁的效果。
6. ClassLoader
Github地址:
项目描述:腾讯空间Android工程师,陈钟发明的热补丁方案,是他在看源码的时候偶然发现的切入点。
我们知道,multidex方案的实现,其实就是把多个dex放进app的classloader之中,从而使得所有dex的类都能被找到。
而实际上findClass的过程中,如果出现了重复的类,参照下面的类加载的实现,是会使用第一个找到的类的。
该热补丁方案就是从这一点出发,只要把有问题的类修复后,放到一个单独的dex,通过反射插入到dexElements数组的最前面,不就可以让虚拟机加载到打完补丁的class了吗。
说到此处,似乎已经是一个完整的方案了。
但在实践中,会发现运行加载类的时候报preverified错。
原来在DexPrepare.cpp
,将dex转化成odex的过程中,会在DexVerify.cpp
进行校验,验证如果直接引用到的类和clazz是否在同一个dex,如果是,则会打上CLASS_ISPREVERIFIED标志。
通过在所有类(Application除外,当时还没加载自定义类的代码)的构造函数插入一个对在单独的dex的类的引用,就可以解决这个问题。空间使用了javaassist进行编译时字节码插入。
注意:ClassLoader方案支持2.3-6.0,会对启动速度略微有影响,只能在下一次应用启动时生效,在空间中已经有了较长时间的线上应用,如果可以接受在下次启动才应用补丁,是很好的选择。
地址:安卓App热补丁动态修复技术介绍(qq空间技术团队)
6. 基于Proxy/Delegate 实现bug热修复
地址:Android 基于Proxy/Delegate 实现bug热修复
Android 热补丁和热修复的更多相关文章
- iOS开发那些事儿(二)热补丁
一.热补丁作用:修复导致崩溃的错误.替换/增加方法.替换原来的界面等等 二.实现手段:JSPatch (使用Objective-C Objective-C和JavaScript jspatch桥.你可 ...
- Android 热补丁动态修复框架小结
一.概述 最新github上开源了很多热补丁动态修复框架,大致有: https://github.com/dodola/HotFix https://github.com/jasonross/Nuwa ...
- android Qzone的App热补丁热修复技术
转自:https://mp.weixin.qq.com/s?__biz=MzI1MTA1MzM2Nw==&mid=400118620&idx=1&sn=b4fdd5055731 ...
- Android热修复之 - 阿里开源的热补丁
1.1 基本介绍 我们先去github上面了解它https://github.com/alibaba/AndFix 这里就有一个概念那就AndFix.apatch补丁用来修复方法,接下来我们看看到底是 ...
- 【腾讯bugly干货分享】微信Android热补丁实践演进之路
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://bugly.qq.com/bbs/forum.php?mod=viewthread&tid=1264& ...
- 安卓App热补丁动态修复技术介绍
版权声明:本文由johncz原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/169 来源:腾云阁 https://www.q ...
- Android 热补丁实践之路
最新github上开源了很多热补丁动态修复框架,主要的大致有: https://github.com/dodola/HotFix https://github.com/jasonross/Nuwa h ...
- App热补丁动态修复技术介绍
安卓App热补丁动态修复技术介绍 来自qq空间团队:微信号qzonemobiledev QQ空间终端开发团队 1.背景 当一个App发布之后,突然发现了一个严重bug需要进行紧急修复,这时候公司各方就 ...
- Android热补丁技术—dexposed原理简析(手机淘宝采用方案)
上篇文章<Android无线开发的几种常用技术>我们介绍了几种android移动应用开发中的常用技术,其中的热补丁正在被越来越多的开发团队所使用,它涉及到dalvik虚拟机和android ...
随机推荐
- JQuery阻止冒泡事件on绑定中异常情况分析
科普下事件冒泡以及默认行为,以下面例子举列子: 事件冒泡:当点击内部button元素时,会触发自身及外层 a的点击事件,这就是事件冒泡引起的.事件会随着 DOM 的层次结构依次向上传播. 事件 ...
- 数据结构和算法 – 11.高级排序算法(下)
三.选择类排序 3.1.简单选择排序 http://www.cnblogs.com/tangge/p/5338734.html#XuanZe 3.2 堆排序 要知道堆排序,首先要了解一下二叉树的模型. ...
- react.js基本操练
慢慢了解其它的JS前端框架... var data = [{ "when": "2 minutes ago", "who": "J ...
- 手机WebAPP设计注意事项和解决方法
1. 基本手机网页设计 1.1 wap端的网站表头 wap端的网站,写的时候首先注意表头,因为是手机端的,所以和我们平常用的web端页面的不一样,表头为: 1.2 尽量少使用水平滚动. 水平滚动除了比 ...
- 手机web页面制作时的注意事项
一.手机页面的标准头规范 字符编码使用utf-:指定页面手机内存缓存中的存储时间段 device-width:通知浏览器使用设备的宽度作为可视区的宽度 initial-scale - 初始的缩放比例 ...
- [转]svn常用命令
谢谢原作者:http://blog.sina.com.cn/s/blog_963453200101eiuq.html 1.检出svn co http://路径(目录或文件的全路径) [本地目录全路 ...
- ListView遍历每个Item出现NullPointerException的异常(转)
在使用ListView过程中我们有时候需要遍历取得每个Item项中的一些数据(比如每个Item里面有TextView,需要获取它的文本等等),但是我们在遍历过程中经常会遇到NullPointerExc ...
- Codeforces Beta Round #89 (Div. 2) E. Bertown roads(Tarjan、边双连通分量)
题目链接:http://codeforces.com/problemset/problem/118/E 思路:首先要判断图是否是边双连通,这个Tarjan算法可以判断,若low[v] > dfn ...
- Redis学习笔记(1) Redis介绍及基础
1. Redis的特性 (1) 存储结构 Redis(Remote Dictionary Server,远程字典服务器)是以字典结构存储数据,并允许其他应用通过TCP协议读写字典中的内容.Redis支 ...
- LoadRunner 脚本学习 -- 动态储存方式和静态储存方式
我们在定义变量是,根据定义的位置不同,分为全局变量与局部变量.我出生在一个叫“舞阳”的小县城,在这个县城中也有人名“舞阳”,前一个作用于整个县城,后一个只作用于他个人.那么从变量值的存在生存期角度,又 ...