android Gradle插件分类与使用

gradle引用根目录下的gradle脚本 apply from rootProject apply from: this.rootProject.file('mavenpublish.gradle') 目录结构如下: 完整配置如下: plugins { id 'com.android.library' id 'kotlin-android' } //apply from: 'mavenpublish.gradle' //apply from: this.rootProject.file('mavenpublish.gradle') apply from: roo 阅读详情

简介

Gradle 是一款非常优秀的构建系统工具,它的DSL基于Groovy实现,可以通过DSL来达到你构建的目的。其中提供了插件的概念,基于Gradle进行很好的扩展,而不改变其核心基础,又能满足不同业务的需要。
这里只说android gradle 插件
从Gradle的角度来说,Android其实就是Gradle的一个第三方插件,由Google开发的。但从Android角度来看,Android插件是基于Gradle构建的,然后加上Gradle Wapper(包装器,保证对于studio运行时,gradle的环境和版本带来一个确定性,并且能快速启动gradle)和studio完美搭建了android构建系统。

作用与优点

作用

  • 为项目配置依赖
  • 为项目配置约定,比如约定代码的存放位置、签名位置
  • 为项目添加任务,比如测试、编译、打包等
  • 为项目的核心对象和其他插件的对象添加扩展类型
  • 为项目提供公共化配置

优点

  • 更高程度的模块化
  • 重用和减少维护在多个项目类似的逻辑开销
  • 封装必要的逻辑,并允许构建脚本尽可能是声明性的

插件分类

脚本插件

先看代码,根目录定义config.gradle文件:

ext {
    cfgs = [
            compileSdkVersion : 29
    ]
    android = [

            versionName : '1.0.0'
    ]
}

在根gradle文件中引入插件

apply from: "config.gradle"

task test{
    doLast{
        println("版本名称是:${android.versionName}")
    }
}

执行 ./gradlew test,会输出:版本名称是:1.0.0

实际上这不算真正的脚本插件,但定义还是脚本插件。更像是c++的头文件引入。
应用脚本插件,其实就是把这个脚本加载进来,使用apply from关键字引入的。但是作用也很大,我们在多模块开发的时候,我们可以庞大的脚本文件,进行分块、分段整理,拆分成一个个公用、职责分明的文件。比如:将很多共有的库版本号一起管理、应用构建版本一起管理、maven配置脚本文件抽取等等。

对象插件

对象插件(二进制插件)是实现了org.gradle.api.Plugin接口的插件。可以分为内部插件和第三方插件。

内部插件

内部插件是gradle提供的,它们可以有plugin id。
比如我们定义一个Java插件

apply plugin : org.gradle.api.plugins.JavaPlugin

由于Gradle会帮我们默认导入org.gradle.api.plugins包,所以可以省略前缀,如下:

apply plugin :JavaPlugin

更简洁的,对于Gradle自带的核心插件都有一个容易记的短名,称其为plugin id,比如这里的Java插件对应的id就是java,所以简化如下:

apply plugin :'java'

第三方插件

第三方的对象插件通常是jar文件,要想让构建脚本知道第三方插件的存在,需要使用buildscrip来设置依赖,需要配置classpath。
我们最熟悉的android Gradle插件也属于第三方插件,我们经常会这么写:

buildscript {
    ext.kotlin_version = '1.3.10'

    repositories {
       jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.4.2'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        
    }
}

然后我们才能引入apply plugin: 'com.android.application'

对象插件自定义

写一个简单的自定义插件,按照标准要实现Plugin接口:

class GreetingPlugin implements Plugin<Project>{

    /**
     * Apply this plugin to the given target object.
     *
     * @param target The target object
     */
    @Override
    void apply(Project target) {
        target.task('testplugin'){
            doLast {
                println('hello the GreetingPlugin')
            }
        }
    }
}
apply plugin: GreetingPlugin

当插件应用于项目时,Gradle将创建插件类的实例,并调用实例的apply方法。这里我们定义了一个task任务,然后在控制台执行这个任务:

 ./gradlew testplugin

会输出:

> Task :testplugin
hello the GreetingPlugin

插件DSL

plugins DSL是一种新出的插件应用放肆,需要在Gradle 2.1 以上版本才可以使用。
插件DSL正在孵化(incubating)中,请注意,在以后的Gradle版本中,DSL和其它配置可能会改变。
使用就是依靠闭包代码来设置插件,比如指定Java插件:

plugins {
    id 'java'
}

