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检测内存泄漏?
如何防止Android studio格式化build.gradle