色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Gradle入門知識之Gradle api解析(上)

jf_78858299 ? 來源:小余的自習室 ? 作者:小余的自習室 ? 2023-03-30 11:01 ? 次閱讀

前言:

前面我們使用兩篇文章講解了Gradle一些基礎知識和Groovy語法詳解

工欲善其事必先利其器

今天我們來講解下Gradle的Api相關知識

GradleApi

這里我將Gradle api分為以下五個部分

  1. Project api :

2.Task api

3.File api

4.Property api

5.其他 api

既然是講解api,那就首先去他們源碼中看看:

筆者使用的是最新版本的:Gradle7.5.1

查看源碼方式:

更改:gradle-wrapper.properties文件中的

distributionUrl=https\\://services.gradle.org/distributions/gradle-7.5.1-bin.zip
為:
distributionUrl=https\\://services.gradle.org/distributions/gradle-7.5.1-all.zip

重新編譯之后就可以看到我們Gradle的源碼了

我們先來看Project部分

1.Project api

由于Project源碼篇幅太長:這里只列出類的部分方法和屬性:

我們前面分析過,每個build.gradle對應一個Project,Project在初始過程中會被構建為形結構:

如下:

圖片

gradleproject樹.png

每個Project都有自己的子Project父Project

Gradle給我們提供了一系列對Project的操作:

  • 1.getAllprojects:可以獲取工程中的所有Project

    這個方法最常見使用場景:就是給我們的項目配置倉庫地址:

//統一配置所有子project的集合
allprojects {
    repositories {
        maven {url "https://maven.aliyun.com/repository/google/"}
        maven {url "https://maven.aliyun.com/repository/public/"}
        mavenCentral()
        maven {
            url uri('D:/maven_local')
        }
    }
    group 'cpm_group'
    version 1.0
}

當然也可以配置所有項目的其他屬性:如group,version,description

  • 2.getSubprojects:獲取所有的子Project

使用場景列舉 :將所有的lib模塊上傳到maven中

//包括子Project
subprojects {Project project ->
    if(plugins.hasPlugin('com.android.library')){
        apply from:'../publishMaven.gradle'
    }
}
  • 3.getProject:獲取當前Project實例

我們所有的build.gradle中的代碼,都是以當前Project實例為delegate展開的:

在腳本中,你可以使用下面方法調用project方法:

1.this.project
2.project
3.this
4.什么不不寫,直接調用方法或者屬性

以上方法調用方式結果都是一樣的

  • 4.getRootProject:獲取root腳本就是我們根工程的Project

獲取根Project的用處也很大,我們平時在根工程中定義的一系列變量,task等都可以通過這個方式在子Project中獲取

  • 5.getParent:獲取父Project實例
  • 6.findProject:查找Project,需要傳入Project名稱獲取路徑
  • 7.project(String path):定位一個外部或者內部Project。

關于Project操作的api就在上面了

下面我們來講解關于Task相關的api

2.Task api

Gradle中整個工程由若干個Project組成,而每個Project由若干個Task組成,

在Gradle中Task由TaskContainer統一管理,工程全局只有一個TaskContainer,project中可以使用tasks訪問TaskContainer方法

1.創建

//使用Project的方法創建:

task task1{
    group 'yuhb'
}
task task1(group:'yuhb'){

}

//使用TaskContainer創建:
tasks.create('task1'){
    group 'yuhb'

}

//帶任務類型的Task:一般在插件中使用
class MyTestTask extends DefaultTask {

    @TaskAction
    void doActon(){
        //do something
    }
}
tasks.create('task1',MyTestTask.class)
//注冊一個task,在必要的時候創建,不是立即創建
tasks.register('task1',MyTestTask.class)

2.查找

//findByName:
def task1 = tasks.findByName('task6'):
//getByName:
def task2 = tasks.getByName('task6')
//兩者區別:findByName沒有找到返回null,getByName沒有找到返回異常UnknownTaskException
//findAll:
Set<Task> taskSet = this.tasks.findAll()
//查找當前TaskContainer中所有的任務
//matching:
tasks.matching {
    group = 'yuhb'
}
//獲取匹配某些條件的task

3.刪除

Gradle沒有提供刪除方法,也不需要,因為每個任務都只會執行一次,

如果確切不需要就不要引入這個task即可

4.設置task屬性

//創建task的時候傳入:
//方法1:在參數中傳入
task task2(group:'yuhb',description: 'this is task2'){

}
//方法2:在閉包中傳入
tasks.create('task3'){
    group 'yuhb'
    description 'this is task3'
}
//兩種方法效果是一樣的

Task屬性:

