美文网首页
Android自定义Gradle插件

Android自定义Gradle插件

作者: 一个不安分的Android开发 | 来源:发表于2020-03-29 20:23 被阅读0次

    一、Gradle介绍

    gradle是Android Studio默认的构建工具,它不仅继承了maven中仓库,坐标,依赖这些核心概念,还继承了ant中target的概念,可定义自己的任务task。在build.gradle文件中我们可以看到下面的代码:

    apply plugin: 'com.android.application'

    'com.android.application' 就是插件的名字,构建过程中插件可以获取到整个项目的代码,做一些特别的操作。

    二、自定义plugin

    2.1 新建一个module

    新建一个library module,不一定要library,因为之后目录结构会改动很大。

    image

    2.2 修改目录结构

    2.2.1 删除多余的文件

    删除掉一些没用的目录和文件,如下图:

    image

    2.2.2 修改build.gradle

    引入groovy插件,代码如下:

    
    apply plugin: 'groovy'
    
    dependencies {
    
        implementation gradleApi() //gradle sdk
    
        implementation localGroovy() //groovy sdk
    
    }
    
    repositories {
    
        jcenter()
    
        google()
    
    }
    
    

    2.3 实现自定义plugin

    增加下图的文件目录:

    image

    2.3.1 自定义Plugin

    主要代码如下:

    
    import org.gradle.api.Plugin
    
    import org.gradle.api.Project
    
    public class MyPlugin implements Plugin<Project> {
    
        void apply(Project project) {
    
            def log = project.logger
    
            log.error "========================"
    
            log.error "完整的MyPlugin,开始修改Class!"
    
            log.error "========================"
    
            println("---------- plugin -------------")
    
        }
    
    }
    
    

    这里没有做其他操作,只是加了些log。需要注意的是,这个不是java文件,是groovy文件。

    2.3.2 新建properties文件

    新建com.francis.plugin.properties,目的是用来告诉gradle具体使用的插件是哪个,内容如下:

    implementation-class=com.francis.plugin.MyPlugin

    2.4 编译插件

    这里使用maven进行编译,方便其他项目导入。

    2.4.1 修改build.gradle文件

    
    apply plugin: 'groovy'
    
    // 添加maven
    
    apply plugin: 'maven'
    
    dependencies {
    
        implementation gradleApi() //gradle sdk
    
        implementation localGroovy() //groovy sdk
    
        implementation 'com.android.tools.build:gradle:3.2.0'
    
    }
    
    repositories {
    
        jcenter()
    
        google()
    
    }
    
    // 插件名称,引入插件时需要用到
    
    group='com.francis.plugin'
    
    // 插件版本号
    
    version='1.0.0'
    
    uploadArchives {
    
        repositories {
    
            mavenDeployer {
    
                //提交到远程服务器:
    
                // repository(url: "http://www.xxx.com/repos") {
    
                //    authentication(userName: "admin", password: "admin")
    
                // }
    
                //本地的Maven地址设置
    
                repository(url: uri('F:\\workspace\\TestASM\\repos'))
    
            }
    
        }
    
    }
    
    

    2.4.2 开始编译

    通过uploadArchives命令进行编译。

    image

    2.5 其他项目进行引用

    2.5.1 修改外层的build.gradle

    
    // Top-level build file where you can add configuration options common to all sub-projects/modules.
    
    buildscript {
    
        repositories {
    
            google()
    
            jcenter()
    
            maven {//本地Maven仓库地址
    
                url uri('F:\\workspace\\TestASM\\repos')
    
            }
    
        }
    
        dependencies {
    
            classpath 'com.android.tools.build:gradle:3.2.0'
    
            //与编译出来的文件目录一致
    
            classpath 'com.francis.plugin:myplugin:1.0.0'
    
            // 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
    
    }
    
    

    2.5.2 修改项目的build.gradle文件

    
    apply plugin: 'com.android.application'
    
    // 引入插件,名称就是之前定义的group
    
    apply plugin: 'com.francis.plugin'
    
    android {
    
    ......
    
    }
    
    dependencies {
    
        implementation fileTree(dir: 'libs', include: ['*.jar'])
    
        implementation 'com.android.support:appcompat-v7:28.0.0'
    
        implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    
        testImplementation 'junit:junit:4.12'
    
        androidTestImplementation 'com.android.support.test:runner:1.0.2'
    
        androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    
    }
    
    

    2.5.3 编译结果

    可以看到编译过程中输出了下面的日志:

    image

    具体代码已经上传到github,感兴趣的可以参考下。

    https://github.com/HuangMingFrancis/TestPlugin

    相关文章

      网友评论

          本文标题:Android自定义Gradle插件

          本文链接:https://www.haomeiwen.com/subject/pvzuuhtx.html