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())
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章