0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

jf_78858299 ? 來源:小余的自習(xí)室 ? 作者:小余的自習(xí)室 ? 2023-03-30 11:05 ? 次閱讀

3.文件

Gradle中的文件操作和java中的文件操作是可以互相混用的。也就是說

在Gradle中可以直接使用java中的文件操作。

下面介紹幾種Gradle中文件使用方式:

1.文件創(chuàng)建以及獲取方式

方式1:file

def file1 = file('release.xml')
def file2 = file('release.xml',PathValidation.FILE)

file2使用的第二個參數(shù)是校驗文件使用:

有以下幾個校驗方式:

public enum PathValidation {
    NONE(), EXISTS(), FILE(), DIRECTORY()
}

默認(rèn)使用的是NONE

EXISTS(), FILE(), DIRECTORY():表示如果不滿足當(dāng)前條件會報對應(yīng)的異常

  • EXISTS:文件是否存在
  • FILE:是否是文件
  • DIRECTORY:是否是文件夾

方式2:files

ConfigurableFileCollection files(Object... paths);
//獲取一個文件集合,返回類型ConfigurableFileCollection
def _files = files('release.xml','release2.xml')

方式3:fileTree

獲取一個文件夾下面的所有的文件

def files = fileTree(dir: 'libs',includes: ['*.jar']){
    excludes = ['a*.jar','b*.jar']
    builtBy = ['task1','task2']
}

也可以使用fileTree來對文件進(jìn)行遍歷

方式4:zipTree

FileTree zipTree(Object zipPath);

獲取zip文件下面的所有文件

2.文件路徑設(shè)置及獲取

getRootDir:獲取根路徑

setBuildDir:設(shè)置編譯路徑

getBuildDir:獲取編譯路徑

getProjectDir:獲取當(dāng)前Project的路徑

3.文件拷貝

copy {
    from file('release.xml')
    into getRootProject().getBuildDir().path+'/test/'
}

4.文件遍歷

普通文件夾遍歷

fileTree('build/outputs/apk/'){ FileTree fileTree ->
    fileTree.visit { FileTreeElement element ->
        copy {
            from element.file
            into getRootProject().getBuildDir().path+'/test/'
        }
    }
}

zip/tar壓縮文件遍歷

FileTree ziptr = zipTree('release1.zip')
FileTree ziptr = tarTree('release1.zip')

然后用FileTreevisit方法進(jìn)行遍歷

5.文件寫入和讀出

使用java文件的InputStreamOutputStream就可以了,這個大家都很熟悉了

文件Api就講到這里,下面來看下屬性api這塊

4.屬性Api

屬性分類:

  • 1.在gradle.properties中設(shè)置的全局屬性
org.gradle.jvmargs =-Dfile.encoding=UTF-8
android.useAndroidX=true
android.enableJetifier=true
isLoadTest=true
GRADLE_USER_HOME = '../../user'

這里面包括系統(tǒng)屬性和開發(fā)者自定義的屬性,工程全局都可以訪問

其他地方使用訪問方式:

  • 2.在rootProject中設(shè)置的root項目屬性:一般用于統(tǒng)一全局版本信息使用
ext {
    mCompileSdk = 31
    versionName = '1.0.2'
    versionCode = 2
    versionInfo = 'App的第2個版本,更新了一些基礎(chǔ)核心功能'
}

注意: 其他地方需要使用:則最好加上rootProject.ext.xxProperty

  • 3.當(dāng)前Project中的屬性:

包括自定義的屬性或者Project自帶的屬性:

如:

this.project.gradle:當(dāng)前Gradle
this.project.tasks:當(dāng)前工程的TaskContainer
this.project.task1:獲取當(dāng)前Project中的task1任務(wù)
  • 4.當(dāng)前Project定義的ext屬性

    一般用于當(dāng)前Project使用的ext屬性

  • 5.Extension 擴(kuò)展屬性

Extension 擴(kuò)展是插件為外部構(gòu)建腳本提供的配置項,用于支持外部自定義插件,我們項目中給的android{}

其實就是Android Gradle Plugin給我們提供的Extension 擴(kuò)展,插件內(nèi)部可以獲取這個擴(kuò)展屬性,然后執(zhí)行對應(yīng)流程

ReleaseInfo {
    versionCode = 1
    versionName = '1.0.0'
    versionInfo = "12345566版本發(fā)布"
    fileName = "releaseinfo.xml"
}

這里的ReleaseInfo是筆者自定義插件中的一個Extension擴(kuò)展,插件中的Task可以使用這個Extension獲取到用戶提供的屬性。

屬性訪問方式:

hasProperty('key'):是否包含該屬性

findProperty('key');找屬性,沒有找到返回null

property('key'):找屬性,沒有找到返回

MissingPropertyException異常

getProperties():獲取當(dāng)前Project的所有屬性

setProperty('key','value');設(shè)置屬性

一般我們訪問屬性:直接使用key訪問

