Java代码变更怎么解决 热修复及调试如何实现

Java代码变更怎么解决?热修复及调试如何实现?对于Java语言来说,如果涉及代码变更,一般情况下会选择重新启动JVM来修复问题。然而重新启动意味着需要一些时间才能将异常修复,热修复的出现为实现秒级恢复故障创造了可能,接下来就给大家讲解一下。

Java热修复

目前较火的热修复方案大致分为两派:阿里系:DeXposed、andfix:从底层二进制入手(C语言);腾讯系:tinker:从Java加载机制入手。今天主要讲解基于Java加载机制,来研究热修复的实现方法。

安卓的类加载器在加载一个类时会先从自身DexPathList对象中的Element数组中获取(Element[] dexElements)到对应的类,之后再加载。在for循环中,首先遍历出来的是dex文件,然后再是从dex文件中获取class,所以,我们只要让修复好的class打包成一个dex文件,放于Element数组的第一个元素,这样就能保证获取到的class是最新修复好的class。

热修复的实现步骤:

1、得到dex格式补丁。修复好有问题的Java文件(根据bug的实际情况修改代码即可);将Java文件编译成class文件;将class文件打包成dex文件(dx指令程序)。

2、加载dex格式补丁。

3、加载jar、apk、zip格式补丁。注意这类压缩包中必须放着一个dex文件,而且对名字有要求,必须是classes.dex。

Java-debug

Java-debug-tool提供了多个trouble-shot命令,但杀手级的命令就两个,methodTrace和redefineClass。

methodTrace命令,用于快速问题发现,可以做到不暂停JVM而获取到方法调试信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值