Android(安卓)Gradle插件入门
title: Android Gradle插件入门
abbrlink: base/skill/gradle/doc
date: 2018/2/26 10:10:10
updated: 2018/2/26 11:10:10
comments: true
tags:
- Android
- 基础
categories: - Android
文章目录
- 自定义gradle插件
- 配置目录
- 编写插件并运行
- 打包插件
- Demo下载
自定义gradle插件
配置目录
项目根目录下新建buildSrc
目录。跟app module平级。然后新建如下的文件和目录。
├── buildSrc│ ├── build.gradle│ └── src│ └── main│ ├── groovy│ └── com│ └── jady│ └── gradle│ └── resources│ └─── META-INF│ └─── gradle-plugins│ ├── com.jady.plugin.properties
这个目录树层结构可以用
tree
命令打印出来,在 Mac OSX 环境下需要使用brew install tree
安装这个包,然后在指定目录下执行tree命令就会看到目录树结构输出了。
com.jady.plugin.properties
这个文件名可以自定义,在应用插件的时候需要用到,如下所示:
apply plugin: 'com.jady.plugin'
groovy
目录下的包名也可以自定义,这里面主要存放groovy代码文件。
目录建好之后,在项目根目录的settings.gradle
中添加':buildSrc'
,将buildSrc
设置为项目的一个module。
编辑 buildSrc
中的 build.gradle
文件。
buildSrc/build.gradle
apply plugin: 'groovy'apply plugin: 'maven'dependencies { compile gradleApi() compile localGroovy()}repositories { mavenCentral()}
编写插件并运行
在groovy
目录的com.jady.gradle
包下新建一个HelloWorld.groovy
文件:
package com.jady.gradleimport org.gradle.api.Pluginimport org.gradle.api.Projectclass HelloWorld implements Plugin { void apply(Project project) { project.task('hello') { doLast { println 'Hello World' } } }}
编辑com.jady.plugin.properties
文件
implementation-class=com.jady.gradle.HelloWorld
如果不熟悉 groovy 语法,可以参考文末参考文献中的精通 Groovy,这个教程虽然老,但是真的好,一步一步带领读者入门 groovy 。
然后在 app
module 的 build.gradle
文件中应用插件:
apply plugin: 'com.jady.plugin'
sync 工程后,可以在:app
->Tasks
->other
中看到我们刚刚定义的 task hello
。
双击hello
,可以看到控制台打印了Hello World
。
接下来我们开始编写 Extension
和 Task
。 Extension
用于定义属性,与build.gradle
配置的属性对应。
CustomExtension.groovy
package com.jady.gradleclass CustomExtension { String message int version @Override public String toString() { return "CustomExtension{" + "message='" + message + '\'' + ", version=" + version + '}'; }}
CustomTask.groovy
package com.jady.gradleimport org.gradle.api.DefaultTaskimport org.gradle.api.tasks.TaskActionclass CustomTask extends DefaultTask { @TaskAction void test() { println(project.custom.toString()); }}
HelloWorld.groovy
package com.jady.gradleimport org.gradle.api.Pluginimport org.gradle.api.Projectclass HelloWorld implements Plugin { void apply(Project project) { project.extensions.create("custom", CustomExtension) project.tasks.create("hello", CustomTask) }}
在HelloWorld.groovy
中,“custom”对应build.gradle
文件中配置的自定义信息名字,“hello”对应task列表中的hello
task。
build.gradle
apply plugin: 'com.jady.plugin'...custom{ message = 'hello gradle plugin' version = 1}
sync 一下,重新执行 hello
,可以发现控制台输出的变化了,如果有问题,请仔细检查下是不是哪一步做错了。
打包插件
我们先发布插件到本地仓库。
首先,编辑buildSrc/build.gradle
文件。
buildSrc/build.gradle
apply plugin: 'groovy'apply plugin: 'maven'dependencies { compile gradleApi() compile localGroovy()}repositories { mavenCentral()}group='com.jady.gradle'version='0.1.0'archivesBaseName = 'customPlugin'uploadArchives { repositories { mavenDeployer { repository(url: uri('../repo')) } }}
sync 一下工程,应该可以发现 gradle 任务列表中的:buildSrc
下多了一个 upload
任务,运行里面的 uploadArchives
任务,可以发现在项目根目录下生成了 repo
文件夹,这个就是本地的仓库。
然后,修改项目根目录的 build.gradle
文件。
buildscript { repositories { google() jcenter() maven { url uri('./repo') } } dependencies { classpath 'com.android.tools.build:gradle:3.0.1' classpath 'com.jady.gradle:customPlugin:0.1.0' }}
再次 sync 一下工程,然后运行 gradle
任务列表中的 hello
任务。
此时groovy文件的类名会提示错误,已存在同名文件,那是因为生成了库文件,删掉 buildSrc 下的 build 文件夹就好了,也可以不删,不影响开发。
可以通过注释项目根目录build.gradle
的classpath 'com.jady.gradle:customPlugin:0.1.0'
和 buildSrc
目录的 build.gradle
文件中的以下代码切换到开发模式。
group='com.jady.gradle'version='0.1.0'archivesBaseName = 'customPlugin'uploadArchives { repositories { mavenDeployer { repository(url: uri('../repo')) } }}
学到这里,Gradle插件开发就算是入门了,如果你想了解更多,请参阅文末参考文献中的Writing Custom Plugins。
Demo下载
GradlePluginDemo
参考文献和相关资料
[1] eclipse_xu. Gradle自定义插件[OL]. http://blog.csdn.net/eclipsexys/article/details/50973205. 2016-04-22.
[2] Andrew Glover. 精通 Groovy[OL]. https://www.ibm.com/developerworks/cn/education/java/j-groovy/j-groovy.html. 2008-4-21.
[3] Google. Android gradle配置构建. https://developer.android.com/studio/build/index.html.
[4] Google. Android gradle插件指南. http://google.github.io/android-gradle-dsl/current/.
[5] Gradle. Writing Custom Plugins. https://docs.gradle.org/current/userguide/custom_plugins.html.
[6] huachao1001. 通过自定义Gradle插件修改编译后的class文件. http://blog.csdn.net/huachao1001/article/details/51819972.
[7] w3cschool. Groovy 基本语法. https://www.w3cschool.cn/groovy/groovy_basic_syntax.html.
更多相关文章
- Android(安卓)Studio NDK及so文件开发 以及常见错误
- Android上传图片到服务器,android-async-http上传图片到服务器
- Intent(open file) android
- Android(安卓)源代码编后的目录分析
- Android系统权限和root权限
- Android(安卓)Studio主要目录及文件简介
- Android(安卓)如何判断CPU是32位还是64位
- android判断是否禁用了录音权限
- NPM 和webpack 的基础使用