gradle文件中的主要配置如下:
android {
compileSdkVersion 24
buildToolsVersion "24.0.0"
defaultConfig {
applicationId "app"
minSdkVersion 15
targetSdkVersion 24
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
signingConfig {}
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
productFlavors {
dev {
applicationIdSuffix "dev"
def apkName = 'Awesome Dev ' + System.getenv('VERSION')
resValue 'string', 'app_name', apkName.trim()
}
qa {
applicationIdSuffix "qa"
def apkName = 'Awesome Qa ' + System.getenv('VERSION')
resValue 'string', 'app_name', apkName.trim()
}
prod {
applicationIdSuffix "prod"
def apkName = 'Awesome ' + System.getenv('VERSION')
resValue 'string', 'app_name', apkName.trim()
}
}
}
下面来对其中的配置一一进行介绍。
compileSdkVersion:
是SDK的版本号,告诉gradle用哪个Android SDK版本来编译应用。如果使用了新的API,就需要使用对应Level的SDK。
buildToolsVersion:
是构建工具的版本,其中包括了打包工具等,其目录位于build-tools/XX。可以使用高版本的build-tool去构建低版本的SDK工程。
defaultConfig元素中定义配置
applicationId:
使用applicationId来配置manifest文件中的packageName属性。
minSdkVersion:
指定能够安装该引用的最低版本。
targetSdkVersion:
提供向前兼容的依据,在应用的targetSdkVersion没有更新之前系统是不会应用最新的行为变化的。这允许你在适应新的行为变化之前就可以使用新的API,因为你已经更新了CompileSdkVersion。比如在API 25的时候API的行为已经发生了改变,在调用API的时候会先去check targetSdkVersion这个版本,如果低于25则行为与低版本行为一致,否则使用25的行为。这样会在新api的执行方法中有if-else的判断逻辑去check到底使用哪个版本的API。可以参考Android targetSdkVersion 原理
versionCode:
主要是用于版本升级所用,是INT类型的,第一个版本定义为1,以后递增,这样只要判断该值就能确定是否需要升级,该值不显示给用户。
versionName:
这个是我们常说明的版本号,由三部分组成..,该值是个字符串,可以显示给用户。
buildType指定构建类型
- Debug版本采用通用的name/password键值对自动创建数字证书进行签名,以防止构建过程中出现请求信息。
- Release版本在构建过程中没有签名,需要稍后再签名。
这些行为可以在buildType中进行配置:
minifyEnabled:
用来控制是否运行混淆。如果不混淆,APP发布出去后别人只要进行反编译就可以直接得到你的源码了。
proguardFiles:
指定混淆文件。
signingConfig:
signingConfig 配置应用程序的签名。一个签名需要包含以下信息:
- Keystory
- keystory密码
- key的别名
- key的密码
使用productFlavors进行差异化配置
在buildType中我们说过Andriod Plugin会默认构建debug和release两个版本的APK。那么Product Flavors也可以指定不同版本的APK:如果有Flavor定义,项目输出为输出所有可能组合的APK,每个组合是一个Build Variant(构建版本)。
- DevDebug
- DevRelease
- QaDebug
- QaRelease
- ProdDebug
- ProdRelease
项目中如果没有定义flavor同样也会有Build Variant,只是使用的是默认的flavor和配置。default(默认)的flavor/config是没有名字的,所以生成的Build Variant列表看起来就跟Build Type列表一样。
Product Flavor也会通过它们自己的sourceSet提供代码和资源。上面的例子将会创建3个sourceSet:
android.sourceSets. dev位于src/dev/
android.sourceSets.qa 位于src/qa/
android.sourceSets.prod 位于src/prod/