Android自定义plugin有三种方法,本文只记录自定义的plugin作为独立项目,主要分为以下六个步骤
1.首先新建java/kotlin library这个module,作为我们此次要自定义的plugin,build.gradle文件如下
plugins {
id 'java-library'
id 'kotlin'
id 'maven' //本文用到maven本地仓库来管理plugin
}
java {
sourceCompatibility = JavaVersion.VERSION_1_7
targetCompatibility = JavaVersion.VERSION_1_7
}
dependencies {
implementation gradleApi() //使用到gradle包里的方法进行自定义plugin
}
//上传plugin到本地maven仓库
uploadArchives{
repositories {
mavenDeployer {
repository(url: uri(rootProject.ext.maven_dir))
pom.groupId = 'com.kunsan.plugin'
pom.artifactId = 'myplugin'
pom.version = '1.0.0'
}
}
}
2.创建我们要自定义的plugin,实现gradle的Plugin接口
import org.gradle.api.Plugin
import org.gradle.api.Project
class MyPlugin :Plugin<Project>{
override fun apply(target: Project) {
println("-----加载插件-----")
}
}
3.创建properties文件
作为外部依赖我们的plugin的导向标,properties文件的名称就是到时候apply plugin的名称,比如,这边我命名成com.kunsan.plugin.properties
,外部要引用我们插件,就是通过apply plugin 'com.kunsan.plugin'
,然后properties文件的内容如下:
implementation-class=com.kunsan.plugin.MyPlugin
就是第二部创建的MyPlugin的具体路径
4.配置项目plugin引用
以上三个步骤已经把我们自定义plugin就绪,可以提供外部使用的工作都做好了,接下里看下外部怎么使用我们的plugin,在项目级的build.gradle
文件中,如下:
apply from: "config.gradle"
buildscript {
ext.kotlin_version = "1.4.21"
ext.maven_dir = 'file://H://CustomPlugin/repo'
repositories {
google()
jcenter()
maven { url maven_dir } //依赖本地maven仓库的地址
}
dependencies {
classpath "com.android.tools.build:gradle:4.0.1"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
//步骤1中的本地maven配置 groupId+artifactId+version 注意groupId和artifactId以冒号隔开
classpath 'com.kunsan.plugin:myplugin:1.0.0'
}
}
allprojects {
repositories {
google()
jcenter()
maven { url maven_dir }
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
5.指定模块引用plugin
现在我们假设在app模块引入这个插件:build.gradle
plugins {
id 'com.android.application'
id 'kotlin-android'
id 'com.kunsan.plugin' //plugin名称就是步骤2说的properties文件的名称
}
8.上传plugin
至此,我们也依赖了自定义的plugin,但是如果此时你直接syns,会报错找不到plugin id,因为此时我们还没有将插件上传到本地maven中,步骤1我们定义了上传方法uploadArchives
,双击该脚本命令将plugin上传(注意每次修改MyPlugin的代码,都需要上传一次更新)
以上就是一次完整的自定义plugin过程,过程还是很简单的,接下来一篇文章会实践真正有实际意义的plugin。
网友评论