日韩性视频-久久久蜜桃-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ò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 三级全黄的视频 | 亚洲暴爽 | 久久精品在线播放 | 日韩毛毛片| av香蕉| 日韩在线高清 | 亚洲一区二区三区久久久成人动漫 | 操少妇视频 | 最新av中文字幕 | 婷婷激情六月 | 久久久久久久久久久久久久久久久久久久 | 欧美另类z0z变态 | 人妻互换免费中文字幕 | 九九小视频 | 成人激情开心网 | 日本在线观看www | 少妇一边呻吟一边说使劲视频 | av片免费在线 | 亚洲av无码国产精品永久一区 | 99精品在线 | 尤物视频在线观看国产性感 | 国产精品黄色av | 亚洲精品乱码久久久久久日本蜜臀 | www.久久艹 | 美女脱了裤子让男人捅 | 成人黄色在线看 | 中文亚洲av片不卡在线观看 | 日韩人妻精品一区二区三区 | 国产农村妇女精品一二区 | 黑人中文字幕一区二区三区 | 亚洲视频精品在线 | 粉嫩视频在线观看 | 肉色丝袜脚交一区二区 | 午夜精品久久久 | 国产123区 | 国产精品免费久久 | 欧美久久久精品 | 国产黄在线 | 成人午夜视频在线观看 | 红桃视频一区 | 亚洲偷自 | 91精品国产亚洲 | 国产无精乱码一区二区三区 | 伊人资源| 国产成人传媒 | av一片| 桃花久久 | 在线观看亚洲av每日更新 | 伊人最新网址 | 222aaa | 肥臀熟女一区二区三区 | 免费av网页 | 中文在线字幕av | 精品欧美一区二区久久久久 | 性欧美高清 | 一区一区三区产品乱码 | 日韩精品免费看 | 免费毛片在线 | 国产色| 寂寞人妻瑜伽被教练日 | 成年人看的毛片 | 一区二区三区在线看 | 亚洲欧美日本一区 | 黄色长视频| 涩涩网站在线看 | 少妇扒开粉嫩小泬视频 | 国产激情免费视频 | 污网站免费| 在线一区二区三区四区 | 久草热视频 | 91一区二区 | 我想看毛片 | 在线免费黄色网 | 在线国产观看 | 麻豆视频官网 | 免费观看一区二区三区毛片 | 国产高清在线观看 | www.五月婷婷 | 国产精品久久久久一区二区三区 | 乱人伦xxxx国语对白 | 免费美女毛片 | 欧美专区综合 | 一级性生活大片 | 久久久久人妻精品色欧美 | 日批黄色| 免费成人在线观看动漫 | 国产精品入口久久 | 日韩专区一区 | 亚洲另类av | 欧美大尺度做爰啪啪床戏明星 | 一区二区免费播放 | 青青操狠狠干 | 青青草婷婷 | 日日嗨av一区二区三区四区 | 青青在线免费观看 | 97超碰人人干 | 国产九九热 | 日韩欧美在线观看一区二区三区 | 日本r级电影在线观看 |