一、以庫項目形式創建插件
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