java - 寻找允许修改源代码的 java (Android) 面向方面的框架

标签 java android aspect

<分区>

我试图找到面向方面的框架,它修改 .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 可以应用以显式转换规则形式编码的方面。

关于java - 寻找允许修改源代码的 java (Android) 面向方面的框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14276381/

相关文章:

java - eureka服务器中fetchRegistry属性有什么用?

java - 使用 IBM MQ 资源适配器相对于 RemoteJMSProvider 的优势是什么?

java - 简化 ifPresentOrElse 链

java - 如何在玻璃 Activity 中滚动实时卡片

android - 如何加快我的Android-openCV应用程序的速度?

android - 如何使用 adb 在 Android 11 上触发 BroadcastReceiver?

java - AspectJ 找不到 .raw 父类(super class)

java - 当同时使用方面和事务时,它是代理之上的代理吗?

java - Spring 启动 : config in "additional-location" was overrided by "application-{profile}"

java - 将参数传递给来自 xml 的不同切入点的相同切面方法