关于 transform 中操作 class 字节码的问题
来源:11-2 技能拓展

xxxxjase普通
2021-08-22
老师好,是这样的:
我有一个 class 文件生成到了如下目录(app 是主模块)
/app/build/intermediates/javac/debug/classes/com/cool/AppApplication.class
@CoolTest(
main = true
)
public class AppApplication extends Application {
public AppApplication() {
}
AppApplication 有个注解。
我现在想在 transform 中去加载这个类,判断是否被注解修饰,以及 main 的取值,然后进一步处理,但是我发现都报错了:
- 使用 GroovyClassLoader,提示找不到类异常;
GroovyClassLoader groovyClassLoader = new GroovyClassLoader()
// file.absolutePath : /app/build/intermediates/javac/debug/classes/com/cool/AppApplication.class
groovyClassLoader.addClasspath(file.absolutePath)
Class currentClass = groovyClassLoader.loadClass("com.cool.AppApplication") // class
> java.lang.ClassNotFoundException: com.cool.AppApplication
想问下我该怎么弄呢???
写回答
1回答
-
allenfeng
2021-08-23
你好,需求是“transform 中去加载这个类,判断是否被注解修饰,以及 main 的取值,然后进一步处理”:
类的注解信息以及注解的取值都在字节码中,所以一般是采用ASM中ClassReader去读取与解析对应字节码,即可满足你的要求。
可以参考这个链接去撰写相关代码,也可以搜索更多类似的例子。
062021-08-23
相似问题