3.文件
Gradle中的文件操作和java中的文件操作是可以互相混用的。也就是說
在Gradle中可以直接使用java中的文件操作。
下面介紹幾種Gradle中文件使用方式:
1.文件創(chuàng)建以及獲取方式
方式1:file
def file1 = file('release.xml')
def file2 = file('release.xml',PathValidation.FILE)
file2使用的第二個(gè)參數(shù)是校驗(yàn)文件使用:
有以下幾個(gè)校驗(yàn)方式:
public enum PathValidation {
NONE(), EXISTS(), FILE(), DIRECTORY()
}
默認(rèn)使用的是NONE:
EXISTS(), FILE(), DIRECTORY():表示如果不滿足當(dāng)前條件會(huì)報(bào)對(duì)應(yīng)的異常
EXISTS:文件是否存在FILE:是否是文件DIRECTORY:是否是文件夾
方式2:files
ConfigurableFileCollection files(Object... paths);
//獲取一個(gè)文件集合,返回類型ConfigurableFileCollection
def _files = files('release.xml','release2.xml')
方式3:fileTree
獲取一個(gè)文件夾下面的所有的文件
def files = fileTree(dir: 'libs',includes: ['*.jar']){
excludes = ['a*.jar','b*.jar']
builtBy = ['task1','task2']
}
也可以使用fileTree來對(duì)文件進(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')
然后用FileTree的visit方法進(jìn)行遍歷
5.文件寫入和讀出
使用java文件的InputStream和OutputStream就可以了,這個(gè)大家都很熟悉了
文件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項(xiàng)目屬性:一般用于統(tǒng)一全局版本信息使用
ext {
mCompileSdk = 31
versionName = '1.0.2'
versionCode = 2
versionInfo = 'App的第2個(gè)版本,更新了一些基礎(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)建腳本提供的配置項(xiàng),用于支持外部自定義插件,我們項(xiàng)目中給的android{}
其實(shí)就是Android Gradle Plugin給我們提供的Extension 擴(kuò)展,插件內(nèi)部可以獲取這個(gè)擴(kuò)展屬性,然后執(zhí)行對(duì)應(yīng)流程
ReleaseInfo {
versionCode = 1
versionName = '1.0.0'
versionInfo = "12345566版本發(fā)布"
fileName = "releaseinfo.xml"
}
這里的ReleaseInfo是筆者自定義插件中的一個(gè)Extension擴(kuò)展,插件中的Task可以使用這個(gè)Extension獲取到用戶提供的屬性。
屬性訪問方式:
hasProperty('key'):是否包含該屬性
findProperty('key');找屬性,沒有找到返回null
property('key'):找屬性,沒有找到返回
MissingPropertyException異常
getProperties():獲取當(dāng)前Project的所有屬性
setProperty('key','value');設(shè)置屬性
一般我們?cè)L問屬性:直接使用key訪問
如:
定義:GRADLE_USER_HOME = '../../user' =>等價(jià):project.setProperty('GRADLE_USER_HOME','../../user')
訪問:GRADLE_USER_HOME =>等價(jià)于:project.getProperty('GRADLE_USER_HOME')
定義:project.name = 'pp1' =>等價(jià):project.setProperty('name','pp1')
訪問:name =>等價(jià)于:project.getProperty('name')
關(guān)于自定義插件這塊內(nèi)容,后面會(huì)單獨(dú)出一期文章
總結(jié):
今天這篇文章主要是對(duì)Gradle中我們比較常用給的一些api進(jìn)行了講解。
主要包括Project相關(guān)api,Task相關(guān)api,文件相關(guān)api和屬性相關(guān)api等,其實(shí)還有一些其他的比如外部命令的api,這些很少會(huì)用到,就不再講解了.
可以結(jié)合這篇文章,自己再去看源碼和相關(guān)官網(wǎng)文檔,會(huì)讓自己對(duì)api的認(rèn)識(shí)更加深刻。
后面會(huì)持續(xù)推出Gradle的一些高級(jí)語法,如自定義插件,優(yōu)秀開源框架插件的解讀以及AGP的解析;
好了,本文就講解到這里了。
-
project
+關(guān)注
關(guān)注
0文章
35瀏覽量
13758 -
gradle
+關(guān)注
關(guān)注
0文章
26瀏覽量
1048
發(fā)布評(píng)論請(qǐng)先 登錄
Gradle版本目錄功能的簡單應(yīng)用
gradle安裝與配置unity
Android Studio與Gradle深入
請(qǐng)問OpenHarmony鴻蒙demo gradle報(bào)錯(cuò)怎么解決?
快速入門Gradle的方法
Gradle入門知識(shí)之Gradle詳解
Gradle入門知識(shí)之Gradle詳解(下)
Gradle入門知識(shí)之Gradle語法1
Gradle入門知識(shí)之Gradle語法2
Gradle入門知識(shí)之Gradle api解析(上)
Gradle自定義插件介紹2
Gradle Plugin和AGP的區(qū)別1
Gradle入門知識(shí)之Gradle api解析(下)
評(píng)論