0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

jf_78858299 来源:小余的自习室 作者:小余的自习室 2023-03-30 11:05 次阅读

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')

然后用FileTreevisit方法进行遍历

5.文件写入和读出

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

文件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相关apiTask相关api文件相关api属性相关api等,其实还有一些其他的比如外部命令的api,这些很少会用到,就不再讲解了.

可以结合这篇文章,自己再去看源码和相关官网文档,会让自己对api的认识更加深刻。

后面会持续推出Gradle的一些高级语法,如自定义插件优秀开源框架插件的解读以及AGP的解析

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • project
    +关注

    关注

    0

    文章

    35

    浏览量

    13212
  • gradle
    +关注

    关注

    0

    文章

    26

    浏览量

    679
收藏 人收藏

    评论

    相关推荐

    gradle安装与配置unity

    Gradle是一种用于构建和自动化构建过程的强大工具,而Unity则是一款跨平台的游戏引擎。在Unity项目中使用Gradle可以帮助我们更方便地管理和构建项目,同时能够提供更高的自定义能力和稳定性
    的头像 发表于 12-07 14:48 1045次阅读

    Android Studio与Gradle深入

    小语言规范用来处理一个特定的事情(大多情况是配置)。Android 的插件的 DSL 文档在 Android Gradle DSL有说明。  理解了以上基础之后,你就会知其然,知其所以然了。  以上知识
    发表于 08-31 17:58

    Gradle for Android

    Gradle for Android
    发表于 07-16 15:50

    请问OpenHarmony鸿蒙demo gradle报错怎么解决?

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

    DevEco报错不能顺利进入gradle8.0怎么解决?

    报错内容为:此版本中使用了已弃用的 Gradle 功能,使其与 Gradle 8.0 不兼容。翻译一,大概有些人说这个中外使用了Gradle的特性,但它应该与
    发表于 04-21 11:15

    DevEco Studio自动配置gradle的方法分享

    方法①在项目右键 Find in Path输入gradle-5.4.1-all.zip方法②下载gradle-5.4.1-all.zip解压至不要含有中文名称的目录比如我解压后的路径是D
    发表于 06-09 10:26

    快速入门Gradle的方法

    我们前面的Gradle是一门基于Groov的DSL,可能很多童鞋就是因为你是这个Gradle的迷,第一觉得Gradle是一门独立的语言呀,如果想进入歧途了,我一开始也是这么迷糊的,当你了解之后,你就可以这么理解
    的头像 发表于 04-08 10:56 1094次阅读
    快速<b class='flag-5'>入门</b><b class='flag-5'>Gradle</b>的方法

    Gradle入门知识Gradle详解

    大家回想一下自己第一次接触`Gradle`是什么时候? 相信大家也都是和我一样,在我们打开第一个AS项目的时候, 发现有很多带gradle字样的文件:`setting.gradle, build.
    的头像 发表于 03-30 10:47 2320次阅读
    <b class='flag-5'>Gradle</b><b class='flag-5'>入门</b><b class='flag-5'>知识</b>之<b class='flag-5'>Gradle</b>详解

    Gradle入门知识Gradle详解(下)

    大家回想一下自己第一次接触`Gradle`是什么时候? 相信大家也都是和我一样,在我们打开第一个AS项目的时候, 发现有很多带gradle字样的文件:`setting.gradle, build.
    的头像 发表于 03-30 10:51 710次阅读
    <b class='flag-5'>Gradle</b><b class='flag-5'>入门</b><b class='flag-5'>知识</b>之<b class='flag-5'>Gradle</b>详解(下)

    Gradle入门知识Gradle语法1

    很多开发喜欢把`Gradle`简单定义为一种构建工具,和`ant,maven`等作用类似, 诚然Gradle确实是用来做构建,但是如果简单得把Gradle拿来做构建,就太小看Gradle
    的头像 发表于 03-30 10:54 859次阅读
    <b class='flag-5'>Gradle</b><b class='flag-5'>入门</b><b class='flag-5'>知识</b>之<b class='flag-5'>Gradle</b>语法1

    Gradle入门知识Gradle语法2

    很多开发喜欢把`Gradle`简单定义为一种构建工具,和`ant,maven`等作用类似, 诚然Gradle确实是用来做构建,但是如果简单得把Gradle拿来做构建,就太小看Gradle
    的头像 发表于 03-30 10:54 624次阅读

    Gradle入门知识Gradle api解析(上)

    由于Project源码篇幅太长:这里只列出类的部分方法和属性: 我们前面分析过,每个build.gradle对应一个Project,Project在初始过程中会被构建为`树`形结构:
    的头像 发表于 03-30 11:01 2137次阅读
    <b class='flag-5'>Gradle</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 Plugin和AGP的区别1

    Gradle Plugin`和`AGP`的区别? `Gradle Plugin`是`Gradle`构建过程中使用的插件的总称,而`Android Gradle Plugin`是这
    的头像 发表于 03-30 11:48 1060次阅读
    <b class='flag-5'>Gradle</b> Plugin和AGP的区别1

    Gradle Plugin和AGP的区别2

    Gradle Plugin`和`AGP`的区别? `Gradle Plugin`是`Gradle`构建过程中使用的插件的总称,而`Android Gradle Plugin`是这
    的头像 发表于 03-30 11:49 969次阅读

    Gradle Plugin和AGP的区别3

    Gradle Plugin`和`AGP`的区别? `Gradle Plugin`是`Gradle`构建过程中使用的插件的总称,而`Android Gradle Plugin`是这
    的头像 发表于 03-30 11:50 1036次阅读