Gradle常用使用技巧
Table of Contents
1. BuildConfig 字段
buildConfigField "boolean", "LOG_ENABLE", "true"
2. Manifest 占位符
manifestPlaceholders = [hostName:"www.example.com"]
3. 代码压缩与混淆
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
注意:debuggable 为 true 时开混淆没用(好像又有用,这两种情况都碰到过)
4. 资源压缩
shrinkResources true
5. 多 Dex 处理
multiDexEnabled true
multiDexKeepFile file('multidex-config.txt')
multiDexKeepProguard file('multidex-config.pro')
// Application中
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(context);
MultiDex.install(this);
}
6. 变体特定依赖
dependencies {
compile 'com.android.support:support-v4:22.2.0'
flavorOneCompile 'com.android.support:appcompat-v7:22.2.0' // 仅为flavorOne添加
}
7. 多维 Product Flavor
flavorDimensions "type", "environment"
8. 变体过滤
flavorDimensions "api", "mode"
productFlavors {
demo {...}
full {...}
minApi24 {...}
minApi23 {...}
minApi21 {...}
}
variantFilter { variant ->
def names = variant.flavors*.name
if (names.contains("minApi21") && names.contains("demo")) {
setIgnore(true)
}
}
9. 动态配置文字
productFlavors {
demo {
resValue("string","dynamic_text","demo的动态文字")
}
}
注意:string.xml 里面不能有 dynamic_text 字段
10. 源集配置
sourceSets {
demo {
setRoot "src/demo"
res.srcDirs = ['src/demo/res', 'src/demo/res/']
}
}
11. 依赖缓存控制
configurations.all {
resolutionStrategy.cacheDynamicVersionsFor 10, 'minutes' // release版本
resolutionStrategy.cacheChangingModulesFor 10, 'minutes' // snapshot版本
}
12. Properties 类型
Gradle 支持三种 Properties,这三种 Properties 的作用域和初始化阶段都不一样,下面分别列出了其部分特点:
System Properties
- 可通过 gradle.properties 文件,环境变量或命令行-D 参数设置
- 可在 setting.gradle 或 build.gradle 中动态修改,在 setting.gradle 中的修改对 buildscript block 可见
- 所有工程可见,不建议在 build.gradle 中修改
- 多子工程项目中,子工程的 gradle.properties 会被忽略掉,只有 root 工程的 gradle.properties 有效
Project Properties
- 可通过 gradle.properties 文件,环境变量或命令行-P 参数设置,优先级是:
- 可在 build.gradle 中动态修改,但引用不存在的 project properties 会立即抛错
- 动态修改过的 project properties 在 buildscript block 中不可见
Project ext properties
- 可在项目的 build.gradle 中声明和使用,本工程和子工程可见
- 不能在 setting.gradle 中访问
加载顺序
如果有多处设置,加载次序如下(注意:gradle 2.0 是这样的, 1.10~1.12 有 bug),后面的覆盖前面的设置:
- from gradle.properties located in project build dir.
- from gradle.properties located in gradle user home.
- from system properties, e.g. when -Dsome.property is used in the command line.
- setting.gradle
- build.gradle
注意:
gradle build -D
设置 System Propertiesgradle build -P
设置 Project Properties
13. 任务排除
./grdlew clean assembleRelease -x verifyReleaseResources
14. 查看依赖树
./gradlew build --scan