如何在Android Studio中配置AspectJ

12

我正在尝试在Android Studio中配置AspectJ
但是经过多次尝试后,它仍然无法正常工作!令人惊讶的是,我能够在Eclipse Kepler版本中使其正常工作。

我在Android Studio中遵循的步骤

  1. 创建了一个样例 Android 项目
  2. 在文件 > 设置中搜索 AspectJ,位于插件部分Plugin for AspectJ
  3. 假设在 Studio 中除了配置 build.gradle 文件之外不需要进行其他操作
  4. compile 'org.aspectj:aspectjrt:1.8.1' 添加到 build.gradle (Module:app) 中
  5. 返回按钮按下检测创建 Analytics_onBackPressed.aj
  6. 点击事件检测创建 Analytics_OnClick.aj
  7. 组件创建事件检测创建 Analytics_onCreate.aj
  8. 创建必要的依赖类,上述 *.aj 类将在内部调用这些类
  9. 在清单文件中添加所需权限
  10. 运行该项目未检测到任何事件(按钮点击、oncreate 或返回按钮点击)
  11. 按照以下链接 ReferenceLinkOne , ReferenceLinkTwoReferenceLinkThree 进行操作

我的问题是,为了让AspectJ在Android Studio中工作,还需要什么?


在Eclipse中遵循的步骤,并使AspectJ正常工作

  1. 下载了 Eclipse Kepler 版本
  2. 通过安装新软件选项搜索 http://download.eclipse.org/tools/ajdt/43/update
  3. 安装了 AspectJ Development Tools (Required) .
  4. 创建了示例 Android 项目
  5. 后退按钮按下检测 创建了 Analytics_onBackPressed.aj
  6. 点击事件检测 创建了 Analytics_OnClick.aj
  7. 组件 oncreate 事件检测 创建了 Analytics_onCreate.aj
  8. 在清单文件中添加所需权限
  9. 右键单击项目并通过以下方式将项目转换为 AspectJ Converted project to AspectJ
  10. 使用 AspectJ 运行时库配置 Java 构建路径
  11. 现在运行项目时,我能够检测到组件的 oncreate 和后退按钮按下事件

使用的环境

Android Studio : 2.1.2

JRE : 1.8.0

Windows 7 Enterprise

非常感谢您的帮助!


编辑:1,从输出来看,AspectJ仍未正确配置

根据此链接,我从Eclipse中创建了包括*.aj文件和相应依赖项的jar文件。在创建jar文件时排除了AndroidManifest.xml并创建了jar

在Android Studio中创建项目。将此*.jar文件放置在libs文件夹中。(apps> libs)。我已启用如下所示的AspectJ waving

Enabled AspectJ waving

现在搜索AspectJ的属性并启用
enter image description here
现在运行该项目,应该会创建我在插件中放置的*.aj文件中的日志,但不幸的是这些日志未打印在Android Studio日志中。

我得出的结论是,这个项目中仍未启用AspectJ,或存在配置错误。

3个回答

6

声明:本人是非官方AspectJ编织器插件的作者。

AspectJ编织器插件文档中所述,此插件不支持编译.aj文件。

要使用此插件,您有两个选择:

  • .aj切换到注解样式方面。
  • 在IDE(IntelliJ Community / Android Studio)之外编译.aj文件,例如使用Maven / Gradle / Ant,并将其打包成.jar。 将此.jar作为项目的依赖项并按照文档中所述单击“搜索方面...”按钮。

我已经尝试在Eclipse中使用*.aj文件和依赖项配置插件,并生成了*.jar文件。现在从Android Studio输出的结果与预期不符。我已将输出包含在我的编辑中。有任何线索我做错了什么吗? - Sreehari
仅凭“它不起作用”很难提供帮助。请附上IntelliJ编译器的输出(在重新构建项目时)和/或intellij.log以获得进一步协助。 - Mattias Jiderhamn

2

我曾经尝试在Android Studio中使用AspectJ,但成果不一。这个链接帮助我解决了部分问题(假设您的项目已经使用Gradle构建)。http://fernandocejas.com/2014/08/03/aspect-oriented-programming-in-android/

通过在build.gradle文件中使用自定义代码块,我可以成功地在我的项目中编译和织入使用注释定义的方面(aspects)的.java文件。然而,当我尝试使用.aj文件定义本地方面时,这种方法却无效。希望这可以帮到您。


1
算了,我犯了一个愚蠢的错误,导致我的本地.aj文件无法正确编译。这是在Android Studio中没有正式支持AspectJ的缺点:没有编译错误。现在我能够使用该链接中概述的方法正确地使本地.aj文件工作。 - Justin Hong
这里谈论到一个库方面的代码和安卓应用程序代码。这个库是什么?我们需要创建它吗?DebugTrace.java,StopWatch.java,DebugLog.java和TraceAspect.java将放在哪里?我已经完全困惑了。 - Sreehari

0

1
抱歉,但这是不正确的。IntelliJ Ultimate 通过捆绑的Jetbrains插件具有对AspectJ的“本地”支持。AspectJ weaver plugin - 我是其作者 - 是在Jetbrains添加AspectJ支持之前创建的。它已不再维护,但仍可用于非Ultimate版本的IntelliJ产品,如IntelliJ Community和Android Studio。 - Mattias Jiderhamn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接