美文网首页
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