当前位置:   article > 正文

android studio gradle自定义,Android Studio 自定义Gradle插件

androidstuido 自定义gradle

本文内容包括:

利用AndroidStudio,编写自定义Gradle plugin

MavenDeployer 发布plugin

使用Gradle plugin

简介

之前写了一个Android中的AOP框架Cooker.

这里总结一下里面用到的两块小知识:

1)自定义 Gradle plugin

2)发布自己的jar到 maven仓库

项目中引入自定义Gradle plugin一般有三种方法:

直接写在 build.gradle中.

plugin源码放到rootProjectDir/buildSrc/src/main/groovy目录下

plugin打包成jar, 发布到maven仓库, 然后项目通过Build Script依赖jar的形式引入

下面介绍的是第3种方式.

一. 用AndroidStudio中写plugin

1.新建一个Android工程

2.在这个工程里面,新建一个Android Library

先起名叫cooker-plugin吧, 我们将会用这个library写Gradle plugin

format,png

3.建立plugin的目录结构

把这个cooker-plugin中默认产生的文件都删除, 然后按照下面结构新建文件

format,png

解释

1.因为我们用Groovy写的插件, 插件代码放在 src/main/groovy下

2.在src/main/resources/META-INF/gradle-plugins 里声明plugin信息

比如:新建cooker-plugin.properties文件,内容如下

1

2>

>

implementation-class=com.helen.plugin.CookerPlugin

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17> 这里:

> "cooker-plugin" 是插件名称;

> "com.helen.plugin.CookerPlugin" 是对应的插件实现类

3.build.gradle 声明用groovy开发

```java

apply plugin: 'groovy'

dependencies {

compile gradleApi()

compile localGroovy()

}

repositories {

mavenCentral()

}

4.实现插件

实现plugin,其实就是需要继承实现Plugin的接口

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19package com.helen.plugin

import org.gradle.api.Plugin

import org.gradle.api.Project

public class CookerPlugin implements Plugin{

void apply(Project project){

//这里实现plugin的逻辑

//巴拉巴拉巴拉

println "hello, this is cooker plugin!"

//cooker-plugin

//比如这里加一个简单的task

project.task('cooker-test-task') << {

println "hello, this is cooker test task!"

}

}

}

5.一个简单的plugin就写好了

在cooker-plugin项目中, build一下.

就能在build/libs下生成对应的plugin插件了

format,png

这个插件就能使用了. 可以发布在本地仓库或者Maven仓库.

二. mavenDeployer发布插件

下面介绍一下利用mavenDeployer发布在本地仓库.

1. 引入 mavenDeplayer插件

修改cooker-plugin的build.gradle, 修改后如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26apply plugin: 'groovy'

//添加maven plugin, 用于发布我们的jar

apply plugin: 'maven'

dependencies {

compile gradleApi()

compile localGroovy()

}

repositories{

mavenCentral()

}

//设置maven deployer

uploadArchives {

repositories {

mavenDeployer {

//设置插件的GAV参数

pom.groupId = 'com.helen.plugin'

pom.artifactId = 'cooker-plugin'

pom.version = 1.0

//文件发布到下面目录

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

}

}

}

2.用uploadArchices发布

运行uploadArchives. 就能在设置的仓库路径中生成 cooker-plugin了

format,png

三. 使用gradle plugin

1.在build.gradle引入 cooker-plugin1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17apply plugin: 'com.android.application'

//使用cooker-plugin

apply plugin: 'cooker-plugin'

buildscript {

repositories {

maven {

//cooker-plugin 所在的仓库

//这里是发布在本地文件夹了

url uri('../release')

}

}

dependencies{

//引入cooker-plugin

classpath 'com.helen.plugin:cooker-plugin:1.0'

}

}

2. 我们编译App的时候,cooker-plugin就会介入了

每次clean/build时, 在Gradle Console可以看到我们的log

hello, this is cooker plugin!

1

2

3

4Configuration on demand is an incubating feature.

hello, this is cooker plugin!

Incremental java compilation is an incubating feature.

:app:preBuild UP-TO-DATE

3.使用cooker-plugin中定义的task

前面demo中, 我们新建了一个task: cooker-test-task, 他简单输出一句log.下面测试运行一下这个task.

在控制台输入 gradle cooker-test-task 运行结果如下

format,png

四. 总结

Demo地址-Github

到此为止, 自定义Gradle plugin就介绍完了.

结合AndroidStudio, 自定义Gradle plugin可以完成很多功能.

比如cooker的plugin完成了:

1)添加编译依赖

2)进行Aspecj编译

3)自动生成混淆配置

五. 开发只针对当前项目的Gradle插件(附)

前面我们讲了如何自定义gradle插件并且打包出去,可能步骤比较多。有时候,你可能并不需要打包出去,只是在这一个项目中使用而已,那么你无需打包这个过程。

只是针对当前项目开发的Gradle插件相对较简单。步骤之前所提到的很类似,只是有几点需要注意:

1

21.新建的Module名称必须为BuildSrc

2.无需resources目录

目录结构如下所示:

268ae35fb8b97e6d1ec60949d58d28c0.png

其中,build.gradle内容为:

1

2

3

4

5

6

7

8

9

10apply plugin: 'groovy'

dependencies {

compile gradleApi()//gradle sdk

compile localGroovy()//groovy sdk

}

repositories {

jcenter()

}

SecondPlugin.groovy内容为:

SecondPlugin.groovy内容为:

1

2

3

4

5

6

7

8

9

10

11

12package com.hc.second

import org.gradle.api.Plugin

import org.gradle.api.Project

public class SecondPlugin implements Plugin {

void apply(Project project) {

System.out.println("========================");

System.out.println("这是第二个插件!");

System.out.println("========================");

}

在app这个Module中如何使用呢?直接在app的build.gradle下加入

1apply plugin: com.hc.second.SecondPlugin

clean一下,再make project,messages窗口信息如下

3795ac657cd94b5f94b04a03e6db20f7.png

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/248093
推荐阅读
相关标签
  

闽ICP备14008679号