Gradle 是 Android 構建環節非常重要的一環,但並不是所有Android開發者對Gradle都足夠熟悉,因爲它在我們平時業務開發中,相對使用頻率還是較少的。 小編準備以自定義Gradle插件爲入口,帶大家一起認識一下Gradle。
自定義Gradle插件的方式
自定義Gradle的方式一共有三種: 1.直接在構建文件build.gradle中編寫Plugin,這種方法寫的Plugin無法被其他構建文件引用 2.buildSrc工程,可以在自己的工程內隨意使用,但是其他工程就無法使用 3.單獨的工程中自定義Gradle Plugin,上傳到遠端maven庫等,其他工程通過添加依賴,引用這個插件
Gradle plugin 示例
1.在build.gradle中編寫
apply plugin: DemoPlugin class DemoPlugin implements Plugin<Project>{ @Override void apply(Project target) { println("DemoPlugin in build.gradle") } }
然後build一下,可以看到控制檯輸出的Log了。
2.在buildSrc Module中創建
首先創建一個module,名字必須爲buildSrc,選擇 Java Library。然後module中會自動生成一個java文件夾以及對應的java文件,我們需要把java文件夾刪掉,再重建一個groovy 文件夾以及groovy文件。
DemoPlugin.groovy:
package com.example import org.gradle.api.Plugin import org.gradle.api.Project class DemoPlugin implements Plugin<Project>{ @Override void apply(Project project){ println("DemoPlugin in buildSrc Module") } }
buildSrc Module 中的build.gradle 文件:
apply plugin: 'groovy' dependencies { implementation gradleApi() implementation localGroovy() }
最後在我們的app 下的 build.gradle 調用即可:
apply plugin: com.example.DemoPlugin
3.生成可供其他項目複用的插件
首先跟上一種方式一樣,創建一個Module,名字沒有要求,我們建一個 gradle-plugin:
DemoPlugin.groovy 的創建同上。
主要差異在於module中的build.gradle,主要工作是把我們的gradle插件編譯成一個jar包,放到一個地方供工程使用, 我們這裏直接放在工程的plugin_libs文件夾下:
apply plugin: 'groovy' apply plugin: 'maven' dependencies { compile gradleApi() compile localGroovy() } group='com.example.plugin' version='0.0.1' archivesBaseName='gradle-plugin' uploadArchives{ repositories { mavenDeployer{ repository(url:uri('../plugin_libs')) } } }
然後,點擊uploadArchives生成相應的插件
可以看到對應的目錄下已經有我們構建的插件了:
接着,我們需要在我們的工程中依賴這個插件,工程根目錄的build.gradle:
buildscript { repositories { google() jcenter() maven{ url(uri('./plugin_libs')) } } dependencies { classpath 'com.android.tools.build:gradle:3.2.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'com.example.plugin:gradle-plugin:0.0.1' } }
最後,調用的時候依然是在app底下的build.gradle:
apply plugin: com.example.DemoPlugin
當然,我們可以把插件發佈到公司的倉庫,這樣其它項目也能直接依賴了。
這裏主要簡單介紹自定義Gradle插件的方法,我們後面會做一些有實際功能的插件,再給大家介紹。