网站首页 全球最实用的IT互联网站!

人工智能P2P分享Wind搜索发布信息网站地图标签大全

当前位置:诺佳网 > 电子/半导体 > 嵌入式技术 >

Gradle入门知识之Gradle api解析(下)

时间:2023-03-30 11:05

人气:

作者:admin

标签:

导读:由于Project源码篇幅太长:这里只列出类的部分方法和属性:我们前面分析过,每个build.gradle对应一个Project,Project在初始过程中会被构建为`树`形结构:...

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的解析;

好了,本文就讲解到这里了。

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信