自定義Gradle插件主要有三種方式,分別是html
在實際工做中咱們不多會在build.gradle中編寫自定義插件,android
//使用插件
apply plugin: CustomPlugin
//自定義插件:實現Plugin類接口,重寫apply方法
class CustomPlugin implements Plugin<Project> {
@Override
void apply(Project project) {
project.task('CustomPluginTask') {
doLast {
println "你們好,我是一個自定義插件,在這裏寫下你的具體功能"
}
}
}
}
複製代碼
我是經過AndroidStudio建立的插件工程,假設你如今已經有了一個Android項目:git
注意:上圖的buildSrc下的build.gradle,也須要新建一個,目前內容爲空就行github
建立文件api
a. 在groovy目錄下,新建一個包(包名隨意),包內新建一個文件,必須以.groovy做爲後綴名(文件名隨意),這裏起名爲PluginImpl.groovybash
b. 在resources目錄下新建一個META-INF文件夾,在META-INF文件夾下新建一個gradle-plugins文件夾,在gradle-plugins裏建立一個.properties文件,他的文件名必須是a步驟裏的那個包名 app
編寫PluginImpl.groovy(注意修改爲你的包名,其他照抄)maven
package com.demo.plugin
import org.gradle.api.Plugin
import org.gradle.api.Project
class PluginImpl implements Plugin<Project> {
void apply(Project project) {
project.task('testTask') << {
println "Hello gradle plugin"
}
}
}
複製代碼
4. .properties編寫
只寫一句話(注意修改成你的包名)ide
implementation-class=com.demo.plugin.PluginImpl
複製代碼
// 引入buildSrc裏的自定義插件
apply plugin: 'com.demo.plugin'
複製代碼
不管是在build.gradle中編寫自定義插件,仍是buildSrc項目中編寫自定義插件,都只能在本身的項目中進行使用。若是想要分享給其餘人或者本身用,能夠在一個獨立的項目中編寫插件,這個項目會生成一個包含插件類的JAR文件,有了JAR文件就很容易進行分享了。測試
新建一個android項目,在項目內部新建一個module(module名字能夠隨便起了,這裏叫duliplugin),把這個module文件夾裏的東西所有刪掉,只留下build.gradle文件
重複方法二的步驟,創建與方法二里同樣的文件目錄結構
(其實與方法二是同樣的,注意事項看方法二)
package com.demo.plugin1
import org.gradle.api.Plugin
import org.gradle.api.Project
class PluginImpl implements Plugin<Project> {
void apply(Project project) {
project.task('testPlugin') {
doLast {
println "自定義插件ccc"
}
}
}
}
複製代碼
(其實與方法二是同樣的,注意事項看方法二)
implementation-class=com.demo.plugin1.PluginImpl
複製代碼
這裏纔是方法三的重點
apply plugin: 'groovy'
apply plugin: 'maven'
dependencies {
compile gradleApi()
compile localGroovy()
}
repositories {
mavenCentral()
}
repositories {
mavenCentral()
}
uploadArchives {
repositories {
mavenDeployer {
//設置插件的GAV參數
pom.groupId = 'com.demo.plugin1'//你的包名
pom.artifactId = 'myPlugin'
pom.version = '1.1.9'//版本號
//文件發佈到下面目錄 ../是父目錄
repository(url: uri('../repo'))
}
}
}
複製代碼
而後看下圖執行uploadArchives這個task獲得jar包
注意: 有時候打開項目卡Indexing paused due to batch updated上,插件工程會報錯,找不到插件,能夠刪除插件工程裏的.iml文件> ,重啓Androidstudio
buildscript {
...
repositories {
...
maven {//本地Maven倉庫地址
url uri('../repo')
}
}
dependencies {
...
classpath 'com.demo.plugin1:myPlugin:1.1.9'
}
}
複製代碼
3.編寫項目的app.gradle文件
apply plugin: 'com.demo.plugin1'
複製代碼