Android Gradle Plugin
Android Gradle Plugin 有兩種形式
- 直接在build.gradle/創(chuàng)建x.gradle中開發(fā)
- 實(shí)現(xiàn)
Plugin重寫build 過程
這里講解怎么開發(fā)自定義插件
首先創(chuàng)建Gradle Plugin 工程
- 為了方便測試先創(chuàng)建一個Android 工程,然后創(chuàng)建一個Android library Module工程

創(chuàng)建module
- 刪除如圖中箭頭所指目錄和文件

刪除無效目錄
-
build.gradle中改成groovy方式
apply plugin: 'groovy'
dependencies {
compile gradleApi()
compile localGroovy()
}
自定義Gradle Plugin,在main目錄下創(chuàng)建groovy目錄,這個目錄下創(chuàng)建創(chuàng)建自己的代碼
以刪除log日志為例

Groovy 項目結(jié)構(gòu)
1.繼承 gradlePlugin,類的后綴不再是.java而是.groovy
class DelLogPlugin implements Plugin<Project> {
@Override
void apply(Project project) {
project.extensions.create('dellogExtension', DelLogExtension);
project.afterEvaluate {
//在gradle 構(gòu)建完之后執(zhí)行
project.logger.error("dellogExtension : " + project.dellogExtension.sourceDir);
def rootDir = project.projectDir.toString().plus(project.dellogExtension.sourceDir);
project.logger.error(rootDir);
DelLogUtil.delLog(new File(rootDir));
}
project.task('dellog', {
project.logger.error("dellogExtension : " + project.dellogExtension.sourceDir);
def rootDir = project.projectDir.toString().plus(project.dellogExtension.sourceDir);
project.logger.error(rootDir);
DelLogUtil.delLog(new File(rootDir));
})
}
}
afterEvaluate是在gradle構(gòu)建完后自動執(zhí)行的,但task需要手動執(zhí)行
一個插件中可以創(chuàng)建多個Task,如代碼中的dellog,可以在控制臺執(zhí)行gradle -q dellog,也可以在gradle圖形界面執(zhí)行

圖形界面執(zhí)行task
2. 創(chuàng)建可以輸入的Gradle 插件
很多時候我們需要輸入?yún)?shù),然后根據(jù)參數(shù)來做處理,處理如下:
project.extensions.create(...,...); 前面是Name,后面是Model,model中在gralde script 中鍵對上就可以。
class DelLogExtension {
String sourceDir;
}
class DelLogPlugin implements Plugin<Project> {
@Override
void apply(Project project) {
project.extensions.create('dellogExtension', DelLogExtension);
......
然后在app 下的build.gradle中
dellogExtension.sourceDir = '/src'
或
dellogExtension {
sourceDir = '/src'
}

使用輸入
3. 在main下創(chuàng)建resources目錄
src/main/resources/META-INF/gradle-plugins/com.branch.plugin.dellog.properties
xxx.properties 將來作為apply plugin: xxx 插件名稱,這里的目錄結(jié)構(gòu)不能錯,先有META-INF再有gradle-plugins
內(nèi)容:
`implementation-class=com.branch.dellog.DelLogPlugin(繼承Plugin的類,插件的入口類)`
4. 發(fā)布到本地倉庫
在當(dāng)前l(fā)ib項目build.gradle中增加maven支持
apply plugin: 'maven'
repositories {
mavenCentral()
}
然后增加對應(yīng)的maven deployer
//設(shè)置maven deployer
uploadArchives {
repositories {
mavenDeployer {
//設(shè)置插件的GAV參數(shù)
pom.groupId = 'com.branch.plugin'
pom.artifactId = 'dellog'
pom.version = '1.0.0'
//文件發(fā)布到下面目錄
repository(url: uri('../repo'))
}
}
}
這里設(shè)置發(fā)布到上一個目錄的repo中,同時可以查看gradle task中有一個名為uploadArchives的task

發(fā)布到本地task
執(zhí)行就能在repo中查看到相應(yīng)jar包

查看本地倉庫
5. 使用本地倉庫
在project 的build.gradle 中buildscript中增加本地倉庫地址
buildscript {
repositories {
jcenter()
maven {
url uri("/repo")
}
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.2'
classpath 'com.branch.plugin:dellog:1.0.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
然后在app 的build.gradle中增加plugin
apply plugin: 'com.branch.plugin.dellog'