我在一些 kotlin 代码中有一些抽象项目(让我们称之为项目)字节码(它是每个类的),每个类字节码都存储为 ByteArray;任务是告诉每个类中的哪些特定方法在项目的构建之间被修改。也就是说,同一个类的The Project有两个ByteArray,但是属于不同的版本,需要比较准确。一个简单的例子。假设我们有一个简单的类:
class Rst {
fun getjson(): String {
abc("""ss""");
return "jsonValid"
}
public fun abc(s: String) {
println(s)
}
}
它的字节码存储在 oldByteCode 中。现在类发生了一些变化:
class Rst {
fun getjson(): String {
abc("""ss""");
return "someOtherValue"
}
public fun newMethod(s: String) {
println("it's not abc anymore!")
}
}
它的字节码存储在 newByteCode 中。这是主要目标:将 oldByteCode 与 newByteCode 进行比较。
这里我们有以下变化:
getjson() 方法已更改;
abc() 方法已被删除;
newMethod() 已创建。
因此,如果方法的签名保持不变,则该方法已更改。如果没有,它已经是一些不同的方法了。
现在回到实际问题。我必须通过字节码了解每个方法的确切状态。我现在拥有的是 jacoco 分析器,它将类字节码解析为“包”。在这些包中,我有包、类、方法的层次结构,但只有它们的签名,所以我无法判断方法的主体是否有任何变化。我只能跟踪签名差异。是否有任何工具、库可以将类字节码拆分为其方法字节码?例如,我可以用它们计算哈希值并进行比较。也许 asm 库对此有任何处理?欢迎任何想法。
富国沪深
相关分类