前言
本文记录了一些常用的gradle配置,基本上都是平时开发中可能会使用到的,如果有新内容会不定时更新,附官网
1.依赖库版本写法
不推荐写法:
dependencies {
compile 'com.example.code.abc:def:2.+' // 不推荐的写法
}
这样写虽然可能保证每次都保持库是最新的,但同时会有以下更严重的问题:
1)多人开发时,每个人可能会得到不同的最新版本,带来潜在的隐患;
2)库更新后,可能会由于库的内部代码的修改而引起不易发现的BUG;
3)每次build时会联网检查,增加build时间。
推荐写法(固定版本):
dependencies {
compile 'com.example.code.abc:def:2.0.1' // 固定版本,有需要时再进行修改
}
2.全局设置编码
在最顶层的build.gradle中添加:
allprojects {
repositories {
jcenter()
}
tasks.withType(JavaCompile){
options.encoding = "UTF-8"
}
}
3.设置Java编译版本
在module中的build.gradle中:
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
}
全局配置则在最顶层的build.gradle中:
allprojects {
repositories {
jcenter()
}
tasks.withType(JavaCompile) {
sourceCompatibility = JavaVersion.VERSION_1_7
targetCompatibility = JavaVersion.VERSION_1_7
}
}
4.Release版本的密码配置
密码、签名等敏感信息可以统一进行存放,不进行硬编码。写在gradle.properies中,可以随意的定义key-value形式,此文件是gradle自动引入的。
例:gradle.properies文件如下
STORE_FILE_PATH ../test_key.jks
KEYSTORE_PASSWORD 123456
KEY_ALIAS abc
KEY_PASSWORD 654321
PACKAGE_NAME_SUFFIX .test
TENCENT_AUTHID aaa0123
module的build.gradle文件:
signingConfigs {
release {
try {
storeFile file(STORE_FILE_PATH)
storePassword STORE_PASSWORD
keyAlias KEY_ALIAS
keyPassword KEY_PASSWORD
}
catch (ex) {
throw new InvalidUserDataException("You should define KEYSTORE_PASSWORD and KEY_PASSWORD in gradle.properties.")
}
}
}
5.设置第三方maven仓库
在顶层的build.gradle中:
allprojects {
repositories {
maven {
url 'http://repo.xxxx.net/nexus/'
name 'maven name'
credentials {
username = 'username'
password = 'password'
}
}
}
}
其中name和credentials是可选项,视具体情况而定。如使用阿里云仓库如下:
allprojects {
repositories {
maven {
url "http://maven.aliyun.com/nexus/content/groups/public/"
}
}
}
6.自动删除unaligned apk
每次打包后都会有一个unaligned的apk文件生成,这个文件对于开发来说无意义,可以配置一个task来删除它。
写在module的build.gradle中:
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
}
android.applicationVariants.all {
variant ->
variant.outputs.each {
output ->
// 删除unaligned apk
if (output.zipAlign != null) {
output.zipAlign.doLast {
output.zipAlign.inputFile.delete()
}