Android中自定义gradle插件实现步骤记录

[记录]Android Studio Gradle 自定义插件 关于如何自定义Gradle插件,这里https://blog.csdn.net/huachao1001/article/details/51810328 这位高手已写的很详细,只是有些地方与实际有些差别,这里记录一下。 1)新建Module删除相关文件后,AS点击无法打开Module下的子目录(对应上面文章提到的第三步) 原因:AS默认是Android工程,删除相关文件后无法识别为Android工程,所以就无法打开,需要切换到Project模式,就可以看到目录结构: 2)build.gradle应该删除 阅读详情

在build.gradle中直接实现插件

  • 创建使用插件功能的groovy 类,在app层的build.gradle 中

class GreetingPluginExtension {
   //插件类中的属性
   String message = "Hello"
}
  • 实现 org.gradle.api.Plugin 接口,在重新的apply() 方法中调用插件类

class GreetingPlugin implements Plugin<Project> {

   @Override
   void apply(Project target) {
       //生成插件类的对象,greeting 是插件类的别名,编译完成后可以用来使用闭包的形式修改插件类中的属性
       def extension = target.extensions.create("greeting", GreetingPluginExtension)
       target.task("hello") {//生产名为hello的任务,可以在命令行中使用 gradle hello 运行该任务
           doLast {
               println(extension.message)
           }
       }
   }
}
  • 在build.gradle中引入自定义的插件
 apply plugin: GreetingPlugin
  • 在Terminal中打开build.gradle 文件,运行 “ gradle hello ”,或者在Sync完成后在AS的Gradle列表中运行,如下图
    在这里插入图片描述
    在这里插入图片描述
  • 在build.gradle中使用插件的别名修改插件类中的属性,就像build.gradle默认生产的如下的代码一样,也可以使用相同的方式修改自定义插件中的属性,如下
 defaultConfig {
        applicationId "com.plugin.ggg.myapplication"
        minSdkVersion 21
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
    }

    apply plugin: GreetingPlugin //首先要先引入插件

    //修改插件类中的属性,再次运行hello ,便可以输出修改后的值
    greeting{
    message="1111"
}

如果运行 gradle hello 提示 gradle 不是内部命令时,请将AndroidStudio 安装目录下的 gradle/gradle-5.1.1(这个5.1.1是gradle的版本号)/bin 加入到环境变量的path中,重启一下电脑即可

独立于项目的插件

  • 在项目中新建 Android Library Module
  • 将src/main 中的文件都删除,将 module中的build.gradle 的内容都删除
  • 在 module中的build.gradle 中加入以下代码,并 sync
apply plugin: 'groovy'//引入 groovy支持的插件
apply plugin: 'maven' //引入maven支持的插件
dependencies {
    //引入 groovy支持的插件
    compile gradleApi()
    compile localGroovy()
}
//使用maven仓库
repositories {
    mavenCentral()
}
//定义插件的在本地maven中的id
 group = 'test.plugins'
//定义插件的在本地maven中的版本号
 version = '1.0.0'
//将插件打包上传到本地maven
uploadArchives {
    repositories {
        mavenDeployer {
            //指定本地maven的路径
            repository(url: uri('./repos'))
        }
    }
}

  • 在src/main 中新建groovy的文件夹,在里面新建.groovy文件,在src/main中新建 resources文件夹,在里面新建 META-INF 文件夹,在META-INF中新建 gradle-plugins 文件夹,这俩个文件夹的名称是固定的,然后在gradle-plugins中创建xxx.properties 文件,xxx可以自定义,这个将会作为插件在本地maven中group的值。目录结构如下图
    在这里插入图片描述

  • 插件类的实现如下代码

package gradle

import org.gradle.api.Plugin
import org.gradle.api.Project
//实现Plugin接口,重写apply 方法
class PluginImpl implements Plugin<Project> {

