<分区>
我试图找到面向方面的框架,它修改 .java 源文件而不是 .class 本身,到目前为止没有运气?我知道这可能是个愚蠢的想法……但我想要了解粘贴到 .class 的确切代码是什么。
基本上,我正在尝试为大型 android 项目应用日志记录和其他方面。我正在玩 AspectJ,但问题之一是我们已经达到方法声明限制,我不能只添加 AspectJ 以打包到 .apk 中。但是,如果没有 AspectJ 库,我将无法获得类定义异常(原因:java.lang.NoClassDefFoundError:org.aspectj.runtime.reflect.Factory)
您不太可能找到在源代码上运行的 aspectJ 等价物。
您似乎想要的是一个源到源程序转换工具,它可以复制方面插入(或足以进行日志记录)。
实际上,转换系统需要了解 Java 实体的命名方式,以便对命名的 Java 实体执行转换。
您必须编写应用方面的转换;由于某些 AspectJ 方面会做涉及控制流的相当复杂的事情,您可能会发现某些转换很难编写。日志记录相对容易。
您将运行转换工具以将方面应用到您的源代码库,生成一个方面化的源代码库。生成的代码库将被编译并交付到 Android 上下文中。转换系统本身的任何内容都不会作为超重行李包括在内。作为插入方面的一部分,您可能会发现有必要插入对其他库的调用(因为 AspectJ 似乎发现需要支持库“runtime.reflect.Factory”),但至少您知道代码是什么;你会有可检查的源代码。事实上,您会知道,因为此类调用在转换规则本身中是直接可见的。
在我所知道的转换工具中,只有我们的 DMS Software Reengineering Toolkit 能够将 Java 理解到命名级别,并处理控制流。 DMS 可以应用以显式转换规则形式编码的方面。