美文网首页Android开发经验谈Android开发程序员
动态编译技术之自定义Gradle 插件

动态编译技术之自定义Gradle 插件

作者: Ch3r1sh | 来源:发表于2018-05-29 10:32 被阅读10次

动态编译技术:编译期间动态的在class文件中注入代码或者或修改,大多插件化热修复都会采用此技术。

自定义Gradle插件

WX20180528-180941@2x.png

常规操作创建Project,新建一个module,此处新建了一个lib1新模块用于编写gradle插件.

WX20180528-181404@2x.png

如图将lib1中的所有文件删除,保留main,build,lib1.iml

QQ20180529-092037@2x.png
  • 创建groovy文件
    • main--->groovy--->包名(com.xxx.xxx)--->XXX.groovy(注意添加.groovy后缀)

插件模块build添加groovy和maven

apply plugin: 'groovy'
apply plugin: 'maven'

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    //gradle sdk
    compile gradleApi()
    //groovy sdk
    compile localGroovy()
}
repositories {
    mavenCentral()
}

⑤ 创建resouces定义插件使用名

WX20180529-101926@2x.png

在mian--->resources--->META-INF--->gradle-plugins--->com.allure.plugin.properties

此处注意com.allure.plugin是定义的插件名,后缀properties,其他地方使用:

apply plugin: 'com.allure.plugin'

在此文件指定加载的具体插件类

implementation-class=com.allure.plugin.MyPlugin

⑥ 书写插件类执行的任务

public class MyPlugin implements Plugin<Project> {

    void apply(Project project) {

        println('========================');
         println('test plugin!');
        println('========================');
    }
}

到此插件制作完毕

(二)打包到本地或者maven

在插件类的build

group='com.allure.plugin'
version='1.0.0'

uploadArchives {
    repositories {
        mavenDeployer {
            //提交到远程服务器:
            // repository(url: "http://www.xxx.com/repos") {
            //    authentication(userName: "admin", password: "admin")
            // }
            //本地的Maven地址设置为/Users/mac/Downloads/ttt
            repository(url: uri('/Users/mac/Downloads/ttt'))
        }
    }
}
  • 执行上传task
WX20180529-102516@2x.png

执行后生成文件

WX20180529-102623@2x.png

(三)使用自定义的Gradle插件

在任意module(如app)里的build引入自定义的插件

apply plugin :'com.allure.plugin'

buildscript {
    repositories {
        maven {//本地Maven仓库地址
            url uri('/Users/mac/Downloads/ttt')
        }
    }
    dependencies {
        //格式为-->group:module:version
        classpath 'com.allure.plugin:lib1:1.0.0'
    }
}

执行效果如图

Configuration on demand is an incubating feature.
========================
test plugin!
========================
Configuration 'compile' in project ':app' is deprecated. Use 'implementation' instead.
:app:preBuild UP-TO-DATE
:app:preDebugBuild UP-TO-DATE
:app:compileDebugAidl UP-TO-DATE
:app:compileDebugRenderscript UP-TO-DATE
:app:checkDebugManifest UP-TO-DATE
:app:generateDebugBuildConfig UP-TO-DATE
:app:prepareLintJar UP-TO-DATE
:app:generateDebugResValues UP-TO-DATE
:app:generateDebugResources UP-TO-DATE
:app:mergeDebugResources UP-TO-DATE
:app:createDebugCompatibleScreenManifests UP-TO-DATE
:app:processDebugManifest UP-TO-DATE
:app:splitsDiscoveryTaskDebug UP-TO-DATE
....

到此结束了插件的制作与使用

相关文章

  • 动态编译技术之自定义Gradle 插件

    动态编译技术:编译期间动态的在class文件中注入代码或者或修改,大多插件化热修复都会采用此技术。 自定义Grad...

  • 自定义gradle插件

    前言 在Android studio中,使用gradle进行编译、打包,在一些情况下,学会自定义gradle插件,...

  • Gradle自定义插件

    Gradle自定义插件 在Gradle中创建自定义插件,Gradle提供了三种方式: 在build.gradle脚...

  • 自定义Gradle插件

    个人博客http://www.milovetingting.cn 自定义Gradle插件 自定义Gradle插件可...

  • Replugin源码解析之replugin-plugin-gra

    概述 该部分基础知识在Gradle学习-----Gradle自定义插件及Replugin源码解析之replugin...

  • 启用Gradle远程调试

    在Gradle学习10——自定义Gradle插件 这篇文章中介绍了编写插件的几种方式。编写gradle对象插件的实...

  • gradle插件调试

    在Gradle学习10——自定义Gradle插件 这篇文章中介绍了编写插件的几种方式。编写gradle对象插件的实...

  • Java Android技术学习以及面试

    点我跳转github查看 目录 Android基础进阶Gradle相关自定义View插件化相关热修复相关编译器相关...

  • android plugin 加固 && 上传

    参考的文章 Gradle 自定义Plugin插件之360加固[https://blog.csdn.net/andr...

  • Android Gradle 插件(二)

    Android Gradle 插件(一)Android Plugin DSL Reference 自定义插件 新建...

网友评论

    本文标题:动态编译技术之自定义Gradle 插件

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