gradle:自定义任务task

Posted mataiyuan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gradle:自定义任务task相关的知识,希望对你有一定的参考价值。

1:建立一个AS工程,建立目录结构如图

技术图片

 

 

 2:在buildSrc文件夹下面,建立两个.groovy文件,分别为ProjectVersion.groovy  和 ReleaseVersionTask.groovy

其中ReleaseVersionTask.groovy代码为:

package com.groovytest;
import org.gradle.api.DefaultTask
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.OutputFile
import org.gradle.api.tasks.TaskAction

class ReleaseVersionTask extends DefaultTask{
    @Input Boolean release
    @OutputFile File destFile

    ReleaseVersionTask(){
        group=versioning
        description=Makes project a release version.
    }

    @TaskAction
    void start(){
        project.version.release=true;
        ant.propertyfile(file:destFile){
            entry(key:release,type:string,operation:=,value: true)
        }
    }
}

ProjectVersion.groovy代码为:

package com.groovytest;

class ProjectVersion{
    Integer major
    Integer minor
    Boolean release

    ProjectVersion(Integer major, Integer minor){
        this.major=major
        this.minor=minor
        this.release=Boolean.FALSE
    }


    ProjectVersion(Integer major, Integer minor, Boolean release){
        this.major=major
        this.minor=minor
        this.release=release
    }

    @Override
    String toString(){
        "$major.$minor${release?‘‘: ‘-SNAPSHOT‘}"
    }

}

 3: 在buildSrc下面建立一个build.gradle文件

技术图片

 

 build.gradle内容为:

apply plugin: ‘groovy‘
apply plugin: ‘maven‘

version = ‘1.0‘
group = ‘com.groovytest‘
archivesBaseName = ‘releaseVersionTask‘

repositories {
    mavenCentral()
}

dependencies {
    // 编译的时候我们需要使用Gradle中的API
    compile gradleApi()
}

uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: "file:D:\\android_Develop\\gradle_project\\local_maven")
        }
    }
}

  其中"file:D:\\Android_Develop\\gradle_project\\local_maven"为你自定义的本地仓库地址:

4:根目录下面的build.gradle内容如下:

buildscript {

    repositories {
        google()
        jcenter()

    }
    dependencies {
        classpath ‘com.android.tools.build:gradle:3.6.3‘

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

  5:setting.gradle内容如下:

技术图片

 

 

6:在根目录下面执行gradle uploadArchives

技术图片

 

7:查看本地文件夹下面有了相应的jar文件

技术图片

 

 8:在其他工程中使用这个Jar文件,AS新建一个工程,可以选择空项目,目录配置如下:

技术图片

 

 9:在根目录下面的build.gradle如下:

技术图片

 

 build.gradle内的代码如下:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {

    repositories {
        google()
        jcenter()
        /*
        使用本地仓库
        */
        maven {
            url ‘file:D:\\Android_Develop\\gradle_project\\local_maven‘
        }

    }
    dependencies {
        classpath ‘com.android.tools.build:gradle:3.6.3‘
        //依赖本地jar
        classpath ‘com.groovytest:releaseVersionTask:1.0‘
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        maven {
            url ‘file://D:\\Android_Develop\\gradle_project\\local_maven‘
        }


    }


}
task clean(type: Delete) {
    delete rootProject.buildDir
}

  10:现在可以在build.gradle里面使用了,import com.groovytest;是可以找的到的,如图,如果配置不对是找不到的。

技术图片

 

 

11:如果我们想在app下面的build.gradle 以及.java里面使用,那我们要配置app下面的build.gradle

技术图片

 

 12:首先我们配置app下面的 build.gradle,最关键的就是设置dependencies:如图

技术图片

 

 13:然后我们就可以在build.gradle 以及test.java下面使用了

技术图片

 

 技术图片

 

 

注意:一开始,我想着在根目录下面的build.gradle来生成jar,也就是说一开始没有下图的1文件,只有2文件,并且2文件里面设置upload代码,这个时候编译也能通过,但是呢生成的.jar是不能用的,如图

只有1kb,也就是没有生成成功,并且其他项目也无法导入。

技术图片

 

以上是关于gradle:自定义任务task的主要内容,如果未能解决你的问题,请参考以下文章

gradle:自定义任务task

Android Gradle 插件自定义 Gradle 任务 ③ ( Gradle 自定义任务创建方法 Project#task 函数 | Task#doFirst 函数用法 )

Android Gradle 插件自定义 Gradle 任务 ③ ( Gradle 自定义任务创建方法 Project#task 函数 | Task#doFirst 函数用法 )

Android Gradle 插件自定义 Gradle 任务 ⑦ ( 控制 Gradle 执行任务顺序 | Task#dependsOn 函数 | Task#mustRunAfter 函数 )

Android Gradle 插件自定义 Gradle 任务 ⑦ ( 控制 Gradle 执行任务顺序 | Task#dependsOn 函数 | Task#mustRunAfter 函数 )

Android Gradle 插件自定义 Gradle 任务 ⑧ ( 控制 Gradle 执行任务顺序 | Task#shouldRunAfter 函数 | 三个函数使用场景对比 )