Enjoy life,Enjoy coding!!
一直都想好好學習AndroidStudio中的gradle,總感覺不懂如何在AndroidStudio中自定義gradle外掛的程式設計師就不是個好程式設計師,這次上網查了一下相關資料,做了一個總結~
1 建立Gradle Module
AndroidStudio
中是沒有新建類似Gradle
Plugin
這樣的選項的,那我們如何在AndroidStudio
中編寫Gradle
外掛,並打包出來呢?
- (1) 首先,你得新建一個
Android Project
- (2) 然後再新建一個
Module
,這個Module
用於開發Gradle
外掛,同樣,Module
裡面沒有gradle plugin
給你選,但是我們只是需要一個“容器”來容納我們寫的外掛,因此,你可以隨便選擇一個Module
型別(如Phone&Tablet Module
或Android Librarty
),因為接下來一步我們是將裡面的大部分內容刪除,所以選擇哪個型別的Module
不重要。- (3) 將
Module
裡面的內容刪除,只保留build.gradle
檔案和src/main
目錄。- 由於
gradle
是基於groovy
,因此,我們開發的gradle
外掛相當於一個groovy
專案。所以需要在main
目錄下新建groovy
目錄- (4)
groovy
又是基於Java
,因此,接下來建立groovy
的過程跟建立java
很類似。在groovy
新建包名,如:com.hc.plugin
,然後在該包下新建groovy
檔案,通過new->file->MyPlugin.groovy
來新建名為MyPlugin
的groovy
檔案。- (5) 為了讓我們的groovy類申明為gradle的外掛,新建的groovy需要實現
org.gradle.api.Plugin
介面。如下所示:
package com.hc.plugin
import org.gradle.api.Plugin
import org.gradle.api.Project
public class MyPlugin implements Plugin<Project> {
void apply(Project project) {
System.out.println("========================" );
System.out.println("hello gradle plugin!");
System.out.println("========================");
}
}
因為我本人對groovy
也不是特別熟悉,所以我儘可能的用Java
語言,使用System.out.println
而不是用groovy的pintln
""
,我們的程式碼裡面啥也沒做,就列印資訊。
- (6) 現在,我們已經定義好了自己的
gradle
外掛類,接下來就是告訴gradle
,哪一個是我們自定義的外掛類,因此,需要在main
目錄下新建resources
目錄,然後在resources
目錄裡面再新建META-INF
目錄,再在META-INF
裡面新建gradle-plugins
目錄。最後在gradle-plugins
目錄裡面新建properties檔案,注意這個檔案的命名,你可以隨意取名,但是後面使用這個外掛的時候,會用到這個名字。比如,你取名為com.hc.gradle.properties
,而在其他build.gradle檔案中使用自定義的外掛時候則需寫成:
apply plugin: 'com.hc.gradle'
然後在com.hc.gradle.properties
檔案裡面指明你自定義的類
implementation-class=com.hc.plugin.MyPlugin
現在,你的目錄應該如下:
自定義外掛目錄結構
- (7) 因為我們要用到
groovy
以及後面打包要用到maven
,所以在我們自定義的Module
下的build.gradle
需要新增如下程式碼:
apply plugin: 'groovy'
apply plugin: 'maven'
dependencies {
//gradle sdk
compile gradleApi()
//groovy sdk
compile localGroovy()
}
repositories {
mavenCentral()
}
2 打包到本地Maven
前面我們已經自定義好了外掛,接下來就是要打包到Maven庫裡面去了,你可以選擇打包到本地,或者是遠端伺服器中。在我們自定義Module
目錄下的build.gradle新增如下程式碼:
//group和version在後面使用自定義外掛的時候會用到
group='com.hc.plugin'
version='1.0.0'
uploadArchives {
repositories {
mavenDeployer {
//提交到遠端伺服器:
// repository(url: "http://www.xxx.com/repos") {
// authentication(userName: "admin", password: "admin")
// }
//本地的Maven地址設定為D:/repos
repository(url: uri('D:/repos'))
}
}
}
其中,group
和version
後面會用到,我們後面再講。雖然我們已經定義好了打包地址以及打包相關配置,但是還需要我們讓這個打包task執行。點選AndroidStudio
右側的gradle工具
,如下圖所示:
上傳Task
可以看到有uploadArchives
這個Task
,雙擊uploadArchives
就會執行打包上傳啦!執行完成後,去我們的Maven
本地倉庫檢視一下:
打包上傳後
其中,com/hc/plugin
這幾層目錄是由我們的group
指定,myplugin
是模組的名稱,1.0.0
是版本號(version
指定)。
3 使用自定義的外掛
接下來就是使用自定義的外掛了,一般就是在app
這個模組中使用自定義外掛,因此在app
這個Module
的build.gradle檔案中,需要指定本地Maven
地址、自定義外掛的名稱以及依賴包名。簡而言之,就是在app
這個Module
的build.gradle檔案中後面附加如下程式碼:
buildscript {
repositories {
maven {//本地Maven倉庫地址
url uri('D:/repos')
}
}
dependencies {
//格式為-->group:module:version
classpath 'com.hc.plugin:myplugin:1.0.0'
}
}
//com.hc.gradle為resources/META-INF/gradle-plugins
//下的properties檔名稱
apply plugin: 'com.hc.gradle'
好啦,接下來就是看看效果啦!先clean project
(很重要!),然後再make
project
.從messages
視窗列印如下資訊:
使用自定義外掛
好啦,現在終於運行了自定義的gradle外掛啦!
4 開發只針對當前專案的Gradle外掛
前面我們講了如何自定義gradle外掛並且打包出去,可能步驟比較多。有時候,你可能並不需要打包出去,只是在這一個專案中使用而已,那麼你無需打包這個過程。
只是針對當前專案開發的Gradle外掛相對較簡單。步驟之前所提到的很類似,只是有幾點需要注意:
- 新建的Module名稱必須為
BuildSrc
- 無需resources目錄
目錄結構如下所示:
針對當前專案的gradle外掛目錄
其中,build.gradle
內容為:
apply plugin: 'groovy'
dependencies {
compile gradleApi()//gradle sdk
compile localGroovy()//groovy sdk
}
repositories {
jcenter()
}
SecondPlugin.groovy內容為:
package com.hc.second
import org.gradle.api.Plugin
import org.gradle.api.Project
public class SecondPlugin implements Plugin<Project> {
void apply(Project project) {
System.out.println("========================");
System.out.println("這是第二個外掛!");
System.out.println("========================");
}
}
在app
這個Module
中如何使用呢?直接在app的build.gradle下加入
apply plugin: com.hc.second.SecondPlugin
clean
一下,再make
project
,messages
視窗資訊如下:
列印資訊
由於之前我們自定義的外掛我沒有在app
的build.gradle
中刪除,所以hello
gradle plugin
這條資訊還會列印.