【发布时间】:2015-11-05 13:03:07
【问题描述】:
我编写 Android 应用程序,我想使用自定义字体。所以,我决定使用Calligraphy。
要使用这个库,我需要在每个 Activity 中重写基本方法 attachBaseContext:
public class MainActivity extends AppCompatActivity {
...
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
}
...
}
当然我可以使用 OOP,但我想使用 AspectJ。
为了在我的gradle 项目中包含AspectJ,我使用gradle-android-aspectj-plugin。
这是我方面的代码:
@Aspect
public class MyAspect {
@Before("execution(void com.youtubeplaylist.app.ui.activity.*+.attachBaseContext(context))")
public void beforeCalligraphy(ProceedingJoinPoint thisJoinPoint) throws Throwable {
Object[] args = thisJoinPoint.getArgs();
Context c = (Context) args[0];
c = CalligraphyContextWrapper.wrap(c);
args[0] = c;
thisJoinPoint.proceed(args);
System.out.println("Aspect finished successfully");
}
}
因此,“方面已成功完成” 永远不会打印。请帮助我了解问题所在。
【问题讨论】:
-
你在项目的.project文件中添加了ajdt支持吗?
-
对不起@Materazzi06,我不明白你的意思。我github.com/uPhyca/gradle-android-aspectj-plugin,我有
gradle项目。我没有任何*.poject文件。 -
好吧,对不起。我在 Eclipse 中使用 AspectJ,即使对于私有和超类方法,一切似乎都很好。我不确定 gradle 项目。
-
你可能不得不去调用加入点而不是执行:stackoverflow.com/a/18149106/2191746