一步步教你实现Android HotFix热更新
来源:互联网 发布:龙华行知实验学校 编辑:程序博客网 时间:2024/05/29 19:36
这篇文章是手把手教你如何实现热更新的,对于热更新的原理这里不涉及,若有疑问的请参考下面几篇文章:
1、安卓App热补丁动态修复技术介绍
https://mp.weixin.qq.com/s?__biz=MzI1MTA1MzM2Nw==&mid=400118620&idx=1&sn=b4fdd5055731290eef12ad0d17f39d4a&scene=1&srcid=1106Imu9ZgwybID13e7y2nEi#wechat_redirect
2、MultiDex与热修复实现原理
http://blg.csdn.net/hp910315/article/details/51681710
3、Android 热修复其实很简单
http://blog.csd.net/qq_31530015/article/details/51785228?locationNum=11
4、Android热修复:Andfix和Hotfix,两种方案的比较与实现
http://blog.csdn.net/yuankundong/article/details/51360798
5、Android热修复框架HotFix分析拓展
http://m.blog.csdn.net/article/details?id=51201593#
我先简要介绍一下实现热更新的一些要点:
(1)如何防止类被打上CLASS_ISPREVERIFIED的标志
(2)如何制作补丁包
(3)如何动态加载需要修复的类
下面是我实现热修复的步骤:
1、新建一个工程 HotFixDemo(包路径:com.jxnu.hotfixdemo)
2、新建module HackDex,并创建一个java文件AntiLazyLoad(包路径:com.jxnu.hackdex)
3、新建mudule HotFixLib,并将HotFix.java拷贝到HotFixLib中,并将HotFixLib添加为HotFixDemo的依赖、将Utils拷贝到项目中
4、我们在HackDex的intermediates文件夹下找到AntiLazyLoad的class文件
5、将AntiLazyLoad.class放在E盘的com—>jxnu —>hackdex目录下【目录名与AntiLazyLoad.java所在的包名一致】
6、接着执行控制台命令命令jar cvf hack.jar com,然后我们就在e盘下得到了一个hack.jar文件
7、接着就是把这个jar做成dex的jar了,由于要用到dx,而这个dx在我们的sdk工具包里,所以我把这个path.jar拷贝到sdk工具包,利用dx命令 dx –dex –output=hack_dex.jar hack.jar生成hack_dex.jar补丁包
8、将hack_dex.jar文件放入项目的assets目录下
9、新建HotFixApplication
@Override public void onCreate() { super.onCreate(); File dexPath = new File(getDir("dex", Context.MODE_PRIVATE), "hack_dex.jar"); Log.e("mainHHH","dexPath = " + dexPath.getAbsolutePath()); Utils.prepareDex(this.getApplicationContext(), dexPath, "hack_dex.jar"); HotFix.patch(this, dexPath.getAbsolutePath(), "com.jxnu.hackdex.AntiLazyLoad"); try { this.getClassLoader().loadClass("com.jxnu.hackdex.AntiLazyLoad"); } catch (ClassNotFoundException e) { e.printStackTrace(); } }
10、新建BugClass文件
public class BugClass { public String getInfo(){ return "I have been fixed"; }}
11、接着运行项目,得到BugClass的class文件,按照上面生成hack_dex的方法将BugClass做成path_dex.jar文件,并放入到assets文件夹下
12、将BugClass改为
public class BugClass { public String getInfo(){ return "I am a bug class"; }}
13、接着我们来进行测试,下面是MainActivity类
private TextView tv_info; private Button btn_test,btn_patch; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv_info = (TextView) findViewById(R.id.tv_info); btn_test = (Button) findViewById(R.id.btn_test); btn_patch = (Button) findViewById(R.id.btn_patch); btn_test.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { tv_info.setText(new BugClass().getInfo()); } }); btn_patch.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { File dexPath = new File(getDir("dex", Context.MODE_PRIVATE), "path_dex.jar"); Utils.prepareDex(MainActivity.this, dexPath, "path_dex.jar"); HotFix.patch(MainActivity.this, dexPath.getAbsolutePath(), ""); } }); }
14、没有热更新之前,点击“测试”按钮显示I am a bug class
15、接着测试打补丁,重启应用,先点击“打补丁”按钮,然后再点击“测试”按钮,然后就显示I have been fixed 了,说明补丁打成功了
项目源码地址:https://github.com/DaiQing-Zha/HotFixDemo.git
- 一步步教你实现Android HotFix热更新
- React Native带你一步步实现热更新(CodePush-Android)
- Lua热更新(hotfix)
- android:一步步实现插件化与热更新
- 阿里 HotFix 热更新 集成
- Android热修复学习(HotFix)
- android热修复技术 HotFix
- 阿里HotFix初体验 热更新
- Android高级之十三讲-HotFix、热加载和增量更新
- Android打补丁 热修复(HotFix)小结
- Android热修复框架HotFix分析拓展
- Android热修复原理(HotFix)初涉
- Android热修复之HotFix初探
- Android热修复之Hotfix接入流程
- Android:热修复(阿里hotfix使用)
- android热修复-阿里Hotfix最新版(Sophix)
- Android热更新实现原理
- Android热更新实现原理
- CSDN第一次来。听说是程序员之家啊。所以注册个帐号
- 用递归实现买鸭子问题 C语言
- 数组去重
- CNN笔记:通俗理解卷积神经网络
- IT界的技术风潮是不可以追赶的
- 一步步教你实现Android HotFix热更新
- 几步实现stm32上面移植mqtt
- 【NOI2017模拟6.20】树形图求和
- 解密之一记录算法
- 短路运算
- ssm实战--监听器,ajax返回数据,分页实体类
- 安卓开发得到屏幕宽高
- 关于anaconda 找包,安装包的一些总结(关于Anaconda中PackageNotFoundError: '' Package missing in current win-64 channe)
- 回溯算法-八皇后