android 配置aspect_Android AspectJ 环境配置

App gradle 中 我的 所有配置

注意点

这种配置对于kotlin 编写的代码 是没有效果的

apply plugin: 'com.android.application'

android {

compileSdkVersion 28

defaultConfig {

applicationId "com.temp.aaaa"

minSdkVersion 15

targetSdkVersion 28

versionCode 1

versionName "1.0"

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

}

buildTypes {

release {

minifyEnabled false

proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

}

}

}

dependencies {

implementation fileTree(include: ['*.jar'], dir: 'libs')

implementation 'com.android.support:appcompat-v7:28.0.0'

implementation 'com.android.support.constraint:constraint-layout:1.1.3'

testImplementation 'junit:junit:4.12'

androidTestImplementation 'com.android.support.test:runner:1.0.2'

androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

implementation 'com.android.support:design:28.0.0'

implementation 'org.aspectj:aspectjrt:1.8.13'

}

import org.aspectj.bridge.IMessage

import org.aspectj.bridge.MessageHandler

import org.aspectj.tools.ajc.Main

final def variants = project.android.applicationVariants

variants.all { variant ->

JavaCompile javaCompile = variant.javaCompile

javaCompile.doLast {

String[] args = ["-showWeaveInfo",

"-1.8",

"-inpath", javaCompile.destinationDir.toString(),

"-aspectpath", javaCompile.classpath.asPath,

"-d", javaCompile.destinationDir.toString(),

"-classpath", javaCompile.classpath.asPath,

"-bootclasspath", android.bootClasspath.join(

File.pathSeparator)]

MessageHandler handler = new MessageHandler(true)

new Main().run(args, handler)

def log = project.logger

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:

case IMessage.INFO:

log.info message.message, message.thrown

break

case IMessage.DEBUG:

log.debug message.message, message.thrown

break

}

}

}

}

自己需要添加的 就是

import org.aspectj.bridge.IMessage

import org.aspectj.bridge.MessageHandler

import org.aspectj.tools.ajc.Main

final def variants = project.android.applicationVariants

variants.all { variant ->

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", android.bootClasspath.join(

File.pathSeparator)]

MessageHandler handler = new MessageHandler(true)

new Main().run(args, handler)

def log = project.logger

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:

case IMessage.INFO:

log.info message.message, message.thrown

break

case IMessage.DEBUG:

log.debug message.message, message.thrown

break

}

}

}

}

以及

dependencies {

implementation 'org.aspectj:aspectjrt:1.8.13'

}

project 的build.gradle

dependencies {

classpath 'com.android.tools.build:gradle:3.2.0'

classpath 'org.aspectj:aspectjtools:1.8.13'

classpath 'org.aspectj:aspectjweaver:1.8.13'

}

第二种配置 这种是kotlin 也可以使用 但是 很奇怪 我把依赖放到model中 再创建AOP的类 就不起效果 但是在主项目中创建 就可以

甚至直接报错"" zip file is empty"" 不知道啥原因

配置:

根build.gradle 配置

classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.4'

model或者主项目配置

//这个只有依赖的模块 有依赖这个 就行 配置一次

api 'org.aspectj:aspectjrt:1.8.9'

//这个是 那个model需要 都得配置这个

apply plugin: 'android-aspectjx'

注意点: 版本号必须对应 比如 1.8.9 对应的版本是 2.0.4


版权声明:本文为weixin_42499899原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。