Android Studio 自定義Gradle Plugin

Android Gradle Plugin

Android Gradle Plugin 有兩種形式

  1. 直接在build.gradle/創(chuàng)建x.gradle中開發(fā)
  1. 實(shí)現(xiàn)Plugin重寫build 過程

這里講解怎么開發(fā)自定義插件

首先創(chuàng)建Gradle Plugin 工程

  • 為了方便測試先創(chuàng)建一個Android 工程,然后創(chuàng)建一個Android library Module工程
創(chuàng)建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)
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
圖形界面執(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
發(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'

所有這些配置正確后同步項目可在Gradle Console查看到日志

github demo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容