    @Override
    void apply(Project target) {
        //在这里实现插件功能
        System.out.println("========================")
        System.out.println("hello gradle plugin!")
        System.out.println("========================")
    }
}
  • xxx.properties 文件中内容如下
# 指定插件类的入口 ,包名.类名
implementation-class=gradle.PluginImpl
  • sync now 完之后 在命令行中打开 module中的 build.gradle 文件 输入“gradle uploadArchives” 命令 将插件发布到本地maven,或在AS中的Gradle 中发布,如下图
    在这里插入图片描述

  • 发布完之后在本地maven中会生产相应的仓库,"./repos" 指定的本地maven地址在module中的下一级文件夹中,所以maven生产的repos仓库如下图
    在这里插入图片描述

  • maven-metadata.xml 中的内容如下

<?xml version="1.0" encoding="UTF-8"?>
<metadata>
  <!--插件在project 下面的build.gradle引入时的形式为[groupId]:[artifactId]:[version]-->
  <groupId>test.plugins</groupId>
  <artifactId>plugin</artifactId>
  <versioning>
    <release>1.0.0</release>
    <versions>
      <version>1.0.0</version>
    </versions>
    <lastUpdated>20190803052405</lastUpdated>
  </versioning>
</metadata>

  • 在项目中使用该插件,在project 的 build.gradle中引入本地maven的地址,代码如下
buildscript {
    ext.kotlin_version = '1.3.31'
    repositories {//声明了工程所需要的依赖库,供下面dependencies下载
        google()
        jcenter()
        maven {
            url uri("./plugin/repos") //本地maven中插件的地址
        }


    }
    dependencies {//声明了具体的依赖,使用[group]:[name]:[version]形式
        classpath 'com.android.tools.build:gradle:3.4.2'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        //引入插件的依赖
        classpath 'test.plugins:plugin:1.0.0'
    }
}
  • 在需要使用插件的module中引入插件
apply plugin: 'test.plugins'

修改插件代码后需要重新build并重新发布到本地的maven

深度学习、图像分入门,从VGG16卷积神经网络开始 刚开始接触深度学习、卷积神经网络的时候非常懵逼,不知道从何入手,我觉得应该有一个进阶的过程,也就是说,理应有一些基本概念作为奠基石,让你有底气去完全理解一个庞大的卷积神经网络: 本文思路: 一、我认为学习卷积神经网络必须知道的几个概念: 1、卷积过程:   我们经常说卷积神经网络卷积神经网络,到底什么才是卷积?网络层卷积过程到底怎么实现?我们在这里借鉴了另一位博客大牛的动态图来给大 阅读详情

相关推荐

自助结账商品检测(Scanned Item Detection)——基于YOLOv8的RPC数据集实战

RPC数据集是由中国科学院自动化研究所发布的零售商品结账检测公开数据集,广泛用于自助结账和零售场景下的目标检测与识别。YOLOv8是YOLO系列最新版本,由Ultralytics推出,继承了YOLO家族的高效快速和高准确性,适用于实时检测场景。本文系统介绍了基于YOLOv8的RPC数据集自助结账商品检测方案,涵盖数据准备、训练、推理及UI界面设计。未来,可结合多模态感知、RFID融合技术,打造更加智能和稳定的自助结账系统。

YOLO 228

Android Gradle Plugin插件开发——基础

gradle

QG 764

配电室设备对象检测数据集VOC+YOLO格式153张34别.7z

数据集格式:Pascal VOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件)图片数量(jpg文件个数):153标注数量(xml文件个数):153标注数量(txt文件个数):153标注别数:34更多信息参考:blog.csdn.net/FL1768317420/article/details/138782827

Gradle入门系列(五)——Gradle其它模块与Plugin插件

Gradle其它模块 一、Settings settings.gradle(对应Settings.java)决定哪些工程需要被gradle处理,占用了整个gradle生命周期的三分之一,即Initialzation初始化阶段。 二、SourceSet 对默认的文件位置进行修改,从而让gradle知道哪种资源要从哪些文件夹中去查找。 // sourceSets是可以调用多次的 android {...

