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
加入該插件依賴的庫,設置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和結果
我們發現刪除了無用的資源!插件開發完成~
3.小結
功能簡單,但包括了外部參數定義,任務依賴執行,上傳任務等知識點。
具體代碼參見:https://github.com/DengHuiJun/lintcleaner