本文由小编好友huhu原创,如转载请自觉声明原创,谢谢。
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插件的方法,我们后面会做一些有实际功能的插件,再给大家介绍。