最近由于需要做一些功能,比如統(tǒng)計方法的執(zhí)行時間,處理刪除一方法等。網(wǎng)上找了一圈,雖有有很多開源工具有類似的功能了,但是不夠靈活,所以想自己開發(fā) Android Gradle 插件,于是研究了下如何開發(fā) Android Gradle 插件。
成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比鼓樓網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式鼓樓網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋鼓樓地區(qū)。費用合理售后完善,10余年實體公司更值得信賴。如果是指自己使用的話,可以用下面的方法來快速開發(fā)一個插件。在 apk module 下面的 build.gradle 新增一段代碼
class DemoPlugin implements Plugin {
@Override
void apply(Project project) {
println "=============================="
println 'hello, DemoPlugin!'
println "=============================="
}
}
apply plugin: DemoPlugin
然后 執(zhí)行一下 assembleDebug
命令,會在控制臺看到下面的打印。
==============================
hello, DemoPlugin!
==============================
到這里一個簡單的 gradle 插件就完成了。
如果需要發(fā)布出去,那么需要新建一個 Module
了,在剛剛的 Demo Project
里面新建一個 Java Library Module
。建好 Module 后,我們需要進(jìn)行一定的改造才可以開發(fā) gradle 插件,改造的方法如下:
修改剛剛新建的 Module 下面的 build.gradle 為下面的內(nèi)容
//apply plugin: 'java-library'
apply plugin: 'groovy'
dependencies {
compile gradleApi() //gradle sdk
compile localGroovy() //groovy sdk
implementation fileTree(dir: 'libs', include: ['*.jar'])
}
由于插件是用 groovy
開發(fā)的,所有我們需要在 src/main
下面新建一個 groovy
目錄,groory
的源碼將在這個目錄( src/main/groovy)
下面。有一個小技巧是,如果 AS 給你新建了一個 src/main/java
目錄的話,建議你直接把 java
目錄名修改為 groovy
。
groovy
目錄創(chuàng)建好了以后,我們需要創(chuàng)建一個實現(xiàn) Plugin
的類,然后通過 Plugin
接口里面的 apply
方法入口做我們后面想做的事情。這里有一個 demo 代碼片段:
// 源碼路徑為 src/main/groovy/com/xander/plugin/DemoPlugin.groovy
package com.xander.plugin
import org.gradle.api.Plugin
import org.gradle.api.Project
public class DemoPlugin implements Plugin {
@Override
void apply(Project project) {
println "===================================="
println "Hello DemoPlugin!!!"
println "===================================="
}
}
剛剛我們新建了一個 Plugin
了,但是我們?nèi)绾巫?AS 知道我們的插件是哪一個呢,這個時候我們就需要新建一個 properties
配置來告訴 AS。這個配置文件需要放在 src/main/resources/META-INF/gradle-plugins
目錄下面,如果沒有想要的目錄,需要自己創(chuàng)建。當(dāng)目錄創(chuàng)建好以后,你可以新建一個 properties 配置了,需要特別注意的是,配置的文件名就是后面 build.gradle 里面的 apply plugin: 'xxx.xxx.xxx'。 在這里我新的配置的文件名是 com.xander.plugin
。配置建好了,我們需要往里面寫入配置。你可以參考下面的配置。
implementation-class=com.xander.plugin.DemoPlugin
properties
里面的內(nèi)容說白了就是一個個的鍵值對,這里面鍵是 implementation-class
,這個是固定的,用來告訴 AS 我們的 Plguin 的入口實現(xiàn)類,而值就是類的路徑,簡單說就是包名+類名
。
到這里,改造就完成了,我們就有了一個 gradle 插件開發(fā)的環(huán)境。最后的 Module 結(jié)構(gòu)如下
.
├── build.gradle
├── libs
├── plugin.iml
└── src
└── main
├── groovy
│ └── com
│ └── xander
│ └── plugin
│ └── DemoPlugin.groovy
└── resources
└── META-INF
└── gradle-plugins
└── com.xander.plugin.properties
既然我們的插件是希望提供給別人用的,所以我們需要把我們的插件上傳到 maven 庫供大家下載使用。這個時候需要修改 plugin module 下面的 build.gradle 文件,可以參考下面的示例
//apply plugin: 'java-library'
apply plugin: 'groovy'
apply plugin: 'maven'
uploadArchives {
repositories.mavenDeployer {
repository(url: uri("../repos")) // repos 為本地的地址,后續(xù)可以替換為網(wǎng)路上的 maven 庫地址
pom.groupId = "com.xander.plugin"
pom.artifactId = "demoplugin"
pom.version = "1.0.0"
}
}
dependencies {
compile gradleApi() //gradle sdk
compile localGroovy() //groovy sdk
implementation fileTree(dir: 'libs', include: ['*.jar'])
}
修改 build.gradle 文件后, sync 下就可以看到 uploadArchives task 了,執(zhí)行 uploadArchives task 就會發(fā)布我們的插件了。如果在控制臺看到類似下面的 log 信息,一般就是上次成功了。
> Task :plugin_demo:compileJava NO-SOURCE
> Task :plugin_demo:compileGroovy UP-TO-DATE
> Task :plugin_demo:proce***esources NO-SOURCE
> Task :plugin_demo:classes UP-TO-DATE
> Task :plugin_demo:jar UP-TO-DATE
> Task :plugin_demo:uploadArchives
當(dāng)我們的插件開發(fā)完成,并且也上傳到了 maven 庫了以后,別人如何使用我們開發(fā)的插件呢?
首先我們需要修改 project 根目錄下面的 build.gradle 文件
buildscript {
repositories {
maven { url uri("./repos") } // repos 為本地的地址,后續(xù)需要修改為發(fā)布的 maven 庫地址
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.2.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
//格式為 --> group:module:version
classpath 'com.xander.plugin:demoplugin:1.0.0'
}
}
然后修改 apk module 下面的 build.gradle 文件,新增下面的一句命令就好了
// com.xander.plugin 為 resources/META-INF/gradle-plugins 下的 properties 文件名稱
apply plugin: 'com.xander.plugin'
到這里,插件的開發(fā)就介紹完了。
參考資料:
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。