動(dòng)態(tài)編譯技術(shù)之自定義Gradle 插件

動(dòng)態(tài)編譯技術(shù):編譯期間動(dòng)態(tài)的在class文件中注入代碼或者或修改,大多插件化熱修復(fù)都會(huì)采用此技術(shù)。

自定義Gradle插件

WX20180528-180941@2x.png

常規(guī)操作創(chuàng)建Project,新建一個(gè)module,此處新建了一個(gè)lib1新模塊用于編寫gradle插件.

WX20180528-181404@2x.png

如圖將lib1中的所有文件刪除,保留main,build,lib1.iml

QQ20180529-092037@2x.png
  • 創(chuàng)建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()
}

⑤ 創(chuàng)建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

⑥ 書寫插件類執(zhí)行的任務(wù)

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 {
            //提交到遠(yuǎn)程服務(wù)器:
            // repository(url: "http://www.xxx.com/repos") {
            //    authentication(userName: "admin", password: "admin")
            // }
            //本地的Maven地址設(shè)置為/Users/mac/Downloads/ttt
            repository(url: uri('/Users/mac/Downloads/ttt'))
        }
    }
}
  • 執(zhí)行上傳task
WX20180529-102516@2x.png

執(zhí)行后生成文件

WX20180529-102623@2x.png

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

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

apply plugin :'com.allure.plugin'

buildscript {
    repositories {
        maven {//本地Maven倉(cāng)庫(kù)地址
            url uri('/Users/mac/Downloads/ttt')
        }
    }
    dependencies {
        //格式為-->group:module:version
        classpath 'com.allure.plugin:lib1:1.0.0'
    }
}

執(zhí)行效果如圖

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
....

到此結(jié)束了插件的制作與使用

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,711評(píng)論 19 139
  • 說(shuō)明 本文主要介紹和Gradle關(guān)系密切、相對(duì)不容易理解的配置,偏重概念介紹。部分內(nèi)容是Android特有的(例如...
    搬磚的小明閱讀 16,176評(píng)論 1 62
  • 這篇文章講給大家?guī)?lái)gradle打包系列中的高級(jí)用法-自己動(dòng)手編寫gradle插件。我們平常在做安卓開發(fā)時(shí),都會(huì)在...
    呆萌狗和求疵喵閱讀 16,351評(píng)論 22 80
  • 這是我...第一次寫blog... 總感覺做開發(fā)的還是要寫點(diǎn)這種分享,之前一直沒有付出行動(dòng),嗯,因?yàn)閼?,都是自己?..
    姜餅人111閱讀 4,576評(píng)論 6 6
  • 1. 概述 Android項(xiàng)目的構(gòu)建過(guò)程是由Gradle插件完成的,Gradle 插件是在Gradle框架的基礎(chǔ)上...
    小蕓論閱讀 8,397評(píng)論 1 42

友情鏈接更多精彩內(nèi)容