可以在ext块中定义变量,例如:
ext {
def AAVersion = '4.0-SNAPSHOT' // change this to your desired version
}
dependencies {
apt "org.androidannotations:androidannotations:$AAVersion"
compile "org.androidannotations:androidannotations-api:$AAVersion"
}
使用def
定义变量,定义的是局部变量,只能在这个build.gradle文件里面用,不用def
定义这个变量,这个变量是全局变量,在子工程中也可以使用。
def 用来定义方法,属性和本地变量
也可以在gradle.properties
中以key-value的形式定义:
login='user'
pass='my_long_and_highly_complex_password'
在build文件中这样使用:
repositories {
maven {
url 'http://repo.mycompany.com/maven2'
credentials {
//使用了login变量和pass变量
username login
password pass
}
}
}
变量也可以在命令行中获得,这里就不介绍了。
也可以动态的改变变量值:
ext {
if (!project.hasProperty('user')) {
user = 'user_from_build_file'
}
if (!project.hasProperty('pass')) {
pass = 'pass_from_build_file'
}
}
task printProperties() {
doLast {
println "username=$user"
println "password=$pass"
}
}
Android studio
并没有需要我们手动下载Gradle
,Gradle
的下载和安装是由AS提供的的Wrapper脚本自动完成的。所以我们想要更新Gradle
,有以下两种方法:
1.在 build.gradle文件中增加一个Wapper TasK来生成一个新的wrapper脚本。
例如:使用./gradlew wrapper --gradle-version 2.12
名流就可以生成下载指定Gradle版本的wrapper。
也可以在顶层build.gradle
中建立Gradle wrapper task
如下:
task wrapper(type: Wrapper) {
gradleVersion = 2.12
}
2.编辑 gradle-wrapper.properties的distributionUrl属性,distributionUrl告诉wapper去哪里下载gradle。
通过第一种方法更新gradle只会更新可执行文件(bin文件),但是不会更新文档和源码,AS会提示你下载源码和文档。
如何把子项目中的配置共同抽取出来?
可以在顶层build
文件中使用allprojects
属性,例如:
allprojects {
repositories {
jcenter()
}
}
注:个人认为allprojects就是Groovy的一个闭包,gradle会遍历所有的工程然后调用这个闭包以达到所有工程都应用这个配置的目的
表示当前工程和子工程(moudle)都使用jcenter作为远程仓库。
也可以使用subprojects
属性
subprojects {
apply plugin: 'com.android.library'
}
这表明所有子工程都是用com.android.library
插件,但是父工程不使用。
也可以以使用Gradle进行apk签名而不使用手动签名,这就要用到一个signingConfigs
块
android {
// ... other sections ...
signingConfigs {
//发布签名
release {
//别名
keyAlias 'my_alias'
//签名过程中使用的密码
keyPassword 'password'
//签名文件存储的地方
storeFile file('/Users/kousen/keystores/myapp.keystore') //keystore的密码
storePassword 'password'
}
}
}