如:

定義:GRADLE_USER_HOME = '../../user' =>等價:project.setProperty('GRADLE_USER_HOME','../../user')
訪問:GRADLE_USER_HOME  =>等價于:project.getProperty('GRADLE_USER_HOME')
定義:project.name = 'pp1' =>等價:project.setProperty('name','pp1')
訪問:name =>等價于:project.getProperty('name')

關(guān)于自定義插件這塊內(nèi)容,后面會單獨出一期文章

總結(jié):

今天這篇文章主要是對Gradle中我們比較常用給的一些api進(jìn)行了講解。

主要包括Project相關(guān)apiTask相關(guān)api,文件相關(guān)api屬性相關(guān)api等,其實還有一些其他的比如外部命令的api,這些很少會用到,就不再講解了.

可以結(jié)合這篇文章,自己再去看源碼和相關(guān)官網(wǎng)文檔,會讓自己對api的認(rèn)識更加深刻。

后面會持續(xù)推出Gradle的一些高級語法,如自定義插件,優(yōu)秀開源框架插件的解讀以及AGP的解析;

好了,本文就講解到這里了。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • project
    +關(guān)注

    關(guān)注

    0

    文章

    35

    瀏覽量

    13258
  • gradle
    +關(guān)注

    關(guān)注

    0

    文章

    26

    瀏覽量

    692
收藏 人收藏

    評論

    相關(guān)推薦

    Gradle版本目錄功能的簡單應(yīng)用

    版本帝 Gradle 最新版本已經(jīng)到了 8.1.1 ,你是不是還在用著 Gradle 3 的功能?今天我們了解一 Gradle 7.0 之后推出的新功能 Version Catalo
    的頭像 發(fā)表于 09-30 11:12 ?1178次閱讀

    gradle安裝與配置unity

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

    Android Studio與Gradle深入

    小語言規(guī)范用來處理一個特定的事情(大多情況是配置)。Android 的插件的 DSL 文檔在 Android Gradle DSL有說明。  理解了以上基礎(chǔ)之后,你就會知其然,知其所以然了?! ∫陨?b class='flag-5'>知識
    發(fā)表于 08-31 17:58

    Gradle for Android

    Gradle for Android
    發(fā)表于 07-16 15:50

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

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

    快速入門Gradle的方法

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

    Gradle入門知識Gradle詳解

    大家回想一自己第一次接觸`Gradle`是什么時候? 相信大家也都是和我一樣,在我們打開第一個AS項目的時候, 發(fā)現(xiàn)有很多帶gradle字樣的文件:`setting.gradle
    的頭像 發(fā)表于 03-30 10:47 ?2456次閱讀
    <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項目的時候, 發(fā)現(xiàn)有很多帶gradle字樣的文件:`setting.gradle
    的頭像 發(fā)表于 03-30 10:51 ?801次閱讀
    <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>詳解(<b class='flag-5'>下</b>)

    Gradle入門知識Gradle語法1

    很多開發(fā)喜歡把`Gradle`簡單定義為一種構(gòu)建工具,和`ant,maven`等作用類似, 誠然Gradle確實是用來做構(gòu)建,但是如果簡單得把Gradle拿來做構(gòu)建,就太小看Gradle
    的頭像 發(fā)表于 03-30 10:54 ?945次閱讀
    <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

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

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

    由于Project源碼篇幅太長:這里只列出類的部分方法和屬性: 我們前面分析過,每個build.gradle對應(yīng)一個Project,Project在初始過程中會被構(gòu)建為`樹`形結(jié)構(gòu):
    的頭像 發(fā)表于 03-30 11:01 ?2270次閱讀
    <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> <b class='flag-5'>api</b><b class='flag-5'>解析</b>(上)

    Gradle自定義插件介紹2

    首先來講`Gradle`和`Gradle插件`有啥區(qū)別? > `Gradle`是一套構(gòu)建工具,其內(nèi)部構(gòu)建過程主要是以`Project`組成一個樹形的生態(tài)系統(tǒng),整個構(gòu)建流程有自己
    的頭像 發(fā)表于 03-30 11:17 ?855次閱讀
    <b class='flag-5'>Gradle</b>自定義插件介紹2

    Gradle Plugin和AGP的區(qū)別1

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

    Gradle Plugin和AGP的區(qū)別2

    Gradle Plugin`和`AGP`的區(qū)別? `Gradle Plugin`是`Gradle`構(gòu)建過程中使用的插件的總稱,而`Android Gradle Plugin`是這
    的頭像 發(fā)表于 03-30 11:49 ?1106次閱讀

    Gradle Plugin和AGP的區(qū)別3

    Gradle Plugin`和`AGP`的區(qū)別? `Gradle Plugin`是`Gradle`構(gòu)建過程中使用的插件的總稱,而`Android Gradle Plugin`是這
    的頭像 發(fā)表于 03-30 11:50 ?1172次閱讀