电子说
Gradle中的文件操作和java中的文件操作是可以互相混用的。也就是说
在Gradle中可以直接使用java中的文件操作。
下面介绍几种Gradle中文件使用方式:
方式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文件下面的所有文件
getRootDir
:获取根路径
setBuildDir
:设置编译路径
getBuildDir
:获取编译路径
getProjectDir
:获取当前Project的路径
copy {
from file('release.xml')
into getRootProject().getBuildDir().path+'/test/'
}
普通文件夹遍历
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
方法进行遍历
使用java文件的InputStream
和OutputStream
就可以了,这个大家都很熟悉了
文件Api就讲到这里,下面来看下属性api这块
gradle.properties
中设置的全局属性org.gradle.jvmargs =-Dfile.encoding=UTF-8
android.useAndroidX=true
android.enableJetifier=true
isLoadTest=true
GRADLE_USER_HOME = '../../user'
这里面包括系统属性和开发者自定义的属性,工程全局都可以访问
其他地方使用访问方式:
root项目属性
:一般用于统一全局版本信息使用ext {
mCompileSdk = 31
versionName = '1.0.2'
versionCode = 2
versionInfo = 'App的第2个版本,更新了一些基础核心功能'
}
注意: 其他地方需要使用:则最好加上rootProject.ext.xxProperty
包括自定义的属性或者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的解析
;
好了,本文就讲解到这里了。
全部0条评论
快来发表一下你的评论吧 !