AspectJ-gradle-plugin-for-android:轻松让Android项目快速具备面向切面编程(Aspect Oriented Programming)的能力

想在Android中使用AspectJ进行面向切面的编程,集成步骤还是比较繁琐的。那能不能有个方便、简单、快捷方式呢?答案是可定的。

AspectJ-gradle-plugin-for-android是一个Gradle插件,它可以快速将AspectJ集成到Android应用程序中。只要你使用这个插件,你的项目将立即具备AOP(面向方面编程)的能力。

项目地址:https://github.com/averyzhong/AspectJ-gradle-plugin-for-android

该插件使用起来草鸡简单,只需两行gradle代码

1、项目根目录下的build.gradle文件中加入classpath 'com.avery.android.aspectj:aspectj-plugin:1.0.0‘

,如下所示

buildscript {
    repositories {
         google()
         jcenter()
               
    }    
    dependencies {
        ......
        classpath 'com.avery.android.aspectj:aspectj-plugin:1.0.0'
        ......  
    }
    ......
}

2、在app目录下的build.gradle文件中加入apply plugin: 'com.avery.android.aop,如下所示

    apply plugin: 'com.avery.android.aspectj'
    
    android {
        ......
    }
    dependencies {
        ......
    }

就这么两行gradle代码,让后项目就具备面向切面编程能力了。不信吗?我们举个例子:通过AOP在MainActivity的生命周期方法中打印一段日志,MainActivity(com.avery.android.aspectj.example.MainActivity)代码如下:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    protected void onStart() {
        super.onStart();
    }

    @Override
    protected void onResume() {
        super.onResume();
    }

}

日志切面类如下:

@Aspect
public class ActivityLifecycleLogAspect {
    private static final String TAG = ActivityLifecycleLogAspect.class.getSimpleName();

    @Pointcut("execution(* com.avery.android.aspectj.example.MainActivity.on*(..))")
    public void logActivityLifecycle() {}

    @Before("logActivityLifecycle()")
    public void log(final JoinPoint joinPoint) {
        Log.v(TAG, "log: " + joinPoint.toLongString());
    }

}

OK,运行项目后放下在MainActivity的每个生命周期方法中被植入了日志切面,Logcat输出如下

V/ActivityLifecycleLogAspect: log: execution(protected void com.avery.android.aspectj.example.MainActivity.onCreate(android.os.Bundle))
V/ActivityLifecycleLogAspect: log: execution(protected void com.avery.android.aspectj.example.MainActivity.onStart())
V/ActivityLifecycleLogAspect: log: execution(protected void com.avery.android.aspectj.example.MainActivity.onResume())
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值