简单易用的android 热修复
WandFix
当你的项目已经上线,一个BUG被发现却已经为时已晚,这时候悔恨自责都已经于事无补,甚至还会被伙伴们打上不靠谱的标签,这时候你想不想像哈利波特一样,魔法杖一挥BUG瞬间消除,没错拿着WindFix你就可以实现这一点。
About
WandFix是一个可以使用注解来注入实现类对象的库,基于java APT+反射+classloader,因此不需要使用new来初始化对象。另外它还可以动态加载指定.apk .dex .jar .class文件,使用注入设置优先级的方式来选择注入class类的来源,因此利用此种方法,该项目还可以使得被注解的类获得热修复的能力!
使用WandFix只需要对变量名添加注解即可实现对象的注入。而热修复功能的实现既是用对象注入的这种途径,通过更换热修复包替换实现类,来达到每次注入的对象都为最后改动过的,实现热修复的目的。当然,如果您不想使用热修复功能,只是想方便的注入对象,直接添加注解也是可以的,因为如果它在热修复包中没有找到对应的实现类的话,会尝试从项目本地来加载对应的类,保证程序的稳定。
本项目Demo效果预览:
优点:
- 类似于黄油刀可以直接对成员变量添加@InjectObject("实现类全名")注解,来绑定热修复包中的实现类。
- 无需关闭应用即可使修复包生效。
- 与mvp模式搭配使用效果最佳。
- 可以自己定义需要热修复的类。
- 可以自己配置dex加密算法,保护dex文件的安全。
- 可以通过注解单独设置某个对象是否禁用双亲委托。
- Activity动态代理功能,2019-2-19 新增
- 支持加载外部布局、图标、颜色等资源文件。
使用方法:
git clone https://github.com/miqt/WandFix.git
复制代码
添加依赖:
compile project(':wand')
annotationProcessor project(':wand-compiler')
复制代码
- 实现activity动态代理
- 实现单个类文件的热修复
- 加载apk插件中的资源文件
实现activity动态代理
先新建一个activity,继承ProxyActivity,然后添加@BindProxy
注解
//绑定代理类
@BindProxy(clazz = TextActivityProxy.class)
//必须继承 ProxyActivity
public class TextActivity extends ProxyActivity {//这里什么都不用写
}
复制代码
然后新建一个class 继承 ActivityProxy 实现代理方法
//每个代理类都要设置
@AddToFixPatch
public class TextActivityProxy extends ActivityProxy {public TextActivityProxy(ProxyActivity acty) {super(acty);}@Overridepublic void onCreate(@Nullable Bundle savedInstanceState) {mActy.setContentView(R.layout.activity_hello);...}...
}
复制代码
直接startActivity(new Intent(this,TextActivity.class));
启动这个activity,代理就生效了,后来如果改动代理类,可以直接通过打包热修复包下发下去。
实现单个类文件的热修复
public class MainActivity extends AppCompatActivity implements Wand.MotorListener {@InjectObject(//指向类的全名value = "com.miqt.demo.presenter.AppPresenterImpl",//设置双亲委托//项目开发中建议使用PROJECT,优先应用本地类库。//项目发布时,应修改为NEVER,优先应用热修复包中的类库。level = ParentalEntrustmentLevel.NEVER)AppPresenter ap;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//可以在application中初始化一次即可Wand.get().init(this).listener(this);}public void getStr(View view) {//使用注解注入对象必须要调用这一行ClassInstall.inject(this);//或者带参数的构造方法//Map<String, Object[]> pramHouse=new HashMap<>();//pramHouse.put("com.miqt.demo.presenter.AppPresenterImpl",new Object[]{"hello"});//ClassInstall.inject(this,pramHouse);//也可以不使用注解注入的方式初始化对象//ap= ObjectFactory.make("com.miqt.demo.presenter.AppPresenterImpl"/*,构造参数*/);//ap= ObjectFactory.make(AppPresenterImpl.class/*,构造参数*/);String str = ap.getStr();Toast.makeText(this, str, Toast.LENGTH_SHORT).show();}
}
复制代码
加载apk插件中的资源文件
//先根据apk插件文件路径创建PluginResources//需要文件读写权限才行PluginResources manager = new PluginResources(context, pluginApkPath);//颜色资源加载int id=manager.getId("text_color", "color");int color = manager.getResources().getColor(id, context.getTheme());textView.setTextColor(color);//布局加载View main_layout=manager.getLayout("activity_main");
复制代码
相关注解用法及作用说明
- @InjectObject 添加到成员变量上,对该成员变量注入对象
- @AddToFixPatch 添加到类上,无需参数,表示该类是热修复相关的类,在编译期生成打包脚本的时候会将打了这个注释的类添加到打包列表中,如果有@InjectObject注解指定过的类,也可以不加。
- @BindProxy 添加到activity类上,绑定指定的activity代理
Other
如何创建并应用热修复包
具体更多用法请移步Wiki
欢迎提出问题和宝贵意见。如果您觉得这个项目还不错,就点个star吧( ̄▽ ̄)~*
转载于:https://juejin.im/post/5c8860fce51d4562de4677b2
简单易用的android 热修复相关推荐
- 服务器中的热修复怎么做,Android 热修复(全网最简单的热修复讲解)
首先!我们抛开网上的热修复框架不谈,我们来通过原理手动实现一个热修复工具,在撸码之前我们先通过一张图来了解热修复的流程. Android热修复 ACCCB328-AF5C-4BD9-AD08-6F7D ...
- Android 热修复原理篇及几大方案比较
热修复说白了就是"即时无感打补丁",比如你们公司上线一个app,用户反应有重大bug,需要紧急修复.2015年以来,Android开发领域里对热修复技术的讨论和分享越来越多,同时也 ...
- 热修复系列——Android热修复技术进阶篇
目录 1 前言 2 热修复技术 2.1 Dexposed 2.2 AndFix 2.3 QZone 2.4 Tinker 2.6 epic 2.7 YAHFA 2.8 FastHook 2.9 美团R ...
- Android热修复之 阿里开源的热补丁
1.概述 上一期讲到Android热修复之 - 收集崩溃信息上传至服务器,我们获取到用户手中上线的崩溃信息上传到服务器后该怎么办?如果直接发布版本要用户去下载肯定不乐意.这一期我们来看一下怎么去打 ...
- 微信 Tinker 负责人张绍文关于 Android 热修复直播分享记录
2019独角兽企业重金招聘Python工程师标准>>> 微信 Tinker 负责人张绍文关于 Android 热修复直播分享记录 来源:微信技术团队的公众号WeMobileDev 热 ...
- 【Android 热修复】热修复原理 ( Dex 文件拷贝后续操作 | 外部存储空间权限申请 | 执行效果验证 | 源码资源 )
文章目录 一.Dex 文件准备 二.外部存储空间权限申请 1.清单文件申请权限 2.动态申请权限 三.文件拷贝 1.文件拷贝 2.执行效果 四. 源码资源 一.Dex 文件准备 在 [Android ...
- 深入解析阿里Android热修复技术原理
前言:本文框架 什么是热修复? 热修复框架分类 技术原理及特点 Tinker框架解析 各框架对比图 总结 通过阅读本文,你会对热修复技术有更深的认知,本文会列出各类框架的优缺点以及技术原理,文章末尾简 ...
- Android热修复技术原理详解(最新最全版本)
本文框架 什么是热修复? 热修复框架分类 技术原理及特点 Tinker框架解析 各框架对比图 总结 通过阅读本文,你会对热修复技术有更深的认知,本文会列出各类框架的优缺点以及技术原理,文章末尾简单 ...
- [读书笔记] 深入探索Android热修复技术原理 (手淘技术团队)
热修复技术介绍 探索之路 最开始,手淘是基于Xposed进行了改进,产生了针对Android Dalvik虚拟机运行时的Java Method Hook技术--Dexposed. 但该方案对于底层Da ...
- Android 热修复之DexPatch 介绍
简介:Android 热修复之DexPatch 介绍 1. 方案介绍 为了解决Native模块上线后的问题,mPaas[1] 提供了热修复功能,实现不发布客户端apk场景下的热修复.目前Android ...
最新文章
- Office Live for Small Business--开启您创业的大门
- Python异步通信模块asyncore
- 套接字编程——基于UDP协议
- SpringSecurity OAuth2四种模式说明
- 利用遗传算法求解TSP问题
- 应急卫星通信系统项目建设要求
- 【web开发】js实现表单提交
- python乌龟赛跑_Python之龟兔赛跑
- 如何恢复RAW格式移动硬盘的数据
- SPSS Modeler泰坦尼克号幸存者分析
- html文件记事本打开乱码,如何解决记事本打开出现乱码
- MediaSession和MediaSessionService的交互流程梳理
- ModbusPoll和ModbusSlave使用(搭配VSPD,串口接收发数据)
- 如何用JS实现轮播图!
- 信息安全初学者容易犯的三个毛病
- pandas取出符合条件的某单元格的值
- VBA基础语法:循环语句
- Rational 最新软件试用下载地址
- 吐血推荐 | 珍藏多年的 Chrome 插件,务必收藏
- Best regards缩写是什么
热门文章
- 【图像压缩】基于matlab行程编码(RLE)图像压缩【含Matlab源码 404期】
- 【TSP】基于matlab蚁群算法求解旅行商问题【含Matlab源码 398期】
- ai面向分析_2020年面向企业的顶级人工智能平台
- php系统变量有哪些,php预定义系统变量
- prolog 从list中取出一个_二、redis中Hash、Set、SortedSet应用场景
- bin转txt工具_Shell笔记之常用工具
- java自己写框架_用java自己动手写个简单RCP框架
- sping jdbc 链接mysql_java项目使用spring jdbc连接数据库
- java 图片渐变消失_在线等:java图片怎样使之渐变消失
- FPGA IP核分类