2

我试图找到修改 .java 源文件而不是 .class 本身的面向方面的框架,但到目前为止没有运气?我知道这可能是一个愚蠢的想法......但我想要了解将确切代码粘贴到.class。

基本上我试图为大型 android 项目应用日志记录和其他方面。我在玩 AspectJ,但问题之一是我们已经达到方法声明限制,我不能只添加 AspectJ 以打包到 .apk 中。但是没有 AspectJ 库,我没有得到类 def 异常(原因:java.lang.NoClassDefFoundError:org.aspectj.runtime.reflect.Factory)

4

1 回答 1

1

您不太可能找到对源代码进行操作的 aspectJ 等效项。

您似乎想要的是一个源到源程序转换工具,它可以复制方面插入(或足以进行日志记录)。

实际上,转换系统需要了解 Java 实体是如何命名的,以便对命名的 Java 实体进行转换。

您必须编写应用方面的转换;由于某些 AspectJ 方面做了涉及控制流的相当复杂的事情,您可能会发现一些转换很难编写。记录相对容易。

您将运行转换工具以将方面应用到您的源代码库,生成一个方面化的源代码库。生成的代码库将被编译并交付到 Android 上下文中。转换系统本身的任何内容都不会被视为多余的包袱。作为插入方面的一部分,您可能会发现有必要插入对其他库的调用(因为 AspectJ 似乎发现需要支持库“runtime.reflect.Factory”),但至少您知道代码是什么;你会有可检查的源代码。事实上,您会知道,因为此类调用将直接在转换规则本身中可见。

在我所知道的转换工具中,只有我们的 DMS Software Reengineering Toolkit 将 Java 理解到命名级别,并处理控制流。DMS 可以应用以显式转换规则形式编码的方面。

于 2013-01-11T12:16:19.733 回答