自定义Android Gradle插件的3种方式

      因为gradle插件是在编译过程中生效, 不用修改代码就能实现很多功能, 几乎每个app都使用了gradle插件。 下面就介绍一下自定义gradle插件的3种方式。

https://docs.gradle.org/current/userguide/custom_plugins.html#example_a_build_for_a_custom_plugin

     按照官网说明, 分为3种方式。

1、Build script, 即在项目中的build.gradle文件里添加groovy代码并引用; 确定是只有当前工程可用;

2、buildSrc project, Android Studio会找rootPrjectDir/buildSrc/src/main/groovy目录下的代码。 坑:当新建libraray module并命名为buildSrc后会提示Plugin with id 'com.android.library' not found. 这是因为buildSrc是Android的保留名称,只能作为plugin插件使用,我们修改buildSrc的build.gradle文件后就不报错了。

apply plugin: 'groovy'

buildscript {
  repositories {
    mavenCentral()
    jcenter()
    google()
  }

  dependencies {
    classpath 'com.android.tools.build:gradle:3.1.3'
  }
}

dependencies {
  compile gradleApi()
  compile localGroovy()
  compile 'com.android.tools.build:gradle:3.1.3'
}

allprojects {
  repositories {
    mavenCentral()
    google()
  }
}

3、Standalone project, 即单独工程,这也是最常见的方式;一般为传版本到jcenter或maven里。 实现方式很简单, 我们可以在buildSrc里调试, 待需要发版时使用Android Studio打开buildSrc模块就新生成一个工程了。

实例:

方法一: 在项目build.gradle文件里定义groovy插件.

apply plugin: GreetingPlguin
//在build.gradle文件中定义类
class GreetingPlguin implements Plugin {
    @Override
    void apply(Project target) {
        println("GreetingPlguin is executed!!!!!!")

        //解析属性
        def extension = target.extensions.create("greeting", GreetingPluginExtension)
        target.task('hello') {
            doLast {
                println("Hello from the GreetingPlugin")
                //读取配置信息
                println(String.valueOf(extension.showMsg)+ "," + extension.message + "," + extension.time)
            }
        }
    }
}

编译工程

自定义Android Gradle插件的3种方式_第1张图片

可以看到build输出里包含了GreetingPlugin is executed这句日志, 说明插件被执行。

方法二:使用buildSrc工程, 就是在当前工程里新建个library module, 然后按照图中格式调整内容。 插件入口在plugintest.properties里声明,文件内容implementation-class=com.brycegao.buildsrc.SrcPlugin

自定义Android Gradle插件的3种方式_第2张图片

方法三:单独一个工程, 因为其它工程也可以用,所以准备发布到jcenter上。 打开bintray.com后一定要注册成个人用户!!!

     引用时就是在build.gradle里添加类似implementation 'com.brycegao.libplugin:libplugin:1.0.1' 就行了。

参考:https://blog.csdn.net/lmj623565791/article/details/51148825

https://blog.csdn.net/fafaws3000/article/details/79422833

     上传成功并待jcenter审核后才可以使用。

 

坑:

1、jcenter不支持QQ邮箱, 我注册时关联github账户(使用的QQ邮箱)就无法注册, 点击注册按钮时邮箱栏就变红。吐个槽:jcenter就不能给个提示么。 最后我是用gmail邮箱注册了个人账号;

2、jcenter貌似不支持中文,在写描述时用英文才能提交成功, 如果有中文就提示405 not authorized。

3、新建maven时最好关联github地址;

4、jcenter审核有时差,比较慢。

 

demo地址: https://github.com/brycegao/PluginTest

 

你可能感兴趣的:(Android)