关于android studio怎么生成自定义插件的经历

这篇博客详细记录了如何在Android Studio中生成自定义插件,包括脚本插件和对象插件的创建步骤,以及在buildSrc和独立项目中编写插件的注意事项。作者分享了遇到的坑和解决方法,适合初学者参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于android studio怎么生成插件的经历

最近两天在研究一下android studio的工程Gradle配置这个部分内容 网上的文章很多但是基本都描述的比较简洁 对于我这种虽然在android行业摸爬滚打4,5年但是却很少了解这块内容的老兵来说还是比较吃力的 所以对于一些初学者来说也是这样,这个算是手把手的记录过程吧!大神们 抱歉 可以关闭这个网页了!!

我参考的资料

玉刚说:https://mp.weixin.qq.com/s/KCpl0CNgwMv0CgvbadNK6A
很全面 有基础的同学可以直接看这个 基本没有啥子问题
关于gradle 执行的顺序的问题 可以参考这个 很有帮助
https://blog.youkuaiyun.com/singwhatiwanna/article/details/78797506(如果侵权,请联系我

Gradle的分类

1,脚本插件
2,对象插件

1,脚本插件

这个相对而言很简单 直接在 在gradle文件里写task任务 即可 也可以在其他文件中写然后通过apply from: './xxx.gradle’来应用即可
我的引用gradle里代码

task("text"){
    println("i am task text")
}

运行一下clean
结果如下:
在这里插入图片描述

2,对象插件

对象插件的展现方式有分为三种:
1,直接写在gradle文件里
2,写在buildSrc
3,写在独立的项目下

我们先说第一种也是最简单的那种
1,直接写在gradle文件里
就刚才的那个项目里在gradle 文件里新建一个class类 实现Plugin接口

build.gradle

apply plugin: 'com.android.application'
apply plugin: MyTestPlugin //引用插件
apply from: './config.gradle' //引用脚本文件

android {
    //...
    greeting { //这个是在build.gradle中定义的
        name "Enoch"
        age 14
    }
    greetingconfig {//这个是在config.gradle中定义的
        name "configName"
        age 20
    }
}
class MyTestPlugin implements Plugin<Project> {

    @Override
    void apply(Project target) {
        println("MyTestPlugin")
        def create = target.extensions.create('greeting', Greeting)//greeting对应在build.gradle 中配置的自定义属性
        target.afterEvaluate {
            println("i am ${create.name} And ${create.age}")
        }
    }
}

class Greeting {
    String name
    int age
}

config.gradle

task("text"){
   println("i am task text")
   apply plugin:MyTestPluginByConfig
}

class MyTestPluginByConfig implements Plugin<Project> {

   @Override
   void apply(Project target) {
       println("MyTestPluginByConfig")
       def create = target.extensions.create('greetingconfig', GreetingConfig)//greetingconfig对应在build.gradle 中配置的自定义属性
       target.afterEvaluate {
           println("i am ${create.name} And ${create.age}")
       }
   }
}

class GreetingConfig {
   String name
   int age
}

运行一下clean
结果如下:
在这里插入图片描述
这种方式比较简单基本上不会遇到什么坑

2,写在buildSrc

  • 1,新建一个项目,在新建一个名称为buildSrc的Model 这种方式名称为buildSrc不能更改哈
  • 2,删除这个model下除了build.gradle 和src/main 以外的其他文件 并清空build.gradle中的全部内容
  • 3,在build.gradle 中写入一下信息
apply plugin: 'groovy' //引用groovy插件
dependencies {
   implementation gradleApi() //添加依赖
}

然后sync一下 这步对于小白来说很重要不然后面写的代码包括目录IDE都无法识别 也不提示很痛苦

  • 4,在main 下面新建一个目录groovy ,然后新建一个包 新建一个MyTestPlugin.groovy文件实现Plugin
  • 5,在main下面新建一个resources目录再新建一个META-INF目录再新建一个gradle-plugins在新建一个xxx.properties的文件 xxx是在引用的时候的插件名
    完成后的目录结构是在这里插入图片描述
  • 6,在xxx.properties中写入
