最近一直在深挖Android Gradle的學習,發現其實所謂的Android Gradle也不過就是一個gradle外掛,所以如果能學好gradle的開發,我們就可以利用Gradle為我們做很多事,比如干預Android的打包,打出我們想要地apk或者jar,再或者多渠道設定等等。
建立外掛工程
如果想實現對Gradle的開發,肯定需要一個開發Gradle的工程,這個我們可以直接使用Android Studio即可,對於Gradle工程的建立,網上主要有兩種方式
buildSrc
直接在AndroidStudio中建立一個資料夾buildSrc,然後新增src資料夾和build.gradle
檔案,如下圖所示:
在src資料夾中建立main/groovy ,main/resources
這時就可以發現當前的結構有些類似Android的開發結構了。不同的只是將java換成了groovy,這是當然了,畢竟用groovy開發,如果對groovy還不太熟悉的同學,可以參考我之前的文章Groovy基礎知識
在build.gradle
中新增如下程式碼:
apply plugin: `groovy`
dependencies {
compile gradleApi()
compile localGroovy()
}
複製程式碼
這樣我們就可以在groovy資料夾中新增對應程式碼進行gradle開發了。
java Library
第二種方式可以使用新建一個Java Library的形式:
這裡注意是Java Library不是android的 Library
我們暫時起名glib
,工程如下圖所示:
這樣的工程暫時還是不能使用的,我們需要做一些修改。
首先是修改gradle檔案:
apply plugin: `groovy`
dependencies {
compile gradleApi()
compile localGroovy()
}
複製程式碼
然後刪除java資料夾,建立groovy資料夾,以及resources資料夾,如下圖所示:
區別
使用buildSrc可以在該Project中的任何module中直接使用,如果使用新建的Java Library的形式,需要上傳Gradle外掛到原生程式碼庫,這個後面再說,所以下面的例子我們先以buildSrc的方式進行介紹
外掛測試
groovy新建一個TestPlugin.groovy檔案(注意字尾一定要是groovy):
public class TestPlugin implements Plugin<Project> {
@Override
void apply(Project project) {
println("aaaaaa")
}
}
複製程式碼
gradle外掛都需要在build.gradle中apply,如:apply plugin: `com.android.application`
所以他需要有一個對外的名字,這就需要resources下的檔案起作用了。
在resources資料夾下建立META-INF/gradle-plugins
:
然後在這個資料夾下建一個properties
檔案,這個檔案的名字就是對外的名字,所以起的時候要慎重,我們暫時叫hhh.properties
,名字特殊一點容易看出來。
檔案內容如下:
implementation-class=TestPlugin
複製程式碼
然後我們利用Android Studio自帶的app module做個測試:
然後執行打包可以發現輸出中:
上傳到本地倉庫
上面提到了如果使用java Library,需要上傳到本地倉庫才能引用,現在就需要介紹一下如何進行操作
首先需要修改build.gradle檔案:
apply plugin: `groovy`
apply plugin: "maven"
dependencies {
compile gradleApi()
compile localGroovy()
}
uploadArchives{
repositories{
mavenDeployer{
repository(url:uri(`../repo`))
pom.groupId = `com.test.plugin` // 組名
pom.artifactId = `test` // 外掛名
pom.version = `2.0.0` // 版本號
}
}
}
複製程式碼
然後執行這個uploadArchives Task
這是會發現,工程下多了一個資料夾:
app module如果需要使用,需要新增依賴:
apply plugin: `com.android.application`
apply plugin: `hhh`
buildscript{
repositories{
maven{
url uri(`../repo`)
}
}
dependencies{
classpath `com.test.plugin:test:2.0.0`
}
}
// 引用外掛
apply plugin: `fff`
複製程式碼
總結
今天就暫時先寫到這裡,之後會陸陸續續增加一些關於gradle的相關知識
也歡迎關注我的公眾號,之後會推薦更多好用的元件庫。