补齐Android技能树 - 玩转Gradle插件 | 小册免费学(上)

简介: 本节就来了解下:Gradle插件编写的知识储备 及 插件发布相关 姿势,读者亦可自行查阅官方文档:Packaging a plugin

在上一节《补齐Android技能树 - 玩转Gradle(二)》 提到过插件,有下面这样一段话:


Gradle自身 并没有提供编译打包的功能,它只是一个 负责定义流程和规则的框架,具体的编译工作都是由 插件 来完成的,比如编译Java用Java插件,编译Kotlin用Kotlin插件。插件的本质就是:定义Task,并具体执行这些Task的模板


本节就来了解下:Gradle插件编写的知识储备插件发布相关 姿势,读者亦可自行查阅官方文档:Packaging a plugin


Gradle插件本质上是一个jar文件,可以用idea创建项目,也可以使用gradle init命令创建,示例如下:


网络异常,图片无法展示
|


Tips:选择Groovy、Java、Kotlin实现都可,脚本DSL选Groovy、Kotlin皆可,笔者都用的Groovy ~


0x1、Gradle插件分类


1. 构建脚本


严格来说不上插件,就是把构建脚本代码写到一个单独的文件中,复制粘贴到项目目录下引用。示例如下:


外部构建脚本:other.gradle


// 脚本内部访问
def versionName = "v1.0.0"
def versionDesc = "第一个版本"
// 脚本外部访问
ext {
    author = "CoderPig"
}
// Task任务
task printVersionInfo {
    doLast {
        println "$versionName → $versionDesc"
    }
}


build.gradle中引用此脚本:


apply from: 'other.gradle'
task test {
    dependsOn(printVersionInfo)
    doFirst { println(author) }
    doLast { println("build.gradle里的task") }
}


键入 gradle test 执行任务结果输出如下:


网络异常,图片无法展示
|


2. buildSrc项目


执行Gradle时会将根目录下的buildSrc目录作为插件源码目录进行编译,并将结果加入到构建脚本的classpath中。


这种插件不需要plugins{}引入,一般适合没有复用性的插件或者新插件开发调试用,还有个缺点:无法使用属性配置DSL,需通过 configure<...> {...} 配置插件属性。


3. 独立项目


将项目打成jar包,可在多个项目间复用,一般的插件开发都是指的这一类~


0x2、Gradle Plugin Demo 初体验


我们上面通过命令行创建了一个Gradle插件项目,接着来康一康都有哪些核心要素( 顺带吐槽下网上一堆说得不清不楚的文章...)


1. 项目组成


① 插件实现类:CpPluginPlugin.groovy


package cn.coderpig.plugins
import org.gradle.api.Project
import org.gradle.api.Plugin
public class CpPluginPlugin implements Plugin<Project> {
    public void apply(Project project) {
        // 注册一个Task
        project.tasks.register("greeting") {
            doLast {
                println("Hello from plugin 'cn.coderpig.plugins.greeting'")
            }
        }
    }
}


代码比较浅显易懂,实现了 Plugin 接口,指定泛型类为Project,定义了apply方法,并注册了一个名为greeting带闭包的Task,打印一句话。


② 根目录下的 build.gradle


// 引用java gradle插件开发插件、groovy支持
plugins {
    id 'java-gradle-plugin'
    id 'groovy'
}
gradlePlugin {
    plugins {
        greeting {
            // 插件id
            id = 'cn.coderpig.plugins.greeting'
            // 插件实现类
            implementationClass = 'cn.coderpig.plugins.CpPluginPlugin'
        }
    }
}


Tips:网上很多Gradle插件开发教程还要另外配置一个 properties 文件,如:


src/main/resources/META-INF/gradle-plugins/cn.coderpig.plugins.greeting.properties


文件内容如下:


implementation-class=cn.coderpig.plugins.CpPluginPlugin

实际上,在build.gradle中声明了gradlePlugin就可以了,无需另外再配置一遍!


2. 插件本地发布


使用插件可以使用上面的buildSrc方式引入,也可以先打成jar包,自用就发布到本地,分享给别人用就发布到Maven或者JCenter仓库。先试试发布到本地吧,需要添加Maven相关的配置:


