Idea查看源代码警告Library source does not match the bytecode for class XXX解决办法

背景

执行代码的时候抛出异常,想在第三方jar文件中打断点分析问题原因,进入该文件后IDEA给出警告
在这里插入图片描述
翻译过来就是资源库的源代码与类的字节码不匹配,当前我们在UpgraderManager.java中,右侧有一个Open.class file按钮,点击之后就会跳转到UpgradeManager.class中,点击show diff或者对比这两个文件可以看到是不一样的。

这个问题影响还是挺大的,具体的现象就是程序真正运行的代码行数,与我们看到的代码行数不一致,也就没法打断点分析程序的走向

分析

我们在使用第三方jar时,用的是编译好的字节码文件,即.class文件,而不是源文件.java。而.class文件我们是看不懂的,如果我们想在IDE中看第三方源代码,可以通过IDE的插件进行自动反编译,但是一般来说不会有注释,而且参数名也不是原来的参数名,会被反编译成var1, var2, var3等。
在这里插入图片描述

当然也可以自己下载源文件后进行配置。

一般来说第三方jar在打包时也会将源文件和class文件一起发布,所以引用这个jar时IDE会自动引用它的源文件,可以通过如下方式进行查看
以IDEA为例,点击File->Project Structure..
在这里插入图片描述
在弹出的窗口中选择Library菜单,中间的窗口部分选中包含警告文件的jar,在右侧可以看到Classes字节码,Sources源代码以及JavaDocsjava文档对应的jar
在这里插入图片描述
到这里可以分析出,警告的内容就是说xxx.jar中内容与xxx-source.jar中的内容不一致,进入到该文件夹中继续进行查看
在这里插入图片描述
虽然jar与source.jar的版本一致,但是修改的日期不一样,也就是说由于某种原因导致了jar与source.jar里边的内容不一致了,使用解压软件进行查看里边的某些文件也会发现,有些代码在source.jar中存在但是在jar中却不存在

解决办法

知道了问题原因,那么就知道怎么解决了。
很简单,将该版本中的所有jar全部删除,重新用maven下载
本例中就需要将xxx.2.1.0这个文件夹全部删除,然后在IDEA中使用maven reload project(旧版本为maven reimport)重新下载该jar,或者自行去maven仓库网站下载亦可。下载之后再查看该文件,就没有警告了,断点就可以继续打了。

  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Android运行时修改字节码是指在Android应用程序的运行过程中,通过修改字节码文件来动态改变程序的行为。这种技术一般用于实现一些高级的功能或者实现对已有程序的增强,有助于优化性能、扩展功能等。 在Android系统中,Dalvik虚拟机是负责解释和执行字节码的,而字节码是由Java源代码编译而来的。通过Dalvik的类加载器机制,我们可以在运行时对字节码文件进行修改和替换。 Android运行时修改字节码的具体实现方法有很多,常见的一种是使用字节码操控库,例如ASM(Objectweb ASM),它是一个强大的Java字节码操控库,可以用来读取、修改、生成Java字节码。开发者可以使用ASM库对Android应用程序的字节码进行修改,例如插入新的方法、修改方法体、修改字段等。 通过在应用程序的关键位置插入修改字节码的代码,可以实现一些有趣的功能。例如,我们可以通过修改字节码来实现方法的动态插桩,即在方法的开头和结尾处插入额外的代码,用于统计方法的执行时间、记录方法的调用顺序等。这对于性能分析和调试非常有帮助。 另外,Android运行时修改字节码也可以用于实现一些热修复的功能。我们可以在应用程序的运行过程中下载新的补丁包,然后通过修改字节码,将补丁代码动态地插入到已有的方法中,从而修复程序中的bug或者实现新功能。 总之,Android运行时修改字节码是一种高级的技术手段,可以帮助开发者实现一些灵活而强大的功能,但也需要慎重使用,因为错误的字节码修改可能导致应用崩溃或者安全风险。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值