如何使用asm库从库中识别重写的方法?

chhkpiq4  于 2021-06-27  发布在  Java
关注(0)|答案(0)|浏览(356)

我正在使用asm收集一些关于android项目中类的信息(使用gradle插件和GoogleTransformAPI相结合)。我想知道一个方法是否正在重写来自其超类/接口的方法。如果超类或接口是项目或本地依赖(jar)的一部分,我可以将当前方法的描述符与超类/接口中定义的所有方法进行比较。这是通过遍历整个层次结构(自下而上)完成的。如果我在描述符之间找到匹配,我就找到了一个重写的方法。
当我到达标准库中定义的超类/接口时,我的问题就出现了(比如 java.lang 或者 android.app 因为我不知道怎么去上这种课。如果库类位于当前类路径中,我可以直接从 ClassReader .
例如:

ClassReader classReader = new ClassReader("java.lang.Object");

但是如果类不在当前的类路径中,我会得到(当然) java.io.IOException: Class not found . 例如,当我尝试:

ClassReader classReader = new ClassReader("android.app.Activity");

据我所知,比较两个方法的描述符是确定一个方法是否重写另一个方法的唯一方法,因此我必须以某种方式访问超类/接口。
所以我的问题是:如何访问在标准库中定义的超类/接口(注意:不是android项目中的依赖项,我已经能够评估),或者是否有其他方法来确定override属性。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题