使用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

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