SourceSet 定义其他资源
android {
sourceSets {
main {
jniLibs.srcDirs //定义 jni 目录
aidl.srcDirs //定义 aidl 目录
}
}
}
applicationVariants
定义 versionName 、VersionCode
在打包的时候分 debug 、release 版本 , 需要控制 versionName
android {
applicationVariants.all { variant ->
def flavor = variant.mergedFlavor
def versionName = flavor.versionName
if (variant.buildType.isDebuggable()) {
versionName += "_debug" //debug 名字
} else {
versionName += "_release" //release 名字
}
flavor.versionName = versionName
}
}
定义 APK 包的名字
apply plugin: 'com.android.application'
android {
defaultConfig {
applicationId "android.plugin"
minSdkVersion 14
targetSdkVersion 25
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
//定义渠道
productFlavors {
xiaomi {
//小米
}
wandoujia {
// 豌豆荚
}
}
//打包命名
applicationVariants.all {
variant ->
variant.outputs.each {
output ->
//定义一个新的apk 名字。
// 新名字 = app 名字+ 渠道号 + 构建类型 + 版本号 + 当前构建时间
def apkName = "appName_${variant.flavorName}_${buildType.name}_v${variant.versionName}_${getTime()}.apk";
output.outputFile = new File(output.outputFile.parent, apkName);
}
}
}
//获取当前时间
def getTime() {
String today = new Date().format('YY年MM月dd日HH时mm分')
return today
}
效果图如下:
Task
定义 task
//定义任务1
task task1<<{
println 'task1'
}
//定义任务2
task task2<<{
println 'task2'
}
mustRunAfter 定义 task 执行顺序
//task2 的执行顺讯在 task1 之后
task2.mustRunAfter task1
效果如下:
:app:task1
task1
效果如下:
:app:task2
task2
- 测试3 : gradlew task1 task2
效果如下:
:app:task1
task1
:app:task2
task2
- 测试4 : gradlew task2 task1
效果如下:
:app:task1
task1
:app:task2
task2
结论
如果单独执行 task1 就只会执行 task1 的任务;单独执行 task2 就只会执行 task2 的任务;
如果同时执行 task1、task2 , 一定会先执行 task1 , 等 task1 执行完后,就会执行 task2 内容。
扩展
上面 mustRunAfter 我们还有一种写法,如下图所示:
task2 {}.mustRunAfter task1
这个写法的效果和 mustRunAfter 是一样的,当然我们还可以在 花括号里面写一些任务,比如 :
task2 {
println '我最先执行'
}.mustRunAfter task1
下面做个测试,测试命令如下:
gradlew task2 task1
效果如下:
我最先执行
:app:task1
task1
:app:task2
task2
dependsOn 定义 task 依赖
task2 任务依赖于 task1 ,执行 task2 就会先执行 task1
task2.dependsOn task1
测试:
gradlew task2
效果如下:
:app:task1
task1
:app:task2
task2
常用 Gradlew 命令
------------------------------------------------------------
Gradle 3.3
------------------------------------------------------------
Build time: 2017-01-03 15:31:04 UTC
Revision: 075893a3d0798c0c1f322899b41ceca82e4e134b
Groovy: 2.4.7
Ant: Apache Ant(TM) version 1.9.6 compiled on June 29 2015
JVM: 1.8.0_112 (Oracle Corporation 25.112-b15)
OS: Windows 10 10.0 amd64
- 2、gradlew task : 查看所有的 task
参考资料
Android 利用Gradle实现差异化构建
杨海 Android目录结构
个人微信号:zhaoyanjun125
, 欢迎关注