美文网首页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