使用AspectJ拦截android中的第三方功能

时间:2016-08-28 08:41:29

标签: java android aop aspectj

我一直试图使用aspectJ拦截属于我的应用程序一部分的所有第三方函数,但不知何故我只能拦截我声明的函数而不是第三方库声明的函数。

我正在使用从this tutorial引用的这个aspectJ gradle配置。

以下是我的方面:

private static final String POINTCUT_METHOD = "execution(* *(..))";

@Pointcut(POINTCUT_METHOD) 
public void methodAnnotatedWithDebugTrace() {}

@Around("methodAnnotatedWithDebugTrace()") 
public Object weaveJoinPoint(ProceedingJoinPoint joinPoint) 
            throws Throwable { 
    // ...
}

我们还有什么方法可以开始拦截第三方功能吗?

2 个答案:

答案 0 :(得分:3)

解释已经多次给出的另一个答案:

  

您只能编织自己的代码

基本上与Android的方面只能在编译时工作,通常会编织自己的代码。如果您使用的是没有源代码的现有代码(例如Android框架),编译器将无权修改这些代码。在您的情况下,您只能在代码访问第三方库时捕获。

这意味着如果您想拦截第三方库,则需要使用"call(* *(..))"代替"execution(* *(..))"

答案 1 :(得分:0)

你可以编织第三方图书馆'代码my gradle-aspectj plugin。 这可能是因为Transform API,它处理所有项目源,不仅是src/*包,还有jar / aars,子模块。 但要小心使用第三方代码编织,可能会导致意外行为。