今天的主角是AspectJ,主要用于不想侵入原有代码的场景中,例如SDK需要无侵入的在宿主中插入一些代码,做日志埋点、性能监控、动态权限控制、甚至是代码调试等等。
接入说明
首先,需要在项目根目录的build.gradle中增加依赖:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath ‘com.android.tools.build:gradle:2.3.0-beta2’
classpath ‘com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.6’
}
}
然后再主项目或者库的build.gradle中增加AspectJ的依赖:
compile ‘org.aspectj:aspectjrt:1.8.9’
同时在build.gradle中加入AspectJX模块:
apply plugin: ‘android-aspectjx’
这样就把整个Android Studio中的AspectJ的环境配置完毕了,如果在编译的时候,遇到一些『can’t determine superclass of missing type xxxxx』这样的错误,请参考项目README中关于excludeJarFilter的使用。
aspectjx {
//includes the libs that you want to weave
includeJarFilter ‘universal-image-loader’, ‘AspectJX-Demo/library’
//excludes the libs that you don’t want to weave
excludeJarFilter ‘universal-image-loader’
}
基本使用
直接看代码,Activity中:
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
testMethod();
}
private void testMethod() {
Log.e(DemoAspect.TAG, “testMethod-invoke”);
}
新建DemoAspect类:
&