做電影網(wǎng)站模板教學(xué)設(shè)計(jì)免費(fèi)注冊(cè)個(gè)人網(wǎng)站不花錢(qián)
1. 前言
本文介紹在Android
中,如何基于Gradle 8.2
,創(chuàng)建Gradle
插件。
1.1 本文環(huán)境
Android Studio
版本 :Android Studio Hedgehog | 2023.1.1
Gralde
版本 :gradle 8.2
使用 Android Gradle 插件升級(jí)助理
Android Gradle 插件版本說(shuō)明
1.2 為什么要寫(xiě)插件
可以將相關(guān)代碼抽取出來(lái),而不是耦合在build.gradle
中,成為通用性的插件,可以在多個(gè)項(xiàng)目中復(fù)用。
比如com.android.application
就是我們最為熟悉的Android
插件。
plugins {id 'com.android.application'
}
2. 創(chuàng)建插件
2.1 新建項(xiàng)目
新建MyGradlePluginTest
項(xiàng)目,這里選擇Groovy DSL
。
2.2 新建Gradle插件Module
這里選擇Java or Kotlin Library
,也可以選擇Android Library
2.3 修改build.gradle
plugins {id 'java-gradle-plugin'
}gradlePlugin {plugins {//MyTestPlugin { //這種方式也行create("MyTestPlugin") {//插件idid = 'com.heiko.myplugin'//插件的包名+類(lèi)名implementationClass = 'com.heiko.myplugin.MyPlugin'}}
}
2.4 新建插件類(lèi)
對(duì)應(yīng)implementationClass
中的路徑,新建插件類(lèi) MyPlugin
package com.heiko.myplugin;import org.gradle.api.Plugin;
import org.gradle.api.Project;class MyPlugin implements Plugin<Project> {@Overridepublic void apply(Project project) {System.out.println("這是我的第一個(gè)插件!");}
}
3. 發(fā)布插件
3.1 依賴(lài)maven-publish
在build.gradle
中,添加maven-publish
插件,然后配置發(fā)布插件的信息和倉(cāng)庫(kù)信息。
這里的maven
倉(cāng)庫(kù)配置的是本地的,僅用作演示。實(shí)際項(xiàng)目中,應(yīng)該使用真實(shí)的maven
倉(cāng)庫(kù)服務(wù)器更合理些。
關(guān)于maven
倉(cāng)庫(kù)更多的操作,詳見(jiàn)我的另一篇文章 : Android Module上傳到Maven倉(cāng)庫(kù) 及 實(shí)現(xiàn)同時(shí)上傳到多個(gè)Maven倉(cāng)庫(kù)
plugins {//...省略了代碼...id 'maven-publish'
}//...省略了代碼...println("原本的version:" + version)
println("原本的group:" + group)//設(shè)置group
group = 'com.heiko.group'
//設(shè)置版本號(hào)
version = "1.0.0"println("設(shè)置后的group:" + group)
println("設(shè)置后的version:" + version)afterEvaluate {/*這部分代碼不需要配置,會(huì)根據(jù)gradlePlugin中的進(jìn)行生成除非使用老版本的插件依賴(lài)方式(classpath):需要指定artifactId的情況下,才需要使用publications {maven(MavenPublication) {groupId = groupartifactId = 'MyPlugin'version = versionfrom components.java}}*/publishing {// 配置倉(cāng)庫(kù)地址repositories {maven {url = uri('../repo')}}}
}
build.gradle
的完整代碼如下
plugins {id 'java-gradle-plugin'id 'maven-publish'
}gradlePlugin {plugins {//MyTestPlugin { //這種方式也行create("MyTestPlugin") {//插件idid = 'com.heiko.plugin.myplugin'//插件的包名+類(lèi)名implementationClass = 'com.heiko.myplugin.MyPlugin'}}
}println("原本的version:" + version)
println("原本的group:" + group)//設(shè)置group
group = 'com.heiko.group'
//設(shè)置版本號(hào)
version = "1.0.0"println("設(shè)置后的group:" + group)
println("設(shè)置后的version:" + version)afterEvaluate {/*這部分代碼不需要配置,會(huì)根據(jù)gradlePlugin中的進(jìn)行生成除非使用老版本的插件依賴(lài)方式(classpath):需要指定artifactId的情況下,才需要使用publications {maven(MavenPublication) {groupId = groupartifactId = 'MyPlugin'version = versionfrom components.java}}*/publishing {// 配置倉(cāng)庫(kù)地址repositories {maven {url = uri('../repo')}}}
}
發(fā)布插件
這個(gè)時(shí)候,點(diǎn)擊下Sync
同步下代碼,然后可以在右側(cè)Gradle
的Tab
中,找到publishing
,里面有publish
選項(xiàng),我們雙擊它,就開(kāi)始執(zhí)行發(fā)布插件的操作了。
上傳插件成功后,可以看到如下信息
4. 使用插件
4.1 添加Maven倉(cāng)庫(kù)
pluginManagement {repositories {//省略了其他倉(cāng)庫(kù)...maven {url 'repo'}}
}
4.2 依賴(lài)插件
在更目錄下的build.gradle
中,依賴(lài)插件
plugins {id 'com.android.application' version '8.2.0' apply false//省略了其他插件代碼id 'com.heiko.plugin.myplugin' version '1.0.0' apply false
}
通常默認(rèn)配置會(huì) 立馬 解析(resolve) 并 應(yīng)用(apply) 插件。
而 apply 設(shè)為 false, 表示 不應(yīng)用插件到 根項(xiàng)目。目的是 提前解析 插件,保持一樣的版本。
4.3 應(yīng)用插件
在app
目錄下的build.gradle
中,應(yīng)用插件
plugins {id 'com.android.application'id 'org.jetbrains.kotlin.android'//應(yīng)用插件id 'com.heiko.plugin.myplugin'
}
4.4 同步項(xiàng)目
點(diǎn)擊Sync
同步下項(xiàng)目,可以看到我們的插件打印的日志了
5. 使用Groovy編寫(xiě)插件
上文中我們是使用java
語(yǔ)言來(lái)編寫(xiě)的插件,那么如果使用Groovy
語(yǔ)言來(lái)編寫(xiě)插件,需要怎么操作呢 ?
5.1 添加groovy插件
為了識(shí)別groovy
語(yǔ)言,我們需要在MyPlugin
目錄下的build.gradle
中添加groovy
插件
plugins {id 'java-gradle-plugin'//添加groovy插件id 'groovy'id 'maven-publish'
}
5.2 新建groovy目錄
在和java
同級(jí)別的目錄下,新建groovy
目錄,groovy
目錄下需要和原java
目錄一樣
5.3 新建MyPluginGroovy.groovy
在groovy
目錄下,要把MyPlugin.java
改為MyPlugin.groovy
,這里我為了方便區(qū)分,把名稱(chēng)改為了MyPluginGroovy.groovy
。
package com.heiko.myplugin;import org.gradle.api.Plugin;
import org.gradle.api.Project;class MyPluginGroovy implements Plugin<Project> {@Overridepublic void apply(Project project) {println "這是我的第一個(gè)Groovy插件!"}
}
5.4 修改implementationClass
修改MyPlugin
目錄下的build.gradle
文件中的implementationClass
,修改為groovy
目錄下對(duì)應(yīng)的插件類(lèi)的包名+類(lèi)名
,注意沒(méi)有文件后綴。
implementationClass = 'com.heiko.myplugin.MyPluginGroovy'
完整的build.gradle
文件
plugins {id 'java-gradle-plugin'id 'groovy'id 'maven-publish'
}gradlePlugin {plugins {create("MyTestPlugin") {//插件idid = 'com.heiko.plugin.myplugin'//插件的包名+類(lèi)名implementationClass = 'com.heiko.myplugin.MyPluginGroovy'}}
}//設(shè)置group
group = 'com.heiko.group'
//設(shè)置版本號(hào)
version = "1.0.1"afterEvaluate {publishing {// 配置倉(cāng)庫(kù)地址repositories {maven {url = uri('../repo')}}}
}
5.5 重新發(fā)布插件
將版本號(hào)version
改為1.0.1
,雙擊publish
,重新發(fā)布插件
5.6 依賴(lài)插件
修改項(xiàng)目根目錄下的build.gradle
,將我們的com.heiko.plugin.myplugin
插件版本號(hào)修改為1.0.1
。
重新運(yùn)行項(xiàng)目,可以看到打印的插件日志變成了
這是我的第一個(gè)Groovy插件!
6. 使用Kotlin編寫(xiě)插件
除了使用Java
或Groovy
編寫(xiě)插件,我們還可以使用Kotlin
來(lái)編寫(xiě)插件,使用kotlin
對(duì)于Android
開(kāi)發(fā)者來(lái)說(shuō)會(huì)更友好。
6.1 添加java插件
為了識(shí)別kotlin
語(yǔ)言,我們需要在MyPlugin
目錄下的build.gradle
中添加kotlin
插件
plugins {id 'java-gradle-plugin'//添加Kotlin插件id "org.jetbrains.kotlin.jvm"id 'maven-publish'
}
6.2 新建kotlin目錄
在和java
同級(jí)別的目錄下,新建kotlin
目錄,kotlin
目錄下需要和原java
目錄一樣
6.3 新建MyPluginKotlin.kt
在kotlin
目錄下,要把MyPlugin.java
改為MyPlugin.kt
,這里我為了方便區(qū)分,把名稱(chēng)改為了MyPluginKotlin.groovy
。
package com.heiko.mypluginimport org.gradle.api.Plugin
import org.gradle.api.Projectclass MyPluginKotlin : Plugin<Project> {override fun apply(project: Project) {println("這是我的第一個(gè)Kotlin插件!")}
}
6.4 修改implementationClass
修改MyPlugin
目錄下的build.gradle
文件中的implementationClass
,修改為groovy
目錄下對(duì)應(yīng)的插件類(lèi)的包名+類(lèi)名
,注意沒(méi)有文件后綴。
implementationClass = 'com.heiko.myplugin.MyPluginKotlin'
完整的build.gradle
文件
plugins {id 'java-gradle-plugin'id "org.jetbrains.kotlin.jvm"id 'maven-publish'
}gradlePlugin {plugins {create("MyTestPlugin") {//插件idid = 'com.heiko.plugin.myplugin'//插件的包名+類(lèi)名implementationClass = 'com.heiko.myplugin.MyPluginKotlin'}}
}//設(shè)置group
group = 'com.heiko.group'
//設(shè)置版本號(hào)
version = "1.0.2"afterEvaluate {publishing {// 配置倉(cāng)庫(kù)地址repositories {maven {url = uri('../repo')}}}
}
6.5 重新發(fā)布插件
將版本號(hào)version
改為1.0.2
,雙擊publish
,重新發(fā)布插件
6.6 依賴(lài)插件
修改項(xiàng)目根目錄下的build.gradle
,將我們的com.heiko.plugin.myplugin
插件版本號(hào)修改為1.0.2
。
重新運(yùn)行項(xiàng)目,可以看到打印的插件日志變成了
這是我的第一個(gè)Kotlin插件!
7. Android Gradle系列文章
Android Gradle 開(kāi)發(fā)與應(yīng)用 (一) : Gradle基礎(chǔ)-氦客-CSDN博客
Android Gradle開(kāi)發(fā)與應(yīng)用 (二) : Groovy基礎(chǔ)語(yǔ)法-CSDN博客
Android Gradle開(kāi)發(fā)與應(yīng)用 (三) : Groovy語(yǔ)法概念與閉包-CSDN博客
Android Gradle開(kāi)發(fā)與應(yīng)用 (四) : Gradle構(gòu)建與生命周期-CSDN博客
Android Gradle開(kāi)發(fā)與應(yīng)用 (五): 基于Gradle 8.2,創(chuàng)建Gradle插件-CSDN博客
Android Gradle 開(kāi)發(fā)與應(yīng)用 (六) : 創(chuàng)建buildSrc插件和使用命令行創(chuàng)建Gradle插件-CSDN博客
8. 參考文章
Using Plugins (gradle.org)
Gradle用戶(hù)手冊(cè) - Gradle8.1.1中文文檔 - API參考文檔 - 全棧行動(dòng)派 (qzxdp.cn)
編寫(xiě) Gradle 插件 | Android Studio | Android Developers (google.cn)
Android Gradle8.0版本新建Gradle插件 - 掘金 (juejin.cn)
Gradle基礎(chǔ)到進(jìn)階 - yechaoa的專(zhuān)欄 - 掘金 (juejin.cn)
【Gradle-8】Gradle插件開(kāi)發(fā)指南 - 掘金 (juejin.cn)
【Gradle-9】Gradle插件發(fā)布指南 - 掘金 (juejin.cn)
Gradle自定義插件實(shí)踐與總結(jié) - 掘金 (juejin.cn)
創(chuàng)建Gradle插件記錄 - 掘金 (juejin.cn)