我这边使用的是AndroidStudio正式版本3.0.1,gradle插件版本3.0.1,gradle构建版本是
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
在android{}模块中可以包含以下直接配置项:
defaultConfig{} 默认配置,是ProductFlavor类型。它共享给其他ProductFlavor使用
sourceSets{ } 源文件目录设置,是AndroidSourceSet类型。
buildTypes{ } BuildType类型
signingConfigs{ } 签名配置,SigningConfig类型
productFlavors{ } 产品风格配置,ProductFlavor类型
testOptions{ } 测试配置,TestOptions类型
aaptOptions{ } aapt配置,AaptOptions类型
lintOptions{ } lint配置,LintOptions类型
dexOptions{ } dex配置,DexOptions类型
compileOptions{ } 编译配置,CompileOptions类型
packagingOptions{ } PackagingOptions类型
jacoco{ } JacocoExtension类型。 用于设定 jacoco版本
splits{ } Splits类型。
一般配置
defaultConfig,productFlavors,buildTypes,SigningConfigs,
其中defaultConfig主要用来配置最低版sdk和目标版本sdk
defaultConfig { minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" }
produceFlavors:创建此源集可加入特定构建变体专用的代码和资源。
简单点说就是哪些渠道
flavorDimensions "versionCode"
productFlavors { debugProduce {
dimension
"versionCode"
applicationId rootProject.ext.debugapplicationId
versionCode rootProject.ext.debugVersionCode
versionName rootProject.ext.debugVersionName
manifestPlaceholders = [
APP_NAME:
"aaaa"
] } releaseProduce {
dimension
"versionCode"
applicationId rootProject.ext.releaseapplicationId
versionCode rootProject.ext.realseVersionCode
versionName rootProject.ext.realseVersionName
manifestPlaceholders = [
APP_NAME:
"bbbb"
] }}
与前面的gradle版本不同的是,gradle3.0后修改flavorsdimension为dimension属性(必须要填写否则会报错),基于多个标准构建多个版本
buildType:是构建的类型
buildTypes { release { buildConfigField("boolean", "API_ENV", "true") minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' signingConfig signingConfigs.release } debug { buildConfigField("boolean", "API_ENV", "false") minifyEnabled false signingConfig signingConfigs.debug }
可以构建多种,并不仅仅是俩种。
signingconfigs:用于签名的设置
signingConfigs{ debug{ keyAlias 'aaa' keyPassword 'aaa' storeFile file("jks/aaa.jks") storePassword 'aaaa' } release{ keyAlias 'aaaa' keyPassword 'aaaa' storeFile file("jks/aaa.jks") storePassword 'aaa' } }
根据不同的构建类型,设置不同的签名文件。
android.applicationVariants.all {variant -> variant.outputs.all { def filename if(variant.buildType.name =='release'){ filename = "app_release_V${getProductFlavors().first().versionName}-${getCurrent()}.apk" }else if(variant.buildType.name =='debug'){ filename = "app_debug_V${getProductFlavors().first().versionName}-${getCurrent()}.apk" } outputFileName = filename } }
最后生产的包按照app_debug_V1.0-2018-03-23.apk,这种方式重新命名,需要注意的是gradle3.0之后,variant.outputs.each 调用改为variant.outputs.all。
最后通过终端执行
gradle assemble //仅仅执行项目打包所必须的任务集
gradle build //执行项目打包所必须的任务集,以及执行自动化测试,所以会较慢
或者通过
gradle assemble[FlavorsProduce][buildType]
或者 gradle assemble[FlavorsProduce]
或者 gradle assemble[buildType] 打出需要的类型包