Android Gradle插件平台开发系列:前言
Android Gradle插件平台开发系列一:Android APT
Android Gradle插件平台开发系列二:Android SPI
Android Gradle插件平台开发系列三:自定义gradle plugin
一、自定义Plugin的3种方式
1.1 直接在build.gradle文件下定义并使用。
apply plugin: MyPlugin
class MyPlugin implements Plugin<Project>{
@Override
void apply(Project project) {
println "this is my plugin"
}
}
1.2 buildSrc方式
与独立library方式一致,module名称必须是buildSrc(gradle插件开发专属目录),优点是免发布即可直接引用。
1.3 独立library方式
插件开发成功后,需发布本地或者远程仓库才可使用。
1.3.1 新建java library,并在build.gradle文件下添加相关配置。
plugins {
id 'groovy'
}
java {
sourceCompatibility = JavaVersion.VERSION_1_7
targetCompatibility = JavaVersion.VERSION_1_7
}
dependencies {
implementation gradleApi()
implementation localGroovy()
}
1.3.2 main目录下创建groovy和resources目录。
1.3.3 groovy目录下创建TestPlugin类并实现Plugin接口。
1.3.4 注册插件
方式一:在resources\META-INF\gradle-plugins目录下创建come.clife.plugin.properties文件并增加相关配置。
implementation-class=com.clife.plugin.TestPlugin
方式二:在插件module的build.gradle文件里增加以下配置。
plugins {
id 'java-gradle-plugin'
}
gradlePlugin {
plugins {
plugin_1 {
id = 'com.clife.plugin'
implementationClass = 'com.clife.plugin.TestPlugin'
}
...
plugin_n {
id = 'com.clife.plugin'
implementationClass = 'com.clife.plugin.TestPlugin'
}
}
}
二、发布插件
2.1 发布插件
在build.gradle文件下增加发布maven仓库配置,并执行./gradlew :plugin:uploadArchives指令
apply plugin: 'maven'
uploadArchives {
repositories {
mavenDeployer {
repository(url: uri('../repository')) {
pom.groupId = 'com.clife.plugin'
pom.artifactId = 'TestPlugin'
pom.version = '1.0.0'
}
}
}
}
2.2 查看发布成功插件
三、使用插件
3.1 在工程根目录的build.gradle文件下添加插件配置。
插件名称及版本为发布脚本里的 pom.groupId : pom.artifactId : pom.version
buildscript {
repositories {
google()
jcenter()
maven { url('../repository') }
}
dependencies {
classpath 'com.android.tools.build:gradle:4.1.2'
classpath 'com.clife.plugin:TestPlugin:1.0.0' // 引用发布成功插件
}
}
注:buildSrc方式开发的plugin不需要此配置
3.2在主module的build.gradle文件下引用插件。
插件id为插件工程resources\META-INF\gradle-plugins目录下properties文件名称。
plugins {
id 'come.clife.plugin'
}
四、高级玩法
如上所述,不管是buildSrc方式还是独立library方式开发插件,都各有局限性。buildSrc方便调试,但当有多个插件要开发时,无法保持插件工程独立性,增加维护成本。独立library方式可以实现插件工程独立,方便维护及发布,但每次都要发布后才能使用,不方便调试。怎么解决这个问题,那就是,使用空白buildSrc工程依赖插件工程的方式。
4.1 按独立library方式开发插件
4.2 新建buildSrc目录,在目录下新增settings.gradle和build.gradle文件
4.3 settings.gradle文件配置
include ':plugin'
project(':plugin').projectDir = new File('../modules_plugin/plugin')
include ':plugin_a'
project(':plugin_a').projectDir = new File('../modules_plugin/plugin_a')
4.4 build.gradle文件配置
dependencies {
implementation project(':plugin')
implementation project(':plugin_a')
}
4.5 使用kotlin开发插件
在buildSrc工程的build.gradle文件增加以下配置:
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.10"
}
}
allprojects {
repositories {
google()
jcenter()
}
}
在plugin工程的build.gradle文件下增加以下配置:
plugins {
id 'kotlin'
id 'kotlin-kapt'
}
五、插件调试
敬请期待…
|