用AndroidStudio開發自定義 Gradle plugin
本文內容包括:
-
利用AndroidStudio,編寫自定義Gradle plugin
-
MavenDeployer 發布plugin
-
使用Gradle plugin
簡介
項目中引入自定義Gradle plugin一般有三種方法:
-
直接寫在 build.gradle中.
-
plugin源碼放到rootProjectDir/buildSrc/src/main/groovy目錄下
-
plugin打包成jar, 發布到maven倉庫, 然后項目通過Build Script依賴jar的形式引入
下面介紹的是第3種自定義Gradle插件的方式.
一. 用AndroidStudio中寫plugin
1.新建一個Android工程
2.在這個工程里面,新建一個Android Library
先起名叫cooker-plugin吧, 我們將會用這個library寫Gradle plugin
3.建立plugin的目錄結構
把這個cooker-plugin中默認產生的文件都刪除, 然后按照下面結構新建文件
解釋
1.因為我們用Groovy寫的插件, 插件代碼放在 src/main/groovy下
2.在src/main/resources/META-INF/gradle-plugins 里聲明plugin信息
比如:新建 cooker-plugin.properties 文件,內容如下
implementation-class=com.helen.plugin.CookerPlugin
這里:
"cooker-plugin" 是插件名稱;
"com.helen.plugin.CookerPlugin" 是對應的插件實現類
3.build.gradle 聲明用groovy開發
apply plugin: 'groovy'
dependencies {
compile gradleApi()
compile localGroovy()
}
repositories {
mavenCentral()
}
4.實現插件
實現plugin,其實就是需要繼承實現Plugin 的接口
package com.helen.plugin
import org.gradle.api.Plugin
import org.gradle.api.Project
public class CookerPlugin implements Plugin<Project> {
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插件了
這個插件就能使用了. 可以發布在本地倉庫或者Maven倉庫.
二. mavenDeployer發布插件
下面介紹一下利用mavenDeployer發布在本地倉庫.
1. 引入 mavenDeplayer插件
修改cooker-plugin的build.gradle, 修改后如下:
apply 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了
三. 使用gradle plugin
1.在build.gradle引入 cooker-plugin
apply 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!
Configuration 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 運行結果如下
四. 總結
Demo地址-Github :
https://github.com/helen-x/gradle-plugin-demo
到此為止, 自定義Gradle plugin就介紹完了.
結合AndroidStudio, 自定義Gradle plugin可以完成很多功能.
比如cooker的plugin完成了:
1)添加編譯依賴
2)進行Aspecj編譯
3)自動生成混淆配置
來自:http://mp.weixin.qq.com/s/HJyYMGmVIpblJXJNKK1JTw