weixin_33862514的博客 481

Android Gradle 插件Gradle 依赖管理 ② ( build.gradle 中的 dependencies 依赖配置 | DependencyHandler#add 方法介绍 )

一、build.gradle 中的 dependencies 依赖配置、 二、DependencyHandler#add 方法介绍

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 3083

【错误记录自定义 Gradle 插件报错 ( Could not find implementation class x for plugin x specified in jar:file )

之后在应用中 , 引入本地 Maven 仓库 , 并添加该自定义插件的依赖;代码时 , 报错;

浪漫之圣 1072

Gradle 自定义插件,安卓开发项目源代码

总而言之,Android开发行业变化太快,作为技术人员就要保持终生学习的态度,让学习力成为核心竞争力,所谓“活到老学到老”只有不断的学习,不断的提升自己,才能跟紧行业的步伐,才能不被时代所淘汰。在这里我分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司20年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。

2301_82243558的博客 633

Android Gradle Plugins系列-02-Maven Publish 插件踩坑指南

如果你刚好把AndroidStudio升级到Android Studio Arctic Fox版本,刚好想新建一个工程来编写自定义Gradle插件,你就会发现你掉坑里了(没错,就是笔者本人了!),噩梦从此开始,一切都是因为你新建的工程中Gradle及其插件的版本已经默认是7.0及以上了。惊喜不惊喜,意外不意外?升级一时爽,填坑两行泪。

农贤钢的专栏 6928

Android字节码插桩demo

Android字节码插桩demo 1. 基本概念 1.1 java字节码 Java字节码是Java虚拟机执行的一种虚拟指令格式。 可通过javac 编译java文件得到字节码文件。 javap 分析字节码文件内容。 1.2 插桩 面向切面编程的一种编程实现。 在需要统一处理的切面上,增加额外代码功能。 具体而言就是在编译期(class --> dex 阶段)修改class文件的结构,达到统一处理目的。 2. demo目标 针对被注解修饰的全部方法,执行插桩,方法进入及离开时,记录系统时间,以实现统计方

SharedPreferences采坑之旅 294

AndroidStudio 上传library到Bintray

记一次在AndroidStudio上传library到Bintray的过程。https://bintray.com/注册好了账号, Add New Repository,添加一个package。 首先在项目的build.gradle 中引入插件 dependencies { classpath 'com.android.tools.build:gradle:3.0.1...

cdy的博客 510

Android Studio插件版本与Gradle 版本、kotlin版本等对应关系

Android Studio 构建系统以 Gradle 为基础,并且 Android Gradle 插件添加了几项专用于构建 Android 应用的功能。 虽然 Android 插件通常会与 Android Studio 的更新步调保持一致,但插件(以及 Gradle 系统的其余部分)可独立于 Android Studio 运行并单独更新。

fumeidonga的博客 1万+

Gradle:使用buildSrc方式实现自定义Gradle插件

本文仅记录buildSrc项目方式实现自定义Gradle插件 1.首先新建插件module选择java library(Module名称必须是:buildSrc) 2.修改插件对应build.gradle文件,添加相应gradle依赖 apply plugin: 'java-library' repositories { google() jcenter() } de...

wjcommen的博客 5538

自定义Gradle插件 字节码插桩 附带Demo

参考: Android字节码插桩采坑笔记 通过自定义 Gradle 插件修改编译后的 class 文件 ASM官方文档

薛瑄的博客 7539

自定义 Gradle 插件

Android 中许多优秀的开源框架都会自定义 Gradle 插件,比如,热修复的 Tinker 。所以,这篇文章记录 Android Studio 中如何自定义 Gradle 插件GradleGradle 是个的构建工具,也是Android Studio 默认的构建工具,与传统的 Ant 、maven 相比,Gradle 更加强大。利用 Gradle 这个工具,我们能做很多事情,例如热修复、插件

Deemons's Blog 2297

Android 编译插桩之--自定义Gradle插件

Android 编译插桩之--自定义Gradle插件一、前言二、自定义流程2.1、ASMDemoPlugin工程2.1.1、新建module并修改2.1.2、添加依赖2.1.3、编写Groovy2.1.4、添加Properties2.1.5、生成插件2.2、AMSDemo工程三、注意事项总结 欲穷千里目,更上一层楼。 (王之焕《登鹳雀楼》) 一、前言 最近在学习字节码插桩相关的知识,刚起步就...

乐翁龙 2315

Android自定义Gradle插件来处理注解

熟悉Java注解处理器的朋友,肯定会了解如butterknife,dagger之的框架,这框架都是在编译阶段处理注解来生成辅助,从而不需要再写很多机械的代码。这里我们换一种思路,不使用Java的注解处理器,直接使用Gradle来处理注解并生成。注意:这篇文章仅提供一种注解处理的思路,不会考虑太多程序的健壮性。话不多说,直接开始吧。 在Android Studio中创建Gradle插件...

JabamiYu的博客 3443

Gradle_使用buildSrc方式自定义gradle插件

网上很多介绍android studio使用gradle如何自定义插件,介绍的内容不错,可是按照过程进行实践却踩了不少坑,这篇文章就用来记录一下gradle使用buildSrc的形式创建插件的过程。 Gradle的创建plugin插件,有三种方式: 一,·Build script 简单说就是在构建脚本中(build.gradle),直接创建编写代码。 二,buildSrc project 创建一个...

renzhongrui的博客 1万+

Android Studio插件版本与Gradle 版本对应关系

Android Studio 构建系统以 Gradle 为基础,并且 Android Gradle 插件添加了几项专用于构建 Android 应用的功能。虽然 Android 插件通常会与 Android Studio 的更新步调保持一致,但插件(以及 Gradle 系统的其余部分)可独立于 Android Studio 运行并单独更新。Android Studio 构建系统以 Gradle 为基础,并且 Android Gradle 插件添加了几项专用于构建 Android 应用的功能。

以后会多把工作中总结的知识、问题处理思路和方法通过博客分享出来,欢迎大家关注和共同探讨! 5184

defaultConfig——安卓gradle

一、前言 我们在安卓开发中,编译的任务是由 gradle 来负责的。但很多时候我们进入 build.gradle 文件中,有种似懂非懂的感觉,所以小盆友总结并分享自己学习到的点滴。 话不多说,今天分享的是在我们的每个模块下(应用级)build.gradle 文件中,android 下的 defaultConfig 属性 二、defaultConfig ...

江澎涌的博客 1万+

探索Gradle Android AspectJ插件:为Android开发注入新活力

探索Gradle Android AspectJ插件:为Android开发注入新活力 项目介绍 Gradle Android AspectJ插件是一个专为Android开发者设计的工具,旨在简化AspectJ在Android项目中的集成过程。AspectJ是一种强大的面向切面编程(AOP)工具,能够帮助开发者更好地管理和组织代码,尤其是在处理日志记录、性能监控、异常处理等横切关注点时,Aspect...

gitblog_00884的博客 970

关于使用Android Studio时的Gradle报错解决记录

首先,重要的事情说三遍 build.gradle里面的gradlegradle-wrapper.properties中的gradle不是一个概念! build.gradle里面的gradlegradle-wrapper.properties中的gradle不是一个概念! build.gradle里面的gradlegradle-wrapper.properties中的gradle不是一个概念!...

艾沃尼斯の飞空庭 1204
上一篇: 关于服务端设置了IPV6时,Android请求网络超慢的问题记录
下一篇: 观察者模式
genmenu
博客等级 码龄12年 4粉丝 45原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值