Gradle构建全局配置
全局参数
在项目根目录下的build.gradle中,通过ext领域可以指定全局的配置信息,代码如下:
ext {
compileSdkVersion = 24
buildToolsVersion = "24.0.2"
minSdkVersion = 14
targetSdkVersion = 24
versionCode = 1
versionName = "1.0"
}
这些配置基本上是整个项目的总体配置,下面的每个module都需要按照这个方式来进行配置,而不是在某个module中单独使用单独的配置。
引用配置
在配置好全局参数后,就可以在每个module中使用这些配置了,例如在一个module中,可以通过以下代码获取全角配置。
android {
compileSdkVersion rootProject.ext.compileSdkVersion
}
另外,开发者也可以把ext全局配置写在allprojects领域中,这样在每个module中就可以直接引用申明的变量了。
allprojects {
repositories {
jcenter()
}
ext{
COMPILE_SDK_VERSION = 24
``````
}
}
这样写的好处是可以将配置进行统一管理,但坏处是如果这样写的话,Gradle的版本更新通知检查机制就无效了。大部分的时候,这种写法利大于弊。
构建buildTypes
构建类型基础
除了系统默认的构建type—debug和release之外,gradle同样支持自定义创建新的构建类型。例如,在脚本中增加一个xys类型,同样设置该类型的applicationIdSuffix参数为”.xys”,代码如下:
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
xys{
applicationIdSuffix ".xys"
}
}
执行build命令,可以发现生成的apk如图所示:
参数applicationIdSuffix的作用是为默认的包名添加一个后缀。
构建类型buildTypes的继承
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
xys.initWith(buildTypes.debug)
xys{
applicationIdSuffix ".xys"
}
}
通过以上代码,xys构建类型就继承了默认的debug构建类型的配置,同时还添加了自定义配置。
构建类型参数
在配置构建类型时,还可以配置很低参数来区分不同的构建类型,文档中给出恶劣详细的参数列表,以及这些参数在debug\release&other类型下的默认值。
构建singingConfigs和签名
生成签名
在android studio中,选择Build/Generate Signed APK选项,如图:
选择默认的module,点击Next,在界面中选择“Create new···”,如图所示:
在弹出的界面中,输入签名所需要的相关信息,如图所示:
通常会把签名文件的保存路径选择到主module的根目录下,这样引用起来比较方便。另外android studio中,签名文件不再是.keystore文件,而是.jks文件。点击OK,系统会自动生成相应的签名文件,如图:
配置签名
生成签名文件之后,就可以在build.gradle脚本的android领域中配置签名的相关信息。
signingConfigs{
xys {
storeFile file("/keystore/demo.jks")
storePassword "ct123456"
keyAlias "xys"
keyPassword "ct123456"
}
使用签名
配置好相关的签名信息后, 就可以在构建类型的时候加入签名的设置。这样生成的apk就会包含签名版和未签名版两种,完整的配置如下所示。
signingConfigs{
xys {
storeFile file("/keystore/demo.jks")
storePassword "ct123456"
keyAlias "xys"
keyPassword "ct123456"
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
xys{
signingConfig signingConfigs.xys
applicationIdSuffix ".xys"
}
脚本中设置了xys的签名,而没有给release设置签名,因此,在执行gradle build指令后,生成的apk如图: