android studio aspectj 配置,Android手写配置Aspectj的插件AspectjPlugin

如何开发AspectjPlugin插件?

1.1 新建插件module,这里是plugin,项目结构最终如下图:

将新建的Module中除了build.gradle文件外的其余文件全都删除,然后删除build.gradle文件中的所有内容。

在新建的module中新建文件夹src,接着在src文件目录下新建main文件夹,在main目录下新建groovy目录

除了在main目录下新建groovy目录外,你还要在main目录下新建resources目录

在groovy目录下新建项目包名,就像Java包名那样

resources目录下新建文件夹META-INF,META-INF文件夹下新建gradle-plugins文件夹

138686a7f791

gradle_plugin_project_dir.png

1.2 在插件module plugin的build.gradle文件替换为:

apply plugin: 'groovy'

apply plugin: 'maven'

dependencies {

compile gradleApi()

compile localGroovy()

compile 'com.android.tools.build:gradle:3.0.1'

compile 'org.aspectj:aspectjrt:1.9.1'

compile 'org.aspectj:aspectjtools:1.9.1'

}

repositories {

jcenter()

mavenCentral()

}

1.3 新建AspectjPlugin.groovy文件

package com.zero.aspectj.plugin

import com.android.build.gradle.AppPlugin

import com.android.build.gradle.LibraryPlugin

import org.aspectj.bridge.IMessage

import org.aspectj.bridge.MessageHandler

import org.aspectj.tools.ajc.Main

import org.gradle.api.Plugin

import org.gradle.api.Project

import org.gradle.api.tasks.compile.JavaCompile

class AspectjPlugin implements Plugin {

@Override void apply(Project project) {

def hasApp = project.plugins.withType(AppPlugin)

def hasLib = project.plugins.withType(LibraryPlugin)

if (!hasApp && !hasLib) {

throw new IllegalStateException("'android' or 'android-library' plugin required.")

}

final def log = project.logger

final def variants

if (hasApp) {

variants = project.android.applicationVariants

} else {

variants = project.android.libraryVariants

}

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", 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;

}

}

}

}

}

}

1.4 在resources/META-INF/gradle-plugins/目录下新建一个文件:aspectj.plugin.properties

注意:该文件的命名就是你使用插件的名字,在里面输入

implementation-class=com.zero.aspectj.plugin.AspectjPlugin

如何使用这个插件?

发布到本地仓库使用

2.1 在插件module plugin的build.gradle添加以下代码

group = 'com.zero.aspectj.plugin'

version = '1.0.0'

uploadArchives {

//使用当前目录下面的maven仓库,仓库在当前目录的repo文件目录中

repositories {

mavenDeployer {

repository(url: uri('../repo'))

}

}

}

同步之后,这时右侧的gradle标题栏中的:plugin中会出现一个任务,如图:

138686a7f791

uploadArchives.png

2.2 在项目中使用该插件

buildscript {

repositories {

jcenter()

maven {

url uri('../repo')

}

}

dependencies {

// group:moduleName:version

classpath 'com.zero.aspectj.plugin:plugin:1.0.0'

}

}

apply plugin: 'aspectj.plugin'

发布到jcenter库使用

完成

参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值