創(chuàng)建使用二進(jìn)制插件
使用buildSrc子工程的形式創(chuàng)建插件
-
創(chuàng)建一個這樣的名為buildSrc項(xiàng)目
編輯build.gradle
// 引用groovy插件玷室,編譯插件工程的groovy代碼
apply plugin: 'groovy'
// 聲明第三方包的倉庫言缤、
repositories {
google()
mavenCentral()
}
// 引入第三方包
dependencies {
implementation gradleApi()
implementation localGroovy()
}
- groovy文件夾創(chuàng)建一個groovy文件,作為插件工程的入口
package com.zz.myplugin.gradle
class MyPlugin implements Plugin<Project> {
// 項(xiàng)目中使用到的apply關(guān)鍵字引入插件 就會執(zhí)行此方法下的邏輯
@Override
void apply(Project project) {
println("我是MyPlugin:${project.name}")
}
}
- resource文件夾下創(chuàng)建META-INF/gradle-plugins/com.zz.myplugin.properties
com.zz.myplugin為該插件對外引用的字符串
對應(yīng)我們熟悉的android插件的引用方式:apply plugin: 'com.android.application'
引號中的字符串意思一樣
# 將引入插件的對外引用的字符串com.zz.myplugin和插件具體路徑對應(yīng)
implementation-class = package名字.MyPlugin
- 最后在我們的app模塊下build.gradle中使用
apply plugin: 'com.android.application'
// 引入本地創(chuàng)建的插件
apply plugin: 'com.zz.myplugin'
實(shí)現(xiàn)插件參數(shù)的配置
android插件的參數(shù)配置如下所示灸拍,下面實(shí)現(xiàn)一下自定義的簡單的參數(shù)配置
android {
compileSdkVersion 33
buildToolsVersion "30.0.3"
defaultConfig {
applicationId "com.example.testgradle1"
minSdkVersion 21
targetSdkVersion 33
versionCode 1
versionName "1.0"
}
...
}
- 創(chuàng)建Extension
創(chuàng)建MyExtension.groovy文件
package com.zz.router.gradle
// 1創(chuàng)建Extension
class MyExtension {
String pathName
}
- 注冊Extension
package com.zz.myplugin.gradle
class MyPlugin implements Plugin<Project> {
// 項(xiàng)目中使用到的apply關(guān)鍵字引入插件 就會執(zhí)行此方法下的邏輯
@Override
void apply(Project project) {
println("我是MyPlugin:${project.name}")
// 2注冊 Extension
project.getExtensions().create("myExtension",MyExtension)
}
}
- 使用Extension
在app模塊下的build.gradle中使用
apply plugin: 'com.android.application'
// 引入本地創(chuàng)建的插件
apply plugin: 'com.zz.myplugin'
// 3使用Extensions
myExtension {
pathName getRootDir().absolutePath
}
- 獲取Extension
獲取app中build.gradle中配置的參數(shù)
package com.zz.myplugin.gradle
class MyPlugin implements Plugin<Project> {
// 項(xiàng)目中使用到的apply關(guān)鍵字引入插件 就會執(zhí)行此方法下的邏輯
@Override
void apply(Project project) {
println("我是MyPlugin:${project.name}")
// 2 注冊 Extension
project.getExtensions().create("myExtension",MyExtension)
// 4 獲取Extension中的用戶配置的內(nèi)容
// afterEvaluate當(dāng)前工程的配置階段已經(jīng)結(jié)束 可以拿到用戶配置的插件參數(shù)
project.afterEvaluate {
RouterExtension extension = project["myExtension"]
println("用戶設(shè)置的pathName為:${extension. pathName}")
}
}
}