gradle使用技巧

Posted 安卓开发小站

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gradle使用技巧相关的知识,希望对你有一定的参考价值。

gradle使用技巧

在gradle.properties定义变量

在开发中通常会有一些通用的值,比如说定义文件目录,文件名称等,这些值在每个module中都应该一致。这时候我们就可以在gradle.properties文件中定义一些键值对,然后在各个module的build.gradle中读取。这样就可以保持各个module中的compileSdkVersion一致了。
如下:

gradle.properties中添加入下定义:

# 设置输出的aar文件日期
timeFormat = yyyy-MM-dd
# 设置输出的output文件路径
outputFileTimeFormat = yyyy-MM-dd--HH:mm

在build.gradle中读取变量

apply plugin: 'com.android.library'
apply from: "${project.rootDir}/paanydoor.gradle"
android {
   ...
    buildToolsVersion mbuildToolsVersion
    ...
    }

task << printstr{
    println outputFileTimeFormat
}

如上代码,我们可以在build.gradle中直接使用build.gradle中定义的变量。需要注意的是,gradle.properties中定义的键值对中的值都是str类型的。

在gradle中定义任务

gradle是由一个个任务构成的,我们可以在gradle文件中自定义task以执行特定代码。

自定义task有多种方法:

task printstr{
    println "str"
}

task printstr << {
    println "str"
}

task myTask(type: SomeType)   // SomeType可以指定任务类型,Gradle本身提供有Copy、Delete、Sync等

def getStr(aa){
    return aa
}  //可以传参,直接调用,不是task,不会再task列表中出现

gradle中常用的任务

delete

delete 'filePath' //需要删除的文件地址

copy

copy {
        from("path") //源文件地址
        include("*.aar") //需要复制的文件后缀
        into("path") //目标地址
        rename("oriName", "targetName") //重命名,非必须
    }

zip

zip {
        from "path" //源文件
        archiveName = "name" //压缩文件名
        destinationDir = "path" //目标地址
    }

Jar

jar {

        from jarTemp.absolutePath //class文件的目录
        from fileTree(dir: 'src/main', includes: ['assets/**', 'jniLibs/**'])//将assets目录打入jar包
        baseName = "${moduleName}_tmp" //jar包名字
        version = "1.0" //版本
        destinationDir = file("${tempPath}/${buildType}/jar")//.absolutePath
        archiveName = "${moduleName}_tmp.jar" //最终jar名字
    }

执行shell脚本

def process = "shell cmd".execute()
process.waitFor();

gradle中使用java代码

task javaTest <<{
    File file = new File("test")
    if (file.exist()){
        file.delete()
    }
}

引用自定义的gradle文件

当我们有大量的task的时候,我们可以创建一个单独的gradle文件,并在其他gradle中引用此gradle以做到代码复用

apply plugin: 'com.android.library'
apply from: "${project.rootDir}/paanydoor.gradle" //直接这样引用就好了,from后面是文件路径

以上是关于gradle使用技巧的主要内容,如果未能解决你的问题,请参考以下文章

如何使用模块化代码片段中的LeakCanary检测内存泄漏?

如何添加jcenter仓库 gradle依赖

如何防止Android studio格式化build.gradle

谷歌地图不显示在片段中

Gradle 导出属性不适用于 Spring 中的 gradle bootRun

错误:这个片段内部类应该是静态的 [ValidFragment]