我一直试图使用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 {
// ...
}
我们还有什么方法可以开始拦截第三方功能吗?
答案 0 :(得分:3)
解释已经多次给出的另一个答案:
您只能编织自己的代码
基本上与Android的方面只能在编译时工作,通常会编织自己的代码。如果您使用的是没有源代码的现有代码(例如Android框架),编译器将无权修改这些代码。在您的情况下,您只能在代码访问第三方库时捕获。
这意味着如果您想拦截第三方库,则需要使用"call(* *(..))"
代替"execution(* *(..))"
答案 1 :(得分:0)
你可以编织第三方图书馆'代码my gradle-aspectj plugin。
这可能是因为Transform API,它处理所有项目源,不仅是src/*
包,还有jar / aars,子模块。
但要小心使用第三方代码编织,可能会导致意外行为。