Gradle 實現自定義外掛
阿新 • • 發佈:2018-12-27
一、以庫專案形式建立外掛
1.建立專案
如果僅僅是自己專案中來自定義外掛,不對外發布,那麼可以按照以下的語法來構建目錄
1.1 建立一個Module,選擇Java Library專案,專案名稱必須是 buildSrc,否則外掛不被識別
1.2 構建目錄 buildSrc/src/main/groovy 本路徑android studio會自動識別為 groovy類。
1.3、在main目錄中再構建 resources/META-INF/gradle-plugins,這個目錄是groovy專案的資原始檔目錄。
注意,外掛的程式碼可以是java實現,程式設計方式比較繁瑣,這裡我們使用groovy語言。
2、程式碼實現
新建groovy檔案 CustomPluginTest.groovy,程式碼如下
package com.ncf.plgimport org.gradle.api.Pluginimport org.gradle.api.Projectclass CustomPluginTest implements Plugin<Project>{ @Override void apply(Project project) { //增加閉包名稱,閉包為customPlugin,是 CustomPluginTestExtension型別,因此CustomPluginTestExtension型別中的JaveBean型別的屬性可以任意設定 project.extensions.add("personInfo",PersonInfo) //personInfo用於build.gradle中新增配置塊 project.task("showPersonInfo") << { if(project.personInfo==null) return ; println("姓名:" + project.personInfo.name) println("年齡:" + project.personInfo.age) println("地址:" + project.personInfo.address) } project.extensions.add("bookInfo",BookInfo); project.task("showBookInfo",dependsOn:"showPersonInfo" ) << { //注意,showBookInfo依賴showPersonInfo,dependsOn:"showPersonInfo" def book = project.extensions.findByType(BookInfo); println("喜歡的書籍:" + book.name + ", " + book.id + ", " + book.price+'元'+','+book.address+","+book.isbn); } } }
PersonInfo類
package com.ncf.plgclass PersonInfo { def name = "init"; def age = "init"; def address = "init";}
BookInfo類
package com.ncf.plgclass BookInfo { def name = "《紅樓們》"; def isbn = "SW.SH.CN.I.20181227"; def address = "北京市海淀區西北旺"; def price = 25.9f def id = 'BS1001029'}
buildSrc 中的 build.gradle的定義,引入groovy外掛,並依賴 gradleApi()、localGroovy()。
apply plugin:'groovy' #必須group='com.ncf.plg' version='3.0.0' dependencies { implementation gradleApi() #必須 implementation localGroovy() #必須 implementation fileTree(dir: 'libs', include: ['*.jar']) } repositories { mavenCentral() #必須} sourceCompatibility = "1.7"targetCompatibility = "1.7"
配置MyCustomPlugin.properties
implementation-class=com.ncf.plg.CustomPluginTest
3、使用外掛
在app專案的build.gradle中,我們引用外掛
import com.ncf.plg.PersonInfo apply plugin: 'MyCustomPlugin' //properties的名稱personInfo{ name='張三' age=25 address='北京市海淀區朝陽路'}
4、呼叫任務
執行如下命令
gradle showBookInfo 【如果是windows系統,呼叫gradlew showBookInfo】
執行結果如下
> Configure project :app> Task :app:showPersonInfo姓名:張三 年齡:25 地址:北京市海淀區朝陽路 > Task :app:showBookInfo喜歡的書籍:《紅樓們》, BS1001029, 25.9元,北京市海淀區西北旺,SW.SH.CN.I.20181227