AspectJ为onCreate()方法添加切入点执行

时间:2015-12-23 12:59:14

标签: android aspectj

我想为我的Android应用程序编写一个常见的切入点执行,它有3个活动,在所有3个活动中只切入onCreate()个方法。我该如何写这个切入点?

1 个答案:

答案 0 :(得分:1)

一般来说:

pointcut GIVE_IT_A_NAME() : execution(void Activity.onCreate(..));

或者,如果您想获取所有Activity子类,请添加+

pointcut GIVE_IT_A_NAME() : execution(void Activity+.onCreate(..));

然后,您可以使用切入点,例如:

before() : GIVE_IT_A_NAME() {
    // do something
}

你也可以使用after(),这取决于你想要实现的目标。

正如你所说,你需要它为你的课程,事实上,请注意你不能在Android核心课程中注入代码,因为它们不是你的APK的一部分,而是在设备上提供。

如果你想确保只注入你的类,你可以为切入点定义添加一些条件:

pointcut GIVE_IT_A_NAME() : execution(void *.onCreate(..))
&& within(YOUR_MAIN_PACKAGE_NAME.*)
&& this(android.app.Activity+);

因此切入点必须在该特定包名称内,并且类类型必须是android.app.Activity或子类。当然,如果您使用的是Android支持库,则需要更改最后一个条件。