好医生网站继续教育网,网站支付功能建设,黑马程序员教程,c 语言网站建设关于 AOP 的详细介绍请参考 深入理解Android之AOP本文主要介绍 怎么在 AndroidStudio 中使用 AspectJ1 . 在android studio 中新建一个项目 MyApplication2. 在 app 目录下 的 build.gradle 中完成如下配置:apply plugin: com.android.applicationimport org.aspectj.bridge.IM…关于 AOP 的详细介绍请参考 深入理解Android之AOP本文主要介绍 怎么在 AndroidStudio 中使用 AspectJ1 . 在android studio 中新建一个项目 MyApplication2. 在 app 目录下 的 build.gradle 中完成如下配置:apply plugin: com.android.applicationimport org.aspectj.bridge.IMessageimport org.aspectj.bridge.MessageHandlerimport org.aspectj.tools.ajc.Mainbuildscript {repositories {mavenCentral()}dependencies {classpath org.aspectj:aspectjtools:1.8.9}}repositories {mavenCentral()}android {compileSdkVersion 25buildToolsVersion 25.0.2defaultConfig {applicationId com.example.yqqyang.myapplicationminSdkVersion 23targetSdkVersion 25versionCode 1versionName 1.0testInstrumentationRunner android.support.test.runner.AndroidJUnitRunner}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile(proguard-android.txt), proguard-rules.pro}}}dependencies {compile fileTree(dir: libs, include: [*.jar])androidTestCompile(com.android.support.test.espresso:espresso-core:2.2.2, {exclude group: com.android.support, module: support-annotations})compile com.android.support:appcompat-v7:25.3.1compile com.android.support.constraint:constraint-layout:1.0.2testCompile junit:junit:4.12compile org.aspectj:aspectjrt:1.8.9}final def log project.loggerfinal def variants project.android.applicationVariantsvariants.all { variant -if (!variant.buildType.isDebuggable()) {log.debug(Skipping non-debuggable build type ${variant.buildType.name}.)return;}JavaCompile javaCompile variant.javaCompilejavaCompile.doLast {String[] args [-showWeaveInfo,-1.5,-inpath, javaCompile.destinationDir.toString(),-aspectpath, javaCompile.classpath.asPath,-d, javaCompile.destinationDir.toString(),-classpath, javaCompile.classpath.asPath,-bootclasspath, project.android.bootClasspath.join(File.pathSeparator)]log.debug ajc args: Arrays.toString(args)MessageHandler handler new MessageHandler(true);new Main().run(args, handler);for (IMessage message : handler.getMessages(null, true)) {switch (message.getKind()) {case IMessage.ABORT:case IMessage.ERROR:case IMessage.FAIL:log.error message.message, message.thrownbreak;case IMessage.WARNING:log.warn message.message, message.thrownbreak;case IMessage.INFO:log.info message.message, message.thrownbreak;case IMessage.DEBUG:log.debug message.message, message.thrownbreak;}}}}如此 gradle 的配置就算完成了,接下来要编写代码了3.在MainActivity 的同级目录下创建 AspectMethod.java 文件.4. 在 AspectMethod.java 中编写代码(下方代码中com.example.yqqyang.myapplication.MainActivity 请换成 自己的包名类名):package com.example.yqqyang.myapplication;import android.util.Log;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.annotation.After;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;/*** author YQQ.yang.* date 2017/5/10 9:26.*/Aspectpublic class AspectMethod {private static final String TAG QQ;Before(execution(* com.example.yqqyang.myapplication.MainActivity.*(..)))public void beforeMethodExe(JoinPoint joinPoint) {Log.e(TAG, before----- System.currentTimeMillis());}After(execution(* com.example.yqqyang.myapplication.MainActivity.*(..)))public void afterMethodExe(JoinPoint joinPoint) {Log.e(TAG, after ----- System.currentTimeMillis());}}5. 运行 app moudle在 logcat 会有如下输出:打开 app/build/intermediates/classes/debug/com/example/yqqyang/myapplication/MainActivity.class 文件,会发现 编译后的 MainActivity 里面的代码已经改变了: