自定義Android Gradle外掛的3種方式
因為gradle外掛是在編譯過程中生效, 不用修改程式碼就能實現很多功能, 幾乎每個app都使用了gradle外掛。 下面就介紹一下自定義gradle外掛的3種方式。
按照官網說明, 分為3種方式。
1、Build script, 即在專案中的build.gradle檔案裡新增groovy程式碼並引用; 確定是只有當前工程可用;
2、buildSrc project, Android Studio會找rootPrjectDir/buildSrc/src/main/groovy目錄下的程式碼。 坑:當新建libraray module並命名為buildSrc後會提示Plugin with id 'com.android.library' not found.
apply plugin: 'groovy' buildscript { repositories { mavenCentral() jcenter() google() } dependencies { classpath 'com.android.tools.build:gradle:3.1.3' } } dependencies { compile gradleApi() compile localGroovy() compile 'com.android.tools.build:gradle:3.1.3' } allprojects { repositories { mavenCentral() google() } }
3、Standalone project, 即單獨工程,這也是最常見的方式;一般為傳版本到jcenter或maven裡。 實現方式很簡單, 我們可以在buildSrc裡除錯, 待需要發版時使用Android Studio開啟buildSrc模組就新生成一個工程了。
例項:
方法一: 在專案build.gradle檔案裡定義groovy外掛.
apply plugin: GreetingPlguin //在build.gradle檔案中定義類 class GreetingPlguin implements Plugin<Project> { @Override void apply(Project target) { println("GreetingPlguin is executed!!!!!!") //解析屬性 def extension = target.extensions.create("greeting", GreetingPluginExtension) target.task('hello') { doLast { println("Hello from the GreetingPlugin") //讀取配置資訊 println(String.valueOf(extension.showMsg)+ "," + extension.message + "," + extension.time) } } } }
編譯工程
可以看到build輸出裡包含了GreetingPlugin is executed這句日誌, 說明外掛被執行。
方法二:使用buildSrc工程, 就是在當前工程裡新建個library module, 然後按照圖中格式調整內容。 外掛入口在plugintest.properties裡宣告,檔案內容implementation-class=com.brycegao.buildsrc.SrcPlugin
方法三:單獨一個工程, 因為其它工程也可以用,所以準備釋出到jcenter上。 開啟bintray.com後一定要註冊成個人使用者!!!
引用時就是在build.gradle裡新增類似implementation 'com.brycegao.libplugin:libplugin:1.0.1' 就行了。
上傳成功並待jcenter稽核後才可以使用。
坑:
1、jcenter不支援QQ郵箱, 我註冊時關聯github賬戶(使用的QQ郵箱)就無法註冊, 點選註冊按鈕時郵箱欄就變紅。吐個槽:jcenter就不能給個提示麼。 最後我是用gmail郵箱註冊了個人賬號;
2、jcenter貌似不支援中文,在寫描述時用英文才能提交成功, 如果有中文就提示405 not authorized。
3、新建maven時最好關聯github地址;
4、jcenter稽核有時差,比較慢。
demo地址: https://github.com/brycegao/PluginTest