在AndroidStudio中自定义Gradle插件
2016-07-02 14:17
381 查看
我的简书同步发布:在AndroidStudio中自定义Gradle插件
转载请注明出处:【huachao1001的专栏:http://blog.csdn.net/huachao1001】
一直都想好好学习AndroidStudio中的gradle,总感觉不懂如何在AndroidStudio中自定义gradle插件的程序员就不是个好程序员,这次上网查了一下相关资料,做了一个总结~
(1) 首先,你得新建一个
(2) 然后再新建一个
(3) 将
由于
(4)
(5) 为了让我们的groovy类申明为gradle的插件,新建的groovy需要实现
因为我本人对
(6) 现在,我们已经定义好了自己的
然后在
现在,你的目录应该如下:
(7) 因为我们要用到
其中,
可以看到有
其中,
好啦,接下来就是看看效果啦!先
好啦,现在终于运行了自定义的gradle插件啦!
只是针对当前项目开发的Gradle插件相对较简单。步骤之前所提到的很类似,只是有几点需要注意:
新建的Module名称必须为
无需resources目录
目录结构如下所示:
其中,
SecondPlugin.groovy内容为:
在
由于之前我们自定义的插件我没有在
参考资料:http://kvh.io/cn/tags/EmbraceAndroidStudio/
献上源码:http://download.csdn.net/detail/huachao1001/9565654
转载请注明出处:【huachao1001的专栏:http://blog.csdn.net/huachao1001】
一直都想好好学习AndroidStudio中的gradle,总感觉不懂如何在AndroidStudio中自定义gradle插件的程序员就不是个好程序员,这次上网查了一下相关资料,做了一个总结~
1 创建Gradle Module
AndroidStudio中是没有新建类似
Gradle Plugin这样的选项的,那我们如何在
AndroidStudio中编写
Gradle插件,并打包出来呢?
(1) 首先,你得新建一个
Android Project
(2) 然后再新建一个
Module,这个
Module用于开发
Gradle插件,同样,
Module里面没有
gradle plugin给你选,但是我们只是需要一个“容器”来容纳我们写的插件,因此,你可以随便选择一个
Module类型(如
Phone&Tablet Module或
Android Librarty),因为接下来一步我们是将里面的大部分内容删除,所以选择哪个类型的
Module不重要。
(3) 将
Module里面的内容删除,只保留
build.gradle文件和
src/main目录。
由于
gradle是基于
groovy,因此,我们开发的
gradle插件相当于一个
groovy项目。所以需要在
main目录下新建
groovy目录
(4)
groovy又是基于
Java,因此,接下来创建
groovy的过程跟创建
java很类似。在
groovy新建包名,如:
com.hc.plugin,然后在该包下新建
groovy文件,通过
new->file->MyPlugin.groovy来新建名为
MyPlugin的
groovy文件。
(5) 为了让我们的groovy类申明为gradle的插件,新建的groovy需要实现
org.gradle.api.Plugin接口。如下所示:
package com.hc.plugin import org.gradle.api.Plugin import org.gradle.api.Project public class MyPlugin implements Plugin<Project> { void apply(Project project) { System.out.println("========================"); System.out.println("hello gradle plugin!"); System.out.println("========================"); } }
因为我本人对
groovy也不是特别熟悉,所以我尽可能的用
Java语言,使用
System.out.println而不是用
groovy的pintln "",我们的代码里面啥也没做,就打印信息。
(6) 现在,我们已经定义好了自己的
gradle插件类,接下来就是告诉
gradle,哪一个是我们自定义的插件类,因此,需要在
main目录下新建
resources目录,然后在
resources目录里面再新建
META-INF目录,再在
META-INF里面新建
gradle-plugins目录。最后在
gradle-plugins目录里面新建properties文件,注意这个文件的命名,你可以随意取名,但是后面使用这个插件的时候,会用到这个名字。比如,你取名为
com.hc.gradle.properties,而在其他build.gradle文件中使用自定义的插件时候则需写成:
apply plugin: 'com.hc.gradle'
然后在
com.hc.gradle.properties文件里面指明你自定义的类
implementation-class=com.hc.plugin.MyPlugin
现在,你的目录应该如下:
(7) 因为我们要用到
groovy以及后面打包要用到
maven,所以在我们自定义的
Module下的
build.gradle需要添加如下代码:
apply plugin: 'groovy' apply plugin: 'maven' dependencies { //gradle sdk compile gradleApi() //groovy sdk compile localGroovy() } repositories { mavenCentral() }
2 打包到本地Maven
前面我们已经自定义好了插件,接下来就是要打包到Maven库里面去了,你可以选择打包到本地,或者是远程服务器中。在我们自定义Module目录下的build.gradle添加如下代码:
//group和version在后面使用自定义插件的时候会用到 group='com.hc.plugin' version='1.0.0' uploadArchives { repositories { mavenDeployer { //提交到远程服务器: // repository(url: "http://www.xxx.com/repos") { // authentication(userName: "admin", password: "admin") // } //本地的Maven地址设置为D:/repos repository(url: uri('D:/repos')) } } }
其中,
group和
version后面会用到,我们后面再讲。虽然我们已经定义好了打包地址以及打包相关配置,但是还需要我们让这个打包task执行。点击
AndroidStudio右侧的
gradle工具,如下图所示:
可以看到有
uploadArchives这个
Task,双击
uploadArchives就会执行打包上传啦!执行完成后,去我们的
Maven本地仓库查看一下:
其中,
com/hc/plugin这几层目录是由我们的
group指定,
myplugin是模块的名称,
1.0.0是版本号(
version指定)。
3 使用自定义的插件
接下来就是使用自定义的插件了,一般就是在app这个模块中使用自定义插件,因此在
app这个
Module的build.gradle文件中,需要指定本地
Maven地址、自定义插件的名称以及依赖包名。简而言之,就是在
app这个
Module的build.gradle文件中后面附加如下代码:
buildscript { repositories { maven {//本地Maven仓库地址 url uri('D:/repos') } } dependencies { //格式为-->group:module:version classpath 'com.hc.plugin:myplugin:1.0.0' } } //com.hc.gradle为resources/META-INF/gradle-plugins //下的properties文件名称 apply plugin: 'com.hc.gradle'
好啦,接下来就是看看效果啦!先
clean project(很重要!),然后再
make project.从
messages窗口打印如下信息:
好啦,现在终于运行了自定义的gradle插件啦!
4 开发只针对当前项目的Gradle插件
前面我们讲了如何自定义gradle插件并且打包出去,可能步骤比较多。有时候,你可能并不需要打包出去,只是在这一个项目中使用而已,那么你无需打包这个过程。只是针对当前项目开发的Gradle插件相对较简单。步骤之前所提到的很类似,只是有几点需要注意:
新建的Module名称必须为
BuildSrc
无需resources目录
目录结构如下所示:
其中,
build.gradle内容为:
apply plugin: 'groovy' dependencies { compile gradleApi()//gradle sdk compile localGroovy()//groovy sdk } repositories { jcenter() }
SecondPlugin.groovy内容为:
package com.hc.second import org.gradle.api.Plugin import org.gradle.api.Project public class SecondPlugin implements Plugin<Project> { void apply(Project project) { System.out.println("========================"); System.out.println("这是第二个插件!"); System.out.println("========================"); } }
在
app这个
Module中如何使用呢?直接在app的build.gradle下加入
apply plugin: com.hc.second.SecondPlugin
clean一下,再
make project,
messages窗口信息如下:
由于之前我们自定义的插件我没有在
app的
build.gradle中删除,所以
hello gradle plugin这条信息还会打印.
参考资料:http://kvh.io/cn/tags/EmbraceAndroidStudio/
献上源码:http://download.csdn.net/detail/huachao1001/9565654
相关文章推荐
- android TextView如何通过setCompoundDrawables调整文字和图片的位置(文字显示在图片内)?
- Android BitmapShader 实战 实现圆形、圆角图片——代码分析
- android 布局
- android 16进制颜色值字符串转int值
- Android中ImageView和ImageButton的比较详解
- Android中Context详解
- android Fragment(1)
- Android中的MVC设计模式
- Android之本地缓存——LruCache(内存缓存)与DiskLruCache(硬盘缓存)统一框架
- Android逆向之旅---运行时修改内存中的Dalvik指令来改变代码逻辑
- viewpager的简单实现
- RecyclerView下实现 ListView嵌套GridView 复杂效果
- Unable to start service Intent not found问题及Service无法拉起也无报错问题
- android studio 常用快捷键
- 打造自己的通用适配器
- 分享到QQ、QZone方法,无需登录
- 在非Activity类里面启动Intent、Toast等、非Activity类引用getResources()方法问题的解决方法
- Android Studio 打JAR包
- Android编程之SparseArray<E>详解
- 设置Button为不可用状态