implementation-class=com.enoch.testPlugins.MyTestPlugin //这个是插件的全路径

MyTestPlugin

package com.enoch.testPlugins

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

class MyTestPlugin implements Plugin<Project> {

   @Override
   void apply(Project project) {
       def userInfo = project.extensions.create("userInfo", TestValuse)
       project.afterEvaluate {
           println("i have get UserInfo is ====>>>name:${userInfo.testName},age:${userInfo.testAge},className:${userInfo.testClassName}")
       }
   }
}

TestValues

package com.enoch.testPlugins

class TestValues {
   String testName
   int testAge
   String testClassName
}

准备工作基本结束了 现在开始引用
在app:build.gradle的开始地方添加

apply plugin: 'pluginID'  //这个 'pluginID' 和定义的xxx.properties中的xxx对应
//.....
userInfo{
       testName "Enoch"
       testAge 27
       testClassName "记上学"
   }
//......

运行一下clean
结果如下:
在这里插入图片描述
3,写在独立的项目下
这个方式和第二种有很多类似的地方

  • 1,新建一个项目,在新建一个名称为MyPlugin的Model 这种方式名称
  • 2,删除这个model下除了build.gradle 和src/main 以外的其他文件 并清空build.gradle中的全部内容
  • 3,在build.gradle 中写入一下信息
apply plugin: 'groovy'  //引用groovy插件
apply plugin: 'maven'  //引用maven插件 
dependencies {
   implementation gradleApi()
   implementation localGroovy()
}
group = 'com.jsx.jsx'   //定义group名称
version = "1.0"         //定义版本名称
uploadArchives {    //使用maven来打包
   repositories {
       mavenDeployer {
           repository(url: uri("../MyTestPlugin")) //打包路径 后面引用要用到
       }
   }
}

然后sync一下 这步对于小白来说很重要不然后面写的代码包括目录IDE都无法识别 也不提示很痛苦

  • 4,在main 下面新建一个目录groovy ,然后新建一个包 新建一个MyTestPlugin.groovy文件实现Plugin
  • 5,在main下面新建一个resources目录再新建一个META-INF目录再新建一个gradle-plugins在新建一个xxx.properties的文件 xxx是在引用的时候的插件名
    完成后的目录结构是
  • 6,插件写完了执行以下uploadArchives 在这里插入图片描述
    在知道目录下就会生成这样的文件目录
    在这里插入图片描述
    现在可以开始引用了
  • 1.在项目级别的build.gradle下添加
buildscript {
   repositories {
       google()
       jcenter()
       maven {
           url uri("./MyTestPlugin")  //刚才打包的存储的位置
       }
   }
   dependencies {
   	    //......
       classpath 'com.jsx.jsx:MyPlugin:1.0' //引用插件集 classpath的格式为group:artifact:version
       // NOTE: Do not place your application dependencies here; they belong
       // in the individual module build.gradle files
   }
}
  • 2.在app级别的build.gradle下添加
apply plugin: 'com.android.application'
apply plugin: 'MyFirstPlugins'    //还是和前面一样 这个名字对应的是 xxx.properties中的xxx

android {
 //.............
   UserInfo{
       userName "Enoch"
       companyName "成都记上学"
   }
}

运行一下clean
结果如下:在这里插入图片描述

好啦基本结束了

最后讲一下我遇到的坑

  • 1,引用插件的时候要注意名称不要混淆
  • 2,在用对象插件的第三种方式的时候要注意修改完插件代码后要执行uploadArchives
  • 3,在使用自定义字段的时候首字母不能大写要小写不然后报错 这个你们可以试一下
  • 4,要注意task的执行顺序不然会得不到配置字段的值

写在最后

这是我第一次写这种文章 有不对支出或者或者错误的地方 希望大家指出 我虽然做了很多年的安卓了从eclipse到后来的Android studio 都经历过但是还是有很多平时使用不多的技术不够了解有空就写成博客记录下来大家共同探讨共同进步
最后附上源码
https://download.youkuaiyun.com/download/yicunqiang/11387795

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值