一、Gradle介绍
gradle是Android Studio默认的构建工具,它不仅继承了maven中仓库,坐标,依赖这些核心概念,还继承了ant中target的概念,可定义自己的任务task。在build.gradle文件中我们可以看到下面的代码:
apply plugin: 'com.android.application'
'com.android.application' 就是插件的名字,构建过程中插件可以获取到整个项目的代码,做一些特别的操作。
二、自定义plugin
2.1 新建一个module
新建一个library module,不一定要library,因为之后目录结构会改动很大。
image2.2 修改目录结构
2.2.1 删除多余的文件
删除掉一些没用的目录和文件,如下图:
image2.2.2 修改build.gradle
引入groovy插件,代码如下:
apply plugin: 'groovy'
dependencies {
implementation gradleApi() //gradle sdk
implementation localGroovy() //groovy sdk
}
repositories {
jcenter()
google()
}
2.3 实现自定义plugin
增加下图的文件目录:
image2.3.1 自定义Plugin
主要代码如下:
import org.gradle.api.Plugin
import org.gradle.api.Project
public class MyPlugin implements Plugin<Project> {
void apply(Project project) {
def log = project.logger
log.error "========================"
log.error "完整的MyPlugin,开始修改Class!"
log.error "========================"
println("---------- plugin -------------")
}
}
这里没有做其他操作,只是加了些log。需要注意的是,这个不是java文件,是groovy文件。
2.3.2 新建properties文件
新建com.francis.plugin.properties,目的是用来告诉gradle具体使用的插件是哪个,内容如下:
implementation-class=com.francis.plugin.MyPlugin
2.4 编译插件
这里使用maven进行编译,方便其他项目导入。
2.4.1 修改build.gradle文件
apply plugin: 'groovy'
// 添加maven
apply plugin: 'maven'
dependencies {
implementation gradleApi() //gradle sdk
implementation localGroovy() //groovy sdk
implementation 'com.android.tools.build:gradle:3.2.0'
}
repositories {
jcenter()
google()
}
// 插件名称,引入插件时需要用到
group='com.francis.plugin'
// 插件版本号
version='1.0.0'
uploadArchives {
repositories {
mavenDeployer {
//提交到远程服务器:
// repository(url: "http://www.xxx.com/repos") {
// authentication(userName: "admin", password: "admin")
// }
//本地的Maven地址设置
repository(url: uri('F:\\workspace\\TestASM\\repos'))
}
}
}
2.4.2 开始编译
通过uploadArchives命令进行编译。
image2.5 其他项目进行引用
2.5.1 修改外层的build.gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
google()
jcenter()
maven {//本地Maven仓库地址
url uri('F:\\workspace\\TestASM\\repos')
}
}
dependencies {
classpath 'com.android.tools.build:gradle:3.2.0'
//与编译出来的文件目录一致
classpath 'com.francis.plugin:myplugin:1.0.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
2.5.2 修改项目的build.gradle文件
apply plugin: 'com.android.application'
// 引入插件,名称就是之前定义的group
apply plugin: 'com.francis.plugin'
android {
......
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
2.5.3 编译结果
可以看到编译过程中输出了下面的日志:
image具体代码已经上传到github,感兴趣的可以参考下。
网友评论