屬性 描述
name 唯一標識符
group 組別
description 描述信息
type Task類型,默認為 DefaultTask
actions 有哪些動作
dependsOn 依賴的task列表

5.Task依賴管理

5.1:使用dependOn

task task1{
    //單個task
    dependsOn 'task2'
    //多個task使用列表
    dependsOn = ['task2','task3']
}
//這里task1強依賴task2和task3

5.2:使用mustRunAfter

task task1{
    //單個task
    mustRunAfter 'task2'
    //多個task使用列表
    mustRunAfter = ['task2','task3']
}

5.3:使用Task輸入和輸出

每個task都會有自己的輸入和輸出:產出數據可能會提供給下一個任務使用

TaskInputs:管理輸入

TaskOutputs:管理輸出

輸入和輸出有三種類型:

1.文件,文件夾

2.單個映射屬性

3.多個映射屬性,Map

task task2(group:'yuhb',description: 'this is task2'){
        inputs.file file('release.xml')
}
task task3(group:'yuhb',description: 'this is task2'){
        outputs.file file('release.xml')
}

使用上面的方式通過輸入和輸出的掛接,將task2和task3實現依賴關系。

6.Task執行

使用task的doFirst和doLast可以在任務執行前后設置一些Action

task task3(group:'yuhb',description: 'this is task2'){
    outputs.file file('release.xml')
    doFirst {
          'task3執行前'
    }
    doLast {
          'task3執行后'
    }
}

Task執行方式:

1.使用gradlew命令行:如要執行build任務:

gradlew build

2.使用IDE中的Gradle面板

圖片

gradle面板.png

3.將task掛接到Gradle生命周期中

我們創建任務后,在執行構建過程中并沒有掛接到Gradle生命周期中,也就是不會執行

def prebuild = this.tasks.findByName('prebuild')
prebuild.dependsOn('task1')

上面的例子prebuild是編譯前需要執行的一個預編譯任務,使用dependsOn依賴關系,將任務task1使用dependsOn掛接到prebuild執行前

關于Task api就講解到這里,以上api基本涵蓋我們對Task的使用

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 源碼
    +關注

    關注

    8

    文章

    648

    瀏覽量

    29301
  • project
    +關注

    關注

    0

    文章

    35

    瀏覽量

    13301
  • gradle
    +關注

    關注

    0

    文章

    26

    瀏覽量

    728