还有就是如果该插件已经被托管在https://plugins.gradle.org/上,就不需要配置classpath依赖了,直接使用plugins就可以使用插件:国内网差

plugins{
	id "org.sonarqube" version "1.2"
}

Android Gradle 插件

分类

可根据工程类型分成一下:

  • 应用程序插件:它可以生成一个可运行的apk应用,插件id为:com.android.application。
  • 库插件:它可以生成AAR包给其他的APP工程公用,跟Jar一样,但是塔包含了Android资源等信息,插件id为:com.android.library。
  • 测试插件:用于对其他模块进行测试,插件id为:con.android.test。
  • feature插件:用于创建Android Instant App 是需要用到,插件id为:com.android.feature。
  • Instant App插件:是Android Instant App 的入口,插件id为:com.android.instantapp.

编写与集成

编写

对于插件的编写,可以使用java、kotlin、groovy语言,都是基于虚拟机。这里选groovy语言编写

build.gradle中编写

第一种:就跟前面写的自定义对象插件一样,直接写在项目build.gradle里面,这种一般不推荐,很low。

buildSrc编写

第二种: 在buildSrc下编写插件。根目录下创建buildSrc目录(或者通过创建java 模块也行),请仔细检查名字是不是对的,buildSrc是Android studio预留的命名,它会自动识别并构建的。在分别创建以下文件或目录:
build.gradle 需要引入groovy的sdk,也可以指定sourceSets的目录:

//我们使用groovy来编写,引入groovy库
apply plugin: 'groovy'
//apply plugin: 'java-library'

创建src/main/groovy目录(如果java编写,请放在java目录)
在这里插入图片描述
其中recources目录是用来配置资源的,如果需要在引入包名,可以在groovy里面创建包名,之后需要在该目录下指定。在resources目录下创建目录META-INF/gradle-plugins目录,最后在该目录下编写插件属性文件com.hujin.plugin.properties文件。其com.hujin.plugin就是定义的包名路径,而.properties是后缀,千万别写错了。然后在该文件中编写插件的全类名:implementation-class=com.hujin.plugin.MyTestPlugin

我们这里简单引入单个文件为例子,不处理包名。后面会以包名方式再介绍

创建一个文件,跟上面的自定义一样,实现Plugin接口的类,切记,文件一定要以.groovy结尾,要不然就会找不到。重点:.groovy结尾

import org.gradle.api.Project
import org.gradle.api.Plugin

class MyTestPlugin implements Plugin<Project>{

    @Override
    void apply(Project project) {
        println('MyTestPlugin is Run')
    }
}

写完之后记得同步下或者rebuild下。
在主项目的build.gradle下引入:

//包名类型的,请引入包名的字符串
apply plugin: MyTestPlugin

执行build输入完成,输出:

MyTestPlugin is Run

小问题:我遇到一个报错,但是不影响使用:

在这里插入图片描述
删掉buildSrc/build/libs/buildSrc.jar包,就正常了。这个jar包属于编译产物,是可以分享的。看下种方案会介绍,或者不创建resources目录,并删掉所以build目录再同步就好了。

独立项目编写

第三种:这种方案可以发布在本地或者远程仓库,给其他人使用。另其一个工程,这里使用idea创建一个groovy工程。
在这里插入图片描述
然后修改build.gradle配置如下:

plugins {
    id 'groovy'
}

group 'com.share.plugin'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    compile gradleApi()
    compile localGroovy()
    compile 'org.codehaus.groovy:groovy-all:2.3.11'
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

然后跟buildSrc操作一样,在src/main/groovy目录下创建一个包,比如创建com.hujin.plugin包,下创建ShareCustomPlugin插件。
在这里插入图片描述
然后需要提供一个属性文件来配置插件的位置,就是要插件properties文件,在resources目录下,再创建一个META-INF/gradle-plugins/目录,再创建属性文件com.hujin.plugin.properties,写入代码:

//  src/main/resources/META-INF/gradle-plugins/com.hujin.plugin.properties
implementation-class=com.hujin.plugin.ShareCustomPlugin

implementation-class属性为自定义插件的属性。编写完毕了。

集成

插件的生成

集成还是使用本地maven模式。远端参考android mac搭建Nexus3.+私有maven这个操作。
修改原build.gradle文件:引入maven库。
注意目录,有的创建项目多进或少进了一层目录../repository和repository

plugins {
    id 'groovy'
}
//引入maven库
apply plugin: 'maven'

repositories {
    mavenCentral()
}

