[关闭]
@ZeroGeek 2017-06-15T07:23:21.000000Z 字数 1420 阅读 1639

使用AndroidStudio自定义Gradle插件

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文件都要加入这句

  1. package me.denghui.gradle

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

  1. buildscript {
  2. repositories {
  3. maven {
  4. url 'file:///Users/Allen/repos/'
  5. }
  6. jcenter()
  7. }
  8. dependencies {
  9. classpath 'com.android.tools.build:gradle:2.2.0'
  10. classpath 'me.denghui.gradle:plugin:1.0.0'
  11. }
  12. }

在工程app的build.gradle配置

  1. apply plugin: 'com.android.application'
  2. apply plugin: 'me.denghui.cleaner'
  3. android {
  4. // ...
  5. }
  6. // ...
  7. lintCleaner {
  8. lintXmlPath "${buildDir}/outputs/lint-results-debug.xml"
  9. outputPath "${buildDir}/outputs/lintlog.txt"
  10. }

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

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

3.小结

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

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注