@ZeroGeek
2017-06-15T07:23:21.000000Z
字数 1420
阅读 1747
Gradle
目标:编写一个Gradle插件,学习自定义Gradle插件。
功能:利用lint自动删除无用资源。
实现思路:先执行lint任务,通过解析生成的xml文件,找到id为UnusedResources的文件路径,并遍历删除,输出日志。
开发工具:Android Studio 2.4。
2.1新建一个工程,再新建一个Module作为插件模块,删除里面所有文件,新建src/main/groovy文件夹,留下build.gradle,目录如下:
因为是基于groovy开发,所有代码文件要以.groovy结尾
2.2配置build.gradle
加入该插件依赖的库,设置group和version,使用maven仓库,这里配置了上传到本地文件夹
2.3新建CleanTask.groovy,自定义Task
必须要继承DefautTask,并使用@TaskAction来定义Task的入口函数
2.4新建PluginExtension.groovy,引入外部参数
2.5新建CleanResPlugin.groovy,定义插件入口
2.6声明我是一个Gradle插件,定义插件id
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和结果
我们发现删除了无用的资源!插件开发完成~
功能简单,但包括了外部参数定义,任务依赖执行,上传任务等知识点。
具体代码参见:https://github.com/DengHuiJun/lintcleaner