【发布时间】:2015-12-23 12:59:14
【问题描述】:
我想为我的 Android 应用程序编写一个通用的切入点执行,它有 3 个活动,在所有 3 个活动中只切入 onCreate() 方法。这个切入点怎么写?
【问题讨论】:
我想为我的 Android 应用程序编写一个通用的切入点执行,它有 3 个活动,在所有 3 个活动中只切入 onCreate() 方法。这个切入点怎么写?
【问题讨论】:
一般:
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 支持库,则需要更改最后一个条件。
【讨论】: