基本项目搭建

  • 项目新建一个Android Module,取名为plugin

  • 删除无用资源,新建groovy、resources/META-INF/gradle-plugins目录
    image.png

  • 修改build.gradle

    apply plugin: 'groovy'
    apply plugin: 'maven'
    dependencies {
    implementation gradleApi()
    implementation localGroovy()

    implementation 'org.ow2.asm:asm:7.1'
    implementation 'org.ow2.asm:asm-commons:7.1'
    implementation 'org.ow2.asm:asm-analysis:7.1'
    implementation 'org.ow2.asm:asm-util:7.0'
    implementation 'org.ow2.asm:asm-tree:7.1'
    compileOnly 'com.android.tools.build:gradle:3.4.1', {
    exclude group:'org.ow2.asm'
    }
    }
    repositories {
    jcenter()
    }

    uploadArchives {
    repositories.mavenDeployer {
    //本地仓库路径,以放到项目根目录下的 repo 的文件夹为例
    repository(url: uri('../repo'))

    //groupId
    pom.groupId = 'com.peakmain'

    //artifactId
    pom.artifactId = 'android.plugin'

    //插件版本号
    pom.version = '1.0.0'
    }
    }
  • groovy目录新建一个文件BuryPointPlugin.groovy并放到com.peakmain.analytics.plugin目录下
    这个便是我们的入口了,程序一编译我们就会来到这里并调用apply方法

    class BuryPointPlugin implements Plugin<Project>{

    @Override
    void apply(Project project) {
    println("欢迎来到gradle插件")
    }
    }
  • resources下新建一个com.peakmain.plugin.properties文件,注意:com.peakmain.plugin是我们引入的插件的名字,properties是后缀
    image.png

  • 来到Android Studio的右上角Gradle,选择module plugin的Tasks
    image.png
    双击之后我们在Android Studio目录下可以看到文件夹[repo]
    image.png

  • 修改根目录的build.gradle
    image.png

  • 修改app的build.gradle

    apply plugin: 'com.peakmain.plugin'
  • 重新build之后看到这行打印就代表成功了
    image.png

扩展

  • 我们在build.gradle通常会看到这些扩展
    image.png

如果我们想我们的项目也添加一个扩展,应该怎么做?

  • groovy目录新建一个BuryPointExtension.groovy
    class BuryPointExtension{
    boolean disableAppClick = false
    }
    修改BuryPointPlugin源码
    @Override
    void apply(Project project) {
    project.extensions.create("peakmainPlugin", BuryPointExtension)
    }
  • 重新uploadArchives之后在app的build.gradle就可以使用了
    image.png

gradle.properties中设置依赖

  • 上面我们在app的gradle中设置扩展依赖peakmainPlugin,那如果我们想在gradle.properties中设置,如何做呢?
    image.png

  • 修改BuryPointPlugin源码

    class BuryPointPlugin implements Plugin<Project> {

    @Override
    void apply(Project project) {
    BuryPointExtension extension = project.extensions.create("peakmainPlugin", BuryPointExtension)
    boolean disableBuryPointPlugin = false
    Properties properties = new Properties()
    //gradle.properties是否存在
    if(project.rootProject.file('gradle.properties').exists()){
    //gradle.properties文件->输入流
    properties.load(project.rootProject.file('gradle.properties').newDataInputStream())
    disableBuryPointPlugin=Boolean.parseBoolean(properties.getProperty("peakmainPlugin.disableAppClick","false"))
    }
    //如果disableBuryPointPlugin可用
    if(!disableBuryPointPlugin){
    println("欢迎来到peakmainPlugin")
    }else{
    println("------------您已关闭了埋点插件--------------")
    }
    }
    }
  • 查看结果
    image.png

  • 修改gralde.properties中的属性的值并查看结果
    image.png