android gradle入门指引
Posted 三七文档库
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android gradle入门指引相关的知识,希望对你有一定的参考价值。
本文由三七原创,转载前务必联系三七。
首先祝大家元宵节快乐!本文主要讲了个Gradle入门的demo,后面会陆续更新android Gradle插件的编写,废话不多说,直接开始吧!
自定义gradle插件
配置目录
项目根目录下新建buildSrc目录。跟app module平级。然后新建如下的文件和目录。
├── buildSrc
│ ├── build.gradle
│ └── src
│ └── main
│ ├── groovy
│ └── com
│ └── jady
│ └── gradle
│ └── resources
│ └─── META-INF
│ └─── gradle-plugins
│ ├── com.jady.plugin.properties
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.gradle
import org.gradle.api.Plugin
import org.gradle.api.Project
class HelloWorld implements Plugin<Project> {
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.gradle
class CustomExtension {
String message
int version
@Override
public String toString() {
return "CustomExtension{" +
"message='" + message + '\'' +
", version=" + version +
'}';
}
}
CustomTask.groovy
package com.jady.gradle
import org.gradle.api.DefaultTask
import org.gradle.api.tasks.TaskAction
class CustomTask extends DefaultTask {
@TaskAction
void test() {
println(project.custom.toString());
}
}
HelloWorld.groovy
package com.jady.gradle
import org.gradle.api.Plugin
import org.gradle.api.Project
class HelloWorld implements Plugin<Project> {
void apply(Project project) {
project.extensions.create("custom", CustomExtension)
project.tasks.create("hello", CustomTask)
}
}
在HelloWorld.groovy中,“custom”对应build.gradle文件中配置的自定义信息名字,“hello”对应task列表中的hellotask。
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.
阅读原文可点击文中链接。
以上是关于android gradle入门指引的主要内容,如果未能解决你的问题,请参考以下文章
android gradle plugin开发 入门 搭建 小白级入门
android gradle plugin开发 入门 搭建 小白级入门