def group = 'com.hujin.plugin'
def version = '1.0.0'
def artifactId = 'myGradlePlugin'
uploadArchives{
    repositories.mavenDeployer{
        // 配置本地仓库路径,项目根目录下的repository目录中
        repository(url: uri('repository'))
        pom.groupId = group
        pom.artifactId = artifactId // 项目名称(通常为类库模块名称,也可以任意)
        pom.version = version
    }
}

dependencies {
    compile gradleApi()
    compile localGroovy()
}

同步后,找到右侧Gradle侧边栏:执行uploadArchives
在这里插入图片描述
然后会生成本地maven文件:
在这里插入图片描述
而图中的myGradlePlugin-1.0.0.jar包就是我们需要的插件jar包。
远端配置完后,会到本地android项目

本地的集成

本地项目还是以android为例子,参考tools.build:gradle的引入。

  1. 在根build.gradle中,引入本地maven仓库:
buildscript {
    repositories {
        google()
        jcenter()
        maven {
        //这个url 是 上个项目,生成的本地maven文件,你也可以copy到本地,一样的
            url 'file:/Users/apppp/IdeaProjects/CustomPluginShare/repository'
        }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.5.4'
        classpath 'com.hujin.plugin:myGradlePlugin:1.0.0'
    }
}

repository这个是插件项目下地址。

  1. 引入classpath:
  classpath 'com.hujin.plugin:myGradlePlugin:1.0.0'

3.导入插件

apply plugin: 'com.hujin.plugin'

验证是否引入成功,执行 task 'assembleDebug',会打印出ShareCustomPlugin的打印代码:

> Configure project :
第三方插件 ShareCustomPlugin  被调用

小结

这里还是简单的创建和使用,还没有真正的项目化。如何写一个插件,能帮助项目自动化或者便捷化,才是真正的开始。

一篇文章看懂gradle 这段时间来学习了gradle,也体会到了gradle从初步理解到基本熟悉,再到深入源码这样一个过程中的一些曲折。于是就萌发了写这样一篇逐步深入原理的文章的想法。 这篇文章主要是gradle的基础知识篇。看完这篇文章,你可以: 清楚gradle的定义和解决的痛点 基本理解Android gradle的运作机制 基本理解gradle的大部分语法 学会基本的groovy开发 如果你想关注gradle... 阅读详情

相关推荐

Android Gradle 自定义Plugin实现_android plugin

而 Gradle 改良了过去 Maven、Ant 带给开发者的问题,至今也成为 Android Studio 内置的封装布署工具。

2501_90228903的博客 1298

Gradle插件的引用:apply plugin和apply from

Gradle是一款帮助开发人员更快更好的编译、自动化运行和分发软件的工具。Gradle具有无与伦比的通用性,可以编译Java、C++,Python或者任何其他你使用的语言。 与Maven类似,Gradle本质上也是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成。 Gradle插件大致分为两种: (1)二进制插件。二进制插件一般都是被打包在一个Jar里独立发布的,比如我们自定义的插件,在发布的时候我们也可以为其指定plugin id,这个plugin id最好是一个全限定

u010227042的博客 1万+

AndroidBuildGradleCommonLibrary:这是我用于 Android 项目的 gradle 通用库。 将“git submodule”添加到项目中。 由“build.gradle”中的“apply from”使用

AndroidBuildGradleCommonLibrary 这是我用于 Android 项目的 gradle 通用库。 将“git submodule”添加到项目中。 由“build.gradle”中的“apply from”使用。 设置 git submodule add git@github.com:jakenjarvis/AndroidBuildGradleCommonLibrary.git gradle/commonlibrary git submodule update --init git commit -m "Add AndroidBuildGradleCommonLibrary as a submodule" 更新 git submodule foreach git pull origin master git commit -m "Update AndroidB

Gradle 使用指南 -- 基础配置

我的博客原文地址 Gradle是一种构建工具,它抛弃了基于XML的构建脚本,取而代之的是采用一种基于Groovy的内部领域特定语言(DSL),建议可以先熟悉一下Groovy脚本。 Gradle API 文档 Android 配置构建 Android 插件 DSL 扩展 本文只是简单的介绍一下 Gradle 的一些基本配置,如果想进行一些高级的操作或者是想深入的了解这些配置,请参考我的后面...

寒江蓑笠的专栏 7万+

TikTok达人私信自动化:用Node.js和纯JavaScript实现WSS协议通信(附完整代码结构)