收藏 人收藏

    評論

    相關推薦

    Gradle版本目錄功能的簡單應用

    版本帝 Gradle 最新版本已經到了 8.1.1 ,你是不是還在用著 Gradle 3 的功能?今天我們了解一下 Gradle 7.0 之后推出的新功能 Version Catalog 版本目錄
    的頭像 發表于 09-30 11:12 ?1377次閱讀

    gradle安裝與配置unity

    Gradle是一種用于構建和自動化構建過程的強大工具,而Unity則是一款跨平臺的游戲引擎。在Unity項目中使用Gradle可以幫助我們更方便地管理和構建項目,同時能夠提供更高的自定義能力和穩定性
    的頭像 發表于 12-07 14:48 ?2322次閱讀

    Android Studio與Gradle深入

    小語言規范用來處理一個特定的事情(大多情況下是配置)。Android 的插件的 DSL 文檔在 Android Gradle DSL有說明?! ±斫饬艘陨匣A之后,你就會知其然,知其所以然了?! ∫陨?b class='flag-5'>知識
    發表于 08-31 17:58

    Gradle for Android

    Gradle for Android
    發表于 07-16 15:50

    請問OpenHarmony鴻蒙demo gradle報錯怎么解決?

    [build_d4wwgdfsrmyu3wivei5s3deyo$_run_closure1@1db3e190] on root project 'HarmonyAPP' of type org.gradle.api.Project.Open File
    發表于 04-01 11:27

    DevEco Studio自動配置gradle的方法分享

    方法①在項目右鍵 Find in Path輸入gradle-5.4.1-all.zip方法②下載gradle-5.4.1-all.zip解壓至不要含有中文名稱的目錄比如我解壓后的路徑是D
    發表于 06-09 10:26

    快速入門Gradle的方法

    我們前面的Gradle是一門基于Groov的DSL,可能很多童鞋就是因為你是這個Gradle的迷,第一覺得Gradle是一門獨立的語言呀,如果想進入歧途了,我一開始也是這么迷糊的,當你了解之后,你就可以這么理解
    的頭像 發表于 04-08 10:56 ?1358次閱讀
    快速<b class='flag-5'>入門</b><b class='flag-5'>Gradle</b>的方法

    Gradle入門知識Gradle詳解

    大家回想一下自己第一次接觸`Gradle`是什么時候? 相信大家也都是和我一樣,在我們打開第一個AS項目的時候, 發現有很多帶gradle字樣的文件:`setting.gradle, build.
    的頭像 發表于 03-30 10:47 ?2542次閱讀
    <b class='flag-5'>Gradle</b><b class='flag-5'>入門</b><b class='flag-5'>知識</b><b class='flag-5'>之</b><b class='flag-5'>Gradle</b>詳解

    Gradle入門知識Gradle詳解(下)

    大家回想一下自己第一次接觸`Gradle`是什么時候? 相信大家也都是和我一樣,在我們打開第一個AS項目的時候, 發現有很多帶gradle字樣的文件:`setting.gradle, build.
    的頭像 發表于 03-30 10:51 ?889次閱讀
    <b class='flag-5'>Gradle</b><b class='flag-5'>入門</b><b class='flag-5'>知識</b><b class='flag-5'>之</b><b class='flag-5'>Gradle</b>詳解(下)

    Gradle入門知識Gradle語法1

    很多開發喜歡把`Gradle`簡單定義為一種構建工具,和`ant,maven`等作用類似, 誠然Gradle確實是用來做構建,但是如果簡單得把Gradle拿來做構建,就太小看Gradle
    的頭像 發表于 03-30 10:54 ?1021次閱讀
    <b class='flag-5'>Gradle</b><b class='flag-5'>入門</b><b class='flag-5'>知識</b><b class='flag-5'>之</b><b class='flag-5'>Gradle</b>語法1

    Gradle入門知識Gradle語法2

    很多開發喜歡把`Gradle`簡單定義為一種構建工具,和`ant,maven`等作用類似, 誠然Gradle確實是用來做構建,但是如果簡單得把Gradle拿來做構建,就太小看Gradle
    的頭像 發表于 03-30 10:54 ?752次閱讀

    Gradle入門知識Gradle api解析(下)

    由于Project源碼篇幅太長:這里只列出類的部分方法和屬性: 我們前面分析過,每個build.gradle對應一個Project,Project在初始過程中會被構建為`樹`形結構:
    的頭像 發表于 03-30 11:05 ?1101次閱讀

    Gradle Plugin和AGP的區別1

    Gradle Plugin`和`AGP`的區別? `Gradle Plugin`是`Gradle`構建過程中使用的插件的總稱,而`Android Gradle Plugin`是這
    的頭像 發表于 03-30 11:48 ?1241次閱讀
    <b class='flag-5'>Gradle</b> Plugin和AGP的區別1

    Gradle Plugin和AGP的區別2

    Gradle Plugin`和`AGP`的區別? `Gradle Plugin`是`Gradle`構建過程中使用的插件的總稱,而`Android Gradle Plugin`是這
    的頭像 發表于 03-30 11:49 ?1181次閱讀

    Gradle Plugin和AGP的區別3

    Gradle Plugin`和`AGP`的區別? `Gradle Plugin`是`Gradle`構建過程中使用的插件的總稱,而`Android Gradle Plugin`是這
    的頭像 發表于 03-30 11:50 ?1270次閱讀
    主站蜘蛛池模板: 国产精品久久久久久久人热| 国产亚洲精品久久久久小| 国产专区亚洲欧美另类在线| 日日干夜夜啪蕉视频| yellow日本高清在线| 青青久在线| 大相蕉伊人狼人久草av| 日本三级黄色大片| 动漫AV纯肉无码AV电影网| 欧美亚洲日本日韩在线| www.久久久| 色婷婷五月综合久久中文字幕| 大陆午夜伦理| 歪歪漫画羞羞漫画国产| 国产午夜三级一区二区三| 亚洲精品视频免费| 久久xxxx| 99re6久久在热线视频| 秋霞电影网午夜免费鲁丝片| 耽美肉文 高h失禁| 性欧美13处14处破| 久久AV亚洲精品一区无码网| 中文字幕亚洲男人的天堂网络| 美女内射少妇一区二区四区| 99久久做夜夜爱天天做精品| 色丁香婷婷综合缴情综| 国内精品乱码卡一卡2卡三卡| 伊人色综合久久天天网| 欧美乱妇狂野欧美在线视频| 国产成人精品s8p视频| 国产精品久久久久久免费播放 | 最近中文字幕MV免费高清视频8| 乱码AV午夜噜噜噜噜| jiapanese50欧美熟妇| 四虎永久免费| 久久精品亚洲视频| 饱满奶大30p| 亚洲欧美激情精品一区二区| 男子扒开美女尿口做羞羞的事| 国产GV天堂亚洲国产GV刚刚碰| 亚洲日本激情|