Gradle-自定义plugin

news/2024/5/20 5:26:10 标签: Gradle, Plugin, Android

Gradle_0">为什么要学习Gradle

Gradle目前已经应用于多个Android开发的技术体系中,比如构建系统、插件化、热修复和组件化,如果不了解Gradle,那么对于上述技术体系的了解会大打折扣

上述一段文字是比较传统的解释,我开始系统的学习gradle是因为,项目由于引入了组件化的开发模式,模块之间的通信就需要引入一种新的方式,之前一直使用的是SPI,但是在service比较多的时候会影响到冷起的时长(性能的瓶颈),于是就想到了使用apt和transform来实现。

Gradle Transform是Android官方提供给开发者在项目构建阶段由class到dex转换期间修改class文件的一套api。
要使用Transorm,首先需要自定义plugin

Plugin_9">自定义Plugin

创建plugin工程

图一.png

2.png

3.png

4.png

5.png

  1. 首先创建一个Libray(Android Studio不支持穿件Plugin的工程),名字按照Plugin的功能起一个。
  2. 删除多余的文件
  3. 修改build.gradle文件,支持Plugin的工程。
  4. 创建如图4所示的目录,这里有几点需要说明一下
    • MyPlugin.groovy不是.java文件,这里也直接创建java文件,然后修改后缀名,groovy是支持Java语言的(所以说Groovy的学习成本不是很大,感兴趣可以在网上搜索一下)
    • resources目录下的META-INF.gradle-plugins的顺序不能错。
    • com.knight.plugin.test(ps:图片中的字母写错了,项目中已改)就是你的plugin名称

到目前为止,就完成了一个Plugin的工程,接下来使用自定义的plugin实现一个小功能,删除项目中所有的Log日志(这个只是测试,真正项目开发中是不会用到)

发布自定义的plugin到本地仓库

6.png

7.png

8.png

9.png

10.png

11.png

  1. 首先配置mypluginmodule下的build.gradle,支持upload
  2. 然后点击task中的uploadArchives或者在命令行中输入./gradlew :myplugin:uploadArchives来执行task
  3. 编译成功后会在根目录中出现一个repo目录,如图8所示
  4. 然后配置project的build.gradle,如图9所示,配置app的module中的build.gradle,如图10所示
  5. 在命令行中输入./gradlew assembleDubug就能看到图11的结果,说明我们自定义的plugin,成功用到项目中了。

自定义删除Log语句的plugin

这个功能只是为了小试牛刀,并没有什么卵用,大家可以看看。

11.png

13.png

14.png

15.png

  1. 这是源文件,是有一大堆log的代码
  2. 执行./gradlew assembleDebug,可以看日志,已经执行了我们的plugin
  3. 再看源文件,log日志已经没有了
  4. 多加了几个类,这几个类就不详细讲了,如果感兴趣的同学可以下载源码看看。

GradlePlugin/tree/master">Demo


http://www.niftyadmin.cn/n/944698.html

相关文章

轻量级的MVVM

背景 现在的项目中各种开发框架都有,MVC,MVP,MVVM。比较混乱,虽然也推出了MVVM,但是由于没有强制和代码历史的问题,大部分的时候还是使用之前的开发框架进行开发,所以现在整个项目的结构比较复…

手摸手带你走进Kotlin Coroutine

参考文章 kotlin官网 kotlin github Roman Elizarov 视频(基于1.3之前的,一些用法已经改变,但是主要看原理和思想) Roman Elizarov 视频深入(基于1.3之前的,一些用法已经改变,但是主要看原理…

快速幂取模运算

1.如果b是偶数,我们可以记k a2 mod c,那么求(k)b/2 mod c就可以了。 2.如果b是奇数,我们也可以记k a2 mod c,那么求 ((k)b/2 mod c a ) mod c ((k)b/2 mod c * a) mod c 就可以了。 那么我们可以得到以下算法: 算…

字节跳动屏幕适配方案解读

说来惭愧,这个方案在微信公众号推出来的时候,我才去了解我司自己的适配方案。字节跳动屏幕适配方案 重点 为什么要做屏幕适配从数据上告诉你安卓手机屏幕的碎片化我司的适配方案适配中出现的问题实际演练 为什么要做屏幕适配 在Android开发中&#xf…

基于ASM的组件化框架

背景 我们在开发一个应用时,会随着时间、人员和需求的增多,我们的代码也会以一个非常快的速度在迭代,同时由于每个人的开发水平不一样,就会有各种各样的问题,如果一直在一个project中开发,很快演变成一个高…

浅析Android插件化

前言 在Android 9.0的jar包中,可以发现很多函数添加了hide,这表示google显示了对hide api的反射调用,上有政策,下有对策,我天朝人民的智慧是无穷尽的,具体的方案可以参考一种绕过Android P对非SDK接口限制…

A - 数塔

在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的: 有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少? 已经告诉你了&…

Gradle-初探代码注入Transform

简介 本文主要介绍gradle打包过程中transform阶段,这里大概说下AOP(Aspect Oriented Programming),这是一种面向切面的思想,预支对应的是OOP(Object Oriented Programming)面向对象编程,这里不展开说明。可以看下对AOP总结的思维…