plugins {
    // 添加maven插件
    id 'maven'
}
uploadArchives {
    repositories.mavenDeployer {
        repository(url: uri('C:\\Users\\用户名\\Maven\\repo'))   // 本地仓库路径
        pom.groupId = "cn.coderpig.plugins"// 唯一标识(通常为模块包名,也可以任意)
        pom.artifactId = "CpPluginPlugin" // 项目名称(通常为类库模块名称,也可以任意)
        pom.version = "0.0.1"      // 版本号
    }
}


配置完Sync Now重新构建下项目,在Gradle窗口就会多出一个uploda目录,里面的 uploadArchives 就是将插件类库发布到仓库的Task:


网络异常,图片无法展示
|


双击执行此task,在 C:\Users\用户名\Maven\repo 下生成下述文件:


网络异常,图片无法展示
|


发布到本地Maven后,就可以在另一个项目中引用验证插件效果,先修改根目录的 build.gradle


buildscript {
    repositories {
        ...
        // 本地Maven地址
        maven { url 'C:\\Users\\用户名\\Maven\\repo' }
    }
    dependencies {
        ...
        // 插件依赖
        classpath "cn.coderpig.plugins:cpplugin:0.0.1"
    }
}


app目录或module目录的 build.gradle 引用此插件:


相关文章
|
11月前
|
SQL 人工智能 Dart
Android Studio的插件生态非常丰富
Android Studio的插件生态非常丰富
627 1
|
17天前
|
缓存 Unix Android开发
Android安卓项目调试之Gradle 与 Gradle Wrapper的概念以及常用gradle命令深度详解-优雅草卓伊凡
Android安卓项目调试之Gradle 与 Gradle Wrapper的概念以及常用gradle命令深度详解-优雅草卓伊凡
96 8
|
17天前
|
存储 API Android开发
【02】完整的安卓二次商业实战-配置gradle-构建打包原生安卓项目-调试本地运行模拟器-优雅草伊凡
【02】完整的安卓二次商业实战-配置gradle-构建打包原生安卓项目-调试本地运行模拟器-优雅草伊凡
72 4
【02】完整的安卓二次商业实战-配置gradle-构建打包原生安卓项目-调试本地运行模拟器-优雅草伊凡
|
23天前
|
Java 开发工具 Maven
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
87 6
|
3月前
|
监控 Android开发 数据安全/隐私保护
批量发送短信的平台,安卓群发短信工具插件脚本,批量群发短信软件【autojs版】
这个Auto.js脚本实现了完整的批量短信发送功能,包含联系人管理、短信内容编辑、发送状态监控等功能
|
5月前
|
Java Android开发
Android studio中build.gradle文件简单介绍
本文解析了Android项目中build.gradle文件的作用,包括jcenter仓库配置、模块类型定义、包名设置及依赖管理,涵盖本地、库和远程依赖的区别。
454 19
|
7月前
|
JavaScript Linux 网络安全
Termux安卓终端美化与开发实战:从下载到插件优化,小白也能玩转Linux
Termux是一款安卓平台上的开源终端模拟器,支持apt包管理、SSH连接及Python/Node.js/C++开发环境搭建,被誉为“手机上的Linux系统”。其特点包括零ROOT权限、跨平台开发和强大扩展性。本文详细介绍其安装准备、基础与高级环境配置、必备插件推荐、常见问题解决方法以及延伸学习资源,帮助用户充分利用Termux进行开发与学习。适用于Android 7+设备,原创内容转载请注明来源。
1372 77
|
3月前
|
API Android开发
微信虚拟摄像头模块,微信虚拟视频聊天,安卓虚拟摄像头插件
该实现包含虚拟摄像头服务核心、视频流生成和Android配置三个关键模块,使用Camera2
|
4月前
|
存储 JSON API
安卓ck提取工具,可提取手机cookie插件,AUTOJS即可实现
怎么用autojs提取手机端的CK?其实autojs是支持提取ck的但是他提取的不是浏览器的CK,二十他自身浏览器环境的c
|
12月前
|
Android开发
Android基于gradle task检查各个module之间资源文件冲突情况
Android基于gradle task检查各个module之间资源文件冲突情况
Android基于gradle task检查各个module之间资源文件冲突情况

热门文章

最新文章

推荐镜像

更多