本文详细介绍了如何使用Node.js和WSS协议实现TikTok达人私信自动化系统。通过分层架构设计、WSS连接管理、消息加密策略及频率控制,开发者可以构建稳定高效的私信工具,突破平台API限制,适用于跨境电商和社交媒体运营场景。

weixin_30352645的博客 520

数字IC后端设计实现OCC(On-chip Clock Controller)电路介绍及时钟树综合案例

数字IC后端设计实现OCC(On-chip Clock Controller)电路介绍及时钟树综合案例

weixin_37584728的博客 4736

Gradle系列之Android Gradle插件

通过前面几篇文章学习了 Gradle 基础知识以及 Gradle 插件相关的知识,关于 Gradle 及其插件相关知识请先阅读下面几篇文章: Gradle系列之初识Gradle Gradle之Groovy基础篇 Gradle系列之构建脚本基础 Gradle系列之Gradle插件 Gradle系列之Java Gradle插件 学习 Gradle 的目的主要是为了更好的在 Android 开发中使...

躬行之 773

UNITE真菌数据库使用避坑指南:从下载到注释的完整流程

本文提供了UNITE真菌数据库从下载到注释的完整实战指南。针对真菌ITS序列分析,重点解析了数据库版本选择、格式转换的常见陷阱,并详细介绍了如何训练优化的sklearn分类器以提升物种注释的精度和可靠性,帮助用户构建高效稳定的本地工作流。

weixin_29240343的博客 200

Labview及NI-USRP驱动安装教程

软件下载 安装使用的LabVIEW2018及NI-USRP驱动程序已上传,下载地址: 天翼云盘链接 (访问码:oc33) 百度网盘链接 (提取码:88mi) (注:天翼云盘下载不限速) LabVIEW2018安装步骤 右键软件压缩包选择解压至LabVIEW2018 选中文件,鼠标右击选择以管理员身份打开2018LV-WinChn.exe文件。 点击确定。 点击Unzip解压。 点击确定。 点击下一步。 填写任意信息后,点击下一步。 点击下一步。 点击浏览更改安装路径建议安装到除C盘以

dadapongi6的博客 2万+

SAP 小结

关于SAP 开发的实习就要告一段落了,从刚开始接触,到现在已经6个月了,想要很简要的把自己对SAP的理解写出来,便于以后查阅(不定期更新)。 1. 什么是SAP? 广义的SAP,可以指代SAP公司以及SAP的各种产品,它的意义要在特定语境下才能确定。一般我们所说的SAP特指SAP ERP。 SAP ERP(enterprise resource planning)是一个企业信息系统。通过这个系

Remy的博客 1953

Android Gradle 插件

从 Gradle 角度看,Android 插件是由 Google 的 Android 团队开发的一个第三方插件。 从 Android 的角度看,Android 插件是基于 Gradle 构建的,是和 Android studio 完美搭配的新一代构建系统。

佛系编码 1370

GD32F450以太网(2-2): PHY芯片IP101GR介绍

IP101是台湾省九阳电子公司生产制造的,符合IEEE 802.3/802.3u标准单端口快速以太网收发器100Mbps和10Mbps操作,它支持自动MDI/MDIX功能,简化网络安装和减少系统维护成本。支持Auto MDI/MDIX已内置4个49.9欧的精密电阻支持中断功能支持 MII/RMII 接口超低功耗

Zhichao_Zhang的博客 1万+

gradle-android插件

2018-12-22 文章目录应用Android插件Android Gradle 工程示例compileSdkVersionbuildToolsVersiondefaultConfigbuildTypesAndroid Gradle任务 Android Gradle插件可以分为三类,分别对应Android中的三类工程: App应用工程,它可以生成一个可运行的apk应用,对应插件id:com.android.application Library库工程,可以生成AAR包给其他工程使用,对用插件id:com.

Huang兄 592

OpenClaw实战系列07:定时任务与自动化工作流实战——让AI从“被动响应”到“主动执行”

通过本文的学习,你已经将 OpenClaw 从“被动应答”升级为“主动执行”的自动化引擎。定时简报:每天8点自动生成行业简报推送飞书/钉钉GitHub事件触发:PR合并自动触发Code ReviewAgent间协作:数据采集→分析→报告全自动流水线系统监控:定时检查服务器状态,异常自动告警核心收获掌握 OpenClaw 内置 Cron 系统的三种调度模式学会 Webhook 配置和事件触发机制理解 Agent 间通信的两种方式(sessions_spawn / sessions_send)

