美文网首页gradle安卓进阶
Gradle 插件 + ASM 实战——入门篇

Gradle 插件 + ASM 实战——入门篇

作者: Peakmain | 来源:发表于2021-06-15 09:45 被阅读0次

基本项目搭建

  • 项目新建一个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

相关文章

网友评论

    本文标题:Gradle 插件 + ASM 实战——入门篇

    本文链接:https://www.haomeiwen.com/subject/cmuveltx.html