使用android的aspectj,从未调用aspect

使用android的aspectj,从未调用aspect,android,android-studio,aspectj,Android,Android Studio,Aspectj,在我正在工作的项目中,我们最近增加了一些安全级别,现在我不想重写整个网络逻辑,如果它可以用AOP更容易地完成的话 因此,我试图截取整个应用程序中使用的RequestListener的“onRequestSuccess”方法。 为此,我做了一个简单的方面: import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation

在我正在工作的项目中,我们最近增加了一些安全级别,现在我不想重写整个网络逻辑,如果它可以用AOP更容易地完成的话

因此,我试图截取整个应用程序中使用的RequestListener的“onRequestSuccess”方法。 为此,我做了一个简单的方面:

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;


@Aspect
public class NetworkResponseAspect {

@Around("execution(public void *.onRequestSuccess(..))")
public void intercept(ProceedingJoinPoint joinPoint){
    System.out.println("call intercepted " + joinPoint);


    try {
        joinPoint.proceed();
    } catch (Throwable e) {
        System.out.println("wut");
    }

}
}

我添加了aspectjweaver依赖项:编译'org.aspectj:aspectjweaver:1.8.6'

这似乎是可行的,至少android studio能够识别注释

我在“joinpoint.procedure()”调用上放置了一个断点,并在调试模式下启动了应用程序。
但当我登录(触发一个这样的侦听器的操作)时,什么都没有发生。我遗漏了什么吗?

在Maven中,您可以使用AspectJ Maven插件(当前版本为1.7),在Gradle中使用类似的插件。如果您想使用CTW(编译时编织),这就是编译所需要的。这些插件应该已经包含了对aspectjtools.jar的依赖,它包含了AspectJ编译器和其他东西。如果使用CTW,则需要aspectjrt.jar(AspectJ runtime)作为默认范围(编译)或依赖项,因为它在运行时也需要


但是,如果您想使用加载时编织(LTW),则需要通过
-javaagent:…
在JVM命令行上使用aspectjweaver.jar,因为编织代理需要在加载第一个应用程序类之前钩住类加载。注意:编织代理还包含AspectJ运行时类,因此在这种情况下,您不需要对运行时有额外的依赖关系。

在Maven中,您将使用AspectJ Maven插件(当前版本为1.7),在Gradle中类似。如果您想使用CTW(编译时编织),这就是编译所需要的。这些插件应该已经包含了对aspectjtools.jar的依赖,它包含了AspectJ编译器和其他东西。如果使用CTW,则需要aspectjrt.jar(AspectJ runtime)作为默认范围(编译)或依赖项,因为它在运行时也需要


但是,如果您想使用加载时编织(LTW),则需要通过
-javaagent:…
在JVM命令行上使用aspectjweaver.jar,因为编织代理需要在加载第一个应用程序类之前钩住类加载。注意:编织代理还包含AspectJ运行时类,因此在这种情况下,您不需要对运行时有额外的依赖关系。

我的项目确实使用了gradle,但除了单独的库之外,我似乎找不到实际的插件。我确实相信CTW是实现这一点的方法,所以我尝试使用运行时工具来代替weaver库,但不幸的是,这没有什么不同。我发现的唯一有希望的事情就是这个项目:我想我会尝试一下,这个插件的名字听起来很不错。(我是一个专业人士,不是Gradle,但我想我用过一次插件来回答另一个问题。我必须回家才能访问我的家用电脑,不过我还在路上。)如果你想使用CTW,你肯定需要使用使用AspectJ编译器的插件来编译方面。Javac对于CTW是不够的。你肯定需要依赖aspectjrt.jar。我确实在我的项目中使用gradle,但除了单独的libs之外,我似乎找不到真正的插件。我确实相信CTW是实现这一点的方法,所以我尝试使用运行时工具来代替weaver库,但不幸的是,这没有什么不同。我发现的唯一有希望的事情就是这个项目:我想我会尝试一下,这个插件的名字听起来很不错。(我是一个专业人士,不是Gradle,但我想我用过一次插件来回答另一个问题。我必须回家才能访问我的家用电脑,不过我还在路上。)如果你想使用CTW,你肯定需要使用使用AspectJ编译器的插件来编译方面。Javac对于CTW是不够的。而且您肯定需要对aspectjrt.jar的依赖。在我的例子中,
@Before
@After
也会得到回调,但是
@about
在我的例子中,
@Before
@After
也会得到回调,但是
@about