日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

android studio aspectj使用,androidStudio中使用 AspectJ

發(fā)布時(shí)間:2025/3/15 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android studio aspectj使用,androidStudio中使用 AspectJ 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

關(guān)于 AOP 的詳細(xì)介紹請(qǐng)參考 深入理解Android之AOP

本文主要介紹 怎么在 AndroidStudio 中使用 AspectJ

1 . 在android studio 中新建一個(gè)項(xiàng)目 MyApplication

2. 在 app 目錄下 的 build.gradle 中完成如下配置:

apply plugin: 'com.android.application'

import org.aspectj.bridge.IMessage

import org.aspectj.bridge.MessageHandler

import org.aspectj.tools.ajc.Main

buildscript {

repositories {

mavenCentral()

}

dependencies {

classpath 'org.aspectj:aspectjtools:1.8.9'

}

}

repositories {

mavenCentral()

}

android {

compileSdkVersion 25

buildToolsVersion "25.0.2"

defaultConfig {

applicationId "com.example.yqqyang.myapplication"

minSdkVersion 23

targetSdkVersion 25

versionCode 1

versionName "1.0"

testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

}

buildTypes {

release {

minifyEnabled false

proguardFiles 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.1'

compile 'com.android.support.constraint:constraint-layout:1.0.2'

testCompile 'junit:junit:4.12'

compile 'org.aspectj:aspectjrt:1.8.9'

}

final def log = project.logger

final def variants = project.android.applicationVariants

variants.all { variant ->

if (!variant.buildType.isDebuggable()) {

log.debug("Skipping non-debuggable build type '${variant.buildType.name}'.")

return;

}

JavaCompile javaCompile = variant.javaCompile

javaCompile.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.thrown

break;

case IMessage.WARNING:

log.warn message.message, message.thrown

break;

case IMessage.INFO:

log.info message.message, message.thrown

break;

case IMessage.DEBUG:

log.debug message.message, message.thrown

break;

}

}

}

}

如此 gradle 的配置就算完成了,接下來(lái)要編寫(xiě)代碼了

3.在MainActivity 的同級(jí)目錄下創(chuàng)建 AspectMethod.java 文件.

4. 在 AspectMethod.java 中編寫(xiě)代碼(下方代碼中com.example.yqqyang.myapplication.MainActivity 請(qǐng)換成 自己的包名類名):

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.

*/

@Aspect

public 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. 運(yùn)行 app moudle

在 logcat 會(huì)有如下輸出:

打開(kāi)?app/build/intermediates/classes/debug/com/example/yqqyang/myapplication/MainActivity.class 文件,會(huì)發(fā)現(xiàn) 編譯后的 MainActivity 里面的代碼已經(jīng)改變了:

總結(jié)

以上是生活随笔為你收集整理的android studio aspectj使用,androidStudio中使用 AspectJ的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。