Android中基于Gradle进行编译打包的过程,下面记录一下如何进行Gradle插件开发的过程:
首先在项目中新建的一个名为buildSrc的module,为什么叫这个名字请看官方文档。然后将Java文件夹以及res文件夹删除,新建groovy文件夹以及resource文件夹:
在groovy文件夹下新建package的目录,在我这依次是com/lin/plugin,然后在resource文件夹下建立META-INF/gradle-plugins两个文件夹,在文件夹中添加包名.properties文件,其内部代码如下:
implementation-class=com.lin.plugin.TestPlugin
TestPlugin.groovy的代码如下:
class TestPlugin implements Plugin<Project> {
@Override
void apply(Project project) {
println('--------------------------')
println('this is a buildSrc plugin...')
println('--------------------------')
}
}
修改buildSrc的build.gradle文件:
//添加groovy和maven插件
apply plugin: 'groovy'
apply plugin: 'maven'
//本地发布插件
uploadArchives {
repositories {
mavenDeployer {//用于发布本地maven
pom.groupId = "com.lin.plugin"
pom.artifactId = "test"
pom.version = "0.0.1"
repository(url: uri('../repo'))
}
}
}
task sourcesJar(type: Jar) {
from project.sourceSets.main.groovy.srcDirs
classifier = 'sources'
}
task javadocJar(type: Jar, dependsOn: groovydoc) {
classifier = 'javadoc'
from groovydoc.destinationDir
}
artifacts {
archives javadocJar
archives sourcesJar
}
//插件依赖
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile gradleApi()
compile localGroovy()
}
然后在项目根目录的build.gradle中添加本地maven库,目的是为了能够在主工程中使用我们创建的插件:
buildscript {
repositories {
google()
jcenter()
mavenCentral()
maven{
url uri('./repo')//本地maven,用于发布测试插件
}
}
dependencies {
classpath 'com.android.tools.build:gradle:3.3.0'
classpath 'com.lin.plugin:test:0.0.1'//本地maven,依照上面uploadArchives内的命名组装
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
进行编译,编译完成后在插件的gradle命令中可以看到多出了如下命令:
双击该命令用于构建插件库,构建完成后能够在项目根目录下看见生成问maven文件:
然后将插件导入我们的主工程build.gradle当中
apply plugin: 'com.lin.plugin'
运行assemble命令,构建项目,可以run窗口看到TestPlugin的执行:
通过该方式就编译好了一个Plugin插件了,如果项目需要针对apk的编译打包流程做一些处理的话,就可以使用上述的插件进行hook的操作了,关于更多的gradle使用方法,移步官网阅读即可。