3.文件
Gradle中的文件操作和java中的文件操作是可以互相混用的。也就是說
在Gradle中可以直接使用java中的文件操作。
下面介紹幾種Gradle中文件使用方式:
1.文件創建以及獲取方式
方式1
:file
def file1 = file('release.xml')
def file2 = file('release.xml',PathValidation.FILE)
file2使用的第二個參數
是校驗文件使用:
有以下幾個校驗方式:
public enum PathValidation {
NONE(), EXISTS(), FILE(), DIRECTORY()
}
默認使用的是NONE
:
EXISTS(), FILE(), DIRECTORY()
:表示如果不滿足當前條件會報對應的異常
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來對文件進行遍歷
方式4
:zipTree
FileTree zipTree(Object zipPath);
獲取zip文件下面的所有文件
2.文件路徑設置及獲取
getRootDir
:獲取根路徑
setBuildDir
:設置編譯路徑
getBuildDir
:獲取編譯路徑
getProjectDir
:獲取當前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
方法進行遍歷
5.文件寫入和讀出
使用java文件的InputStream
和OutputStream
就可以了,這個大家都很熟悉了
文件Api就講到這里,下面來看下屬性api這塊
4.屬性Api
屬性分類:
- 1.在
gradle.properties
中設置的全局屬性
org.gradle.jvmargs =-Dfile.encoding=UTF-8
android.useAndroidX=true
android.enableJetifier=true
isLoadTest=true
GRADLE_USER_HOME = '../../user'
這里面包括系統屬性和開發者自定義的屬性,工程全局都可以訪問
其他地方使用訪問方式:
- 2.在rootProject中設置的
root項目屬性
:一般用于統一全局版本信息使用
ext {
mCompileSdk = 31
versionName = '1.0.2'
versionCode = 2
versionInfo = 'App的第2個版本,更新了一些基礎核心功能'
}
注意: 其他地方需要使用:則最好加上rootProject.ext.xxProperty
- 3.當前Project中的屬性:
包括自定義的屬性或者Project自帶的屬性:
如:
this.project.gradle:當前Gradle
this.project.tasks:當前工程的TaskContainer
this.project.task1:獲取當前Project中的task1任務
-
4.當前Project定義的ext屬性
一般用于當前Project使用的ext屬性
-
5.
Extension
擴展屬性
Extension 擴展是插件為外部構建腳本提供的配置項,用于支持外部自定義插件,我們項目中給的android{}
其實就是Android Gradle Plugin
給我們提供的Extension
擴展,插件內部可以獲取這個擴展屬性,然后執行對應流程
ReleaseInfo {
versionCode = 1
versionName = '1.0.0'
versionInfo = "12345566版本發布"
fileName = "releaseinfo.xml"
}
這里的ReleaseInfo
是筆者自定義插件中的一個Extension
擴展,插件中的Task
可以使用這個Extension
獲取到用戶提供的屬性。
屬性訪問方式:
hasProperty('key')
:是否包含該屬性
findProperty('key')
;找屬性,沒有找到返回null
property('key')
:找屬性,沒有找到返回
MissingPropertyException
異常
getProperties()
:獲取當前Project的所有屬性
setProperty('key','value')
;設置屬性
一般我們訪問屬性:直接使用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')
關于自定義插件這塊內容,后面會單獨出一期文章
總結:
今天這篇文章主要是對Gradle
中我們比較常用給的一些api進行了講解。
主要包括Project相關api
,Task相關api
,文件相關api
和屬性相關api
等,其實還有一些其他的比如外部命令的api
,這些很少會用到,就不再講解了.
可以結合這篇文章,自己再去看源碼和相關官網文檔,會讓自己對api的認識更加深刻。
后面會持續推出Gradle的一些高級語法,如自定義插件
,優秀開源框架插件
的解讀以及AGP的解析
;
好了,本文就講解到這里了。
-
project
+關注
關注
0文章
35瀏覽量
13301 -
gradle
+關注
關注
0文章
26瀏覽量
728
發布評論請先 登錄
相關推薦
評論