使用AndroidStudio自定义Gradle插件

1.概述

目标:编写一个Gradle插件,学习自定义Gradle插件。
功能:利用lint自动删除无用资源。
实现思路:先执行lint任务,通过解析生成的xml文件,找到id为UnusedResources的文件路径,并遍历删除,输出日志。
开发工具:Android Studio 2.4。

2.内容

2.1新建一个工程,再新建一个Module作为插件模块,删除里面所有文件,新建src/main/groovy文件夹,留下build.gradle,目录如下:
目录结构

因为是基于groovy开发,所有代码文件要以.groovy结尾

2.2配置build.gradle
build配置
加入该插件依赖的库,设置group和version,使用maven仓库,这里配置了上传到本地文件夹

2.3新建CleanTask.groovy,自定义Task
task
必须要继承DefautTask,并使用@TaskAction来定义Task的入口函数

2.4新建PluginExtension.groovy,引入外部参数
此处输入图片的描述

2.5新建CleanResPlugin.groovy,定义插件入口
plugin

2.6声明我是一个Gradle插件,定义插件id
end
main文件夹下新建resources/META-INF/gradle-plugins目录,再新建me.denghui.cleaner.properties文件,这里me.denghui.cleaner作为id,应用到project时要使用。里面的内容指向插件入口

2.7编译并上传到本地
此处输入图片的描述
打开右侧Task列表,双击执行uploadArchives

2.8查看本地仓库
此处输入图片的描述

2.9使用该插件时的小插曲
此处输入图片的描述
配置完后,报找不到插件,原因是在定义CleanResPlugin.groovy,没有加入包名,需要加入,该目录下每个groovy文件都要加入这句

package me.denghui.gradle

2.10重新编译并上传,就可以引入使用了
在根目录的build.gradle配置

buildscript {
    repositories {
        maven {
            url 'file:///Users/Allen/repos/'
        }
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.0'
        classpath 'me.denghui.gradle:plugin:1.0.0'
    }
}

在工程app的build.gradle配置

apply plugin: 'com.android.application'
apply plugin: 'me.denghui.cleaner'

android {
    // ...
}

// ...

lintCleaner {
    lintXmlPath "${buildDir}/outputs/lint-results-debug.xml"
    outputPath "${buildDir}/outputs/lintlog.txt"
}

2.11加入几张无用的资源,命令行执行 ./gradlew cleanUnusedRes 或者在右侧Gradle的Tasks中找到并双击执行
此处输入图片的描述

2.12查看log和结果
此处输入图片的描述
我们发现删除了无用的资源!插件开发完成~

3.小结

功能简单,但包括了外部参数定义,任务依赖执行,上传任务等知识点。
具体代码参见:https://github.com/DengHuiJun/lintcleaner

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章