包含gradleplugin的词条
本篇文章给大家谈谈gradleplugin,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
Gradle Plugin入门使用
为了将构建脚本的逻辑封装到插件中,Gradle 需要做以下两件事: 处理插件 , 应用插件到目标中 。
按照以下的步骤来创建一个简单的插件工程吧:
好了,通过上面几个步骤,就可以创建一个简单的 Gradle Plugin 工程了,但是回想一下,我们新建一个工程之后,在 build.gradle 中,Gradle 会帮我们引用 Android 插件 apply plugin: 'com.android.application' ,它们引用方式就跟蠢前兄我们上面引用方式是不一样哦。
这里其实是给我们的 Plugin 起了个别名,然后在外部就是用这个别名来引用。接下来我们通过源码来看看'com.android.application'`是怎么定义的?
【举例】Gradle Android Plugin 中定义了带袭一个叫 AppPlugin 的插件,这个插件是 Gradle 插件对 Android 的扩展,内部定义 Android 相关的一些东西,例如 我们所熟知 android{} 内部的东西都是属于 Gradle 插件对 Android 的扩展。详细的内容可以参考另一篇博客: 从源码角度分析 Gradle 插件对 Android 的扩展
而这个 AppPlugin 就是 build.gradle 引入 apply plugin: 'com.android.application' ,查看源码,这个别名是定义在一个 文件名 上的,文件内容对这个 AppPlugin 的映射关系。
那么我们依样画葫芦,我们也来定义一下我们插件的别名吧:
好了,就这样,悔卖我们也可以像引用 Android Gradle Plugin ID 一样来引用我们自己的插件咯。
什么是扩展插件?
【举例】我们想在 build.gradle 中通过配置 Extension 相关的属性 ,然后将 Extension 这个对象传递给我们自定义的 Plugin。
下面我们还是基于 PluginTest 这个插件来定义一个简单的插件扩展。
我这里定义的是 Groovy Bean (跟 Java Bean 类似),内部定义一个 message 变量。
//build.gradle
插件扩展在 Project 和 Plugin 之前传递数据如图所示
自定义Gradle Plugin入门——Git仓库管理插件
以前的项目业务非常多,分了很多模块,每个模块都做成库上传都仓库。这样的话每次开发新业务切换分支都累个半死。
所以组友宽里的大佬搞了一些脚本,有 shell 的,有 python 的,但是要多学一门语言就感觉很头疼纳告樱,所以想着能不能用 Gradle 写个插件实现。好吧,为了不学 shell 和 python ,花了很长时间研究 Gradle ,笑死。
这个插件主要的功能就是从不同的远程拉取多个仓库到当前项目洞丛,后期切换分支的时候,修改一下分支名就好了,具体使用方式如下
[图片上传失败...(image-4b6638-1647489362381)]
[图片上传失败...(image-bd7c29-1647489362381)]
在上面定义好扩展之后可以在build.gradle调用
[图片上传失败...(image-20a255-1647489362381)]
[图片上传失败...(image-641387-1647489362381)]
[图片上传失败...(image-fed14d-1647489362381)]
[图片上传失败...(image-c0ca90-1647489362381)]
自定义插件的方式到这就结束了。这个步骤比较初级,还有很多需要完善的,但是新手入门已经是够了,看起来非常简单,实际上我花了超过20小时的时间来完成,中间遇到各种编译不通过,依赖出问题, Gradle 报错看不懂,等等问题
总而言之, Gradle 非常复杂,但也非常有用,学一点皮毛能减少大量的时间,多摸鱼不好吗!!!
以上的功能还有不满意的地方:
如果有大佬懂的,或者以后实力上涨了,有解决办法了再继续完善。
如何使用Android Studio开发Gradle插件
使用Android Studio开发Gradle插件的步骤:
1 创建Gradle Module
AndroidStudio中是没有新建类似Gradle Plugin这样的选项的,那我们如何在AndroidStudio中编写Gradle插件,并打包出来呢?
(1) 首先,你得新建一个Android Project
(2) 然后再新建一个Module,这个Module用于开发Gradle插件,同样,Module里面没有gradle plugin给你选,但是我们只是需要一个“容器”来容纳我们写的插件,因此,你可以随便选择一个Module类型(如PhoneTablet 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 Pluginproject {/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 {
compile gradleApi()
compile localGroovy()
}
repositories {
mavenCentral()
}
2 打包到本地Maven
前面我们已经自定义好了插件,接下来就是要打包到Maven库里面去了,你可以选择打包到本地,或者是远程服务器中。在我们自定义Module目录下的build.gradle添加如下代码:
group='com.hc.plugin'
version='1.0.0'
uploadArchives {
repositories {
mavenDeployer {
repository(url: uri('D:/repos'))
}
}
}
其中,group和version后面会用到,我们后面再讲。虽然我们已经定义好了打包地址以及打包相关配置,但是还需要我们让这个打包task执行。点击AndroidStudio右侧的gradle工具,如下图所示:
可以看到有uploadArchives这个Task,双击uploadArchives就会执行打包上传啦!执行完成后,去我们的Maven本地仓库查看一下:
其中,com/hc/plugin这几层目录是由我们的group指定,myplugin是模块的名称,1.0.0是版本号(version指定)。
[img]关于gradleplugin和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。