PeterPan的博客 691

YOLO11-Seg优化:注意力魔改 | 具有切片操作的SimAM注意力,魔改SimAM

问题点:SimAM计算整张特征图的像素差平均值时加权可能会忽略小目标的重要性,同时与整体平均值相比可能和背景信息相似,导致加权增强较弱;

会AI的学姐 459

Android Gradle插件开发初次交手(一)

一、 Android Gradle插件 熟悉使用Android Studio构建Android项目的开发者都知道我们在创建一个Android项目的时候,都会在项目的根目录和每个Module的根目录下生成一个build.gradle文件,在Module目录下的build.gradle文件下都会有如下的描述: plugins { id 'com.android.application' } 或 apply plugin: 'com.android.application' 那么这个com

nihaomabmt的专栏 2990

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

《Gradle 权威指南》读书笔记——第七章 Android Gradle 插件

AndroidGradle插件其实就是一个Gradle的第三方插件 优点:容易重用代码和资源, 容易创建应用衍生版本(多渠道包), 容易配置扩展和自定义构建过程, 和IDE无缝整合 Android Gradle插件分类 //app com.android.application //aar com.android.library //test com.android.test 应用Andriod...

Annoke的博客 314

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Clawdbot本地部署与飞书Telegram双平台对接指南

自动化机器人框架是现代企业实现跨平台协作的重要工具,其核心原理是通过API集成不同通讯平台的消息系统。Clawdbot作为开源机器人框架,采用Java+Python技术栈,支持插件化开发模式,能够有效解决企业多平台消息孤岛问题。在技术实现上,通过Webhook监听和消息队列机制确保实时性,配合消息转换器处理不同平台的数据格式差异。典型应用场景包括跨平台消息同步、自动化工作流触发和智能客服系统搭建。本文详细介绍如何在Ubuntu系统部署Clawdbot,并实现与飞书和Telegram的深度集成,涵盖从环境配置

weixin_33769125的博客 486

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

《Gradle权威指南》--Android Gradle插件

No1: Android Gradle插件分类 App插件id:com.android.application Library插件id:com.android.library Test插件id:com.android.test No2: 除了插件id之外,如果是第三方的插件,还要配置它们的依赖classpath。Android Gradle插件就是属于第三方插件,它托管在Jcenter...

weixin_30390075的博客 122

Android Gradle使用详解(三) 之 Android Gradle插件配置详解

通上前两篇博文由浅入深的学习Gradle的基础和Gradle的Java插件相关知识后,现在终于到了高潮部分了,让我们来进一步正式学习Android Gradle插件。前面提到,Android Gradle插件是一个基于内置的Java插件来实现的第三方插件,它是由google的Android团队开发的。 1 分类 Android Gradle插件根据我们Android工程的属性分为三类: ...

子云心的博客 5640

Android Gradle 自定义Plugin实现

Id 就是插件唯一标识,后续在其他项目中引用的时候,也是引用这个 id。这里有很多不需要的文件目录,包括用来测试和 Gradle 的一些相关内容,都可以删除(当然你也可以不处理),因为当我们把这个项目引入到一个 Android 项目中时,Android 项目提供了 Gradle 相关文件。如图所示,ExamplePlugin 目录下 gradle 相关的文件,在 Android 的根目录中都存在。实际上 Gradle 后续就是执行这个 Task ,来执行代码块中的代码的。

chuyouyinghe的专栏 820

gradle的使用5

1.gradle构建的产物,称为构件。可以为jar,zip或者war等。 可以使用下面的代码进行构建,并运行命令 gradlew uploadArchives apply plugin: &amp;quot;java&amp;quot; task publishJar(type:Jar) artifacts{ archives publishJar } //def publishFile=file('build/bui...

yuezheyue123的博客 481

Android Gradle权威指南

1.Android Gradle插件介绍   我们知道Android起始就是Gradle的一个第三方插件,它是由Google的Android开发团队开发的。但从Android的角度来看,Android插件是基于Gradle构建的,和AndroidStudio完美无缝搭配的新一代构建系统。 2.Android Gradle插件分类 在Android中有3类工程   1.App应用工程,他可以生成一个可运行的apk应用。    App插件id :com.android.application   2.L

Gabriel的专栏 1025
上一篇: android groovy语法与数据结构
下一篇: Recyclerview滑动对齐方式smoothScrollToPosition
HUandroid
博客等级 码龄10年 35粉丝 113原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值