在项目开发中,我们可能需要提供不同环境下的开发包来供测试(调试版本,正式发布版本,内部测试版本)。
所以,我们要构建gradle,来满足不同环境下的自动打包。
1.配置签名信息
signingConfigs {
release {
storeFile file("keystore.inr")
storePassword "123456"
keyAlias "liu"
keyPassword "123456"
}
}
2.配置不同的环境
2.1 配置不同环境的gradle
buildTypes {
//测试
debug {
minifyEnabled false
buildConfigField "boolean", "INNER_RELEASE", "false"
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
//正式
release {
minifyEnabled true
buildConfigField "boolean", "INNER_RELEASE", "false"
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
//内部测试
innerRelease {
minifyEnabled true
buildConfigField "boolean", "INNER_RELEASE", "true"
applicationIdSuffix ".innerRelease"
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
}
2.2 java中根据不同的环境,返回不同的字段
public static String getMode() {
//测试
if (BuildConfig.DEBUG) {
return "debug";
}
//内部测试
if (BuildConfig.INNER_RELEASE) {
return "inner_release";
}
//正式
return "release";
}
3.还可以配置不同的渠道
productFlavors {
Weixin {
manifestPlaceholders = [UMENG_CHANNEL: "c002"]
}
Official {
manifestPlaceholders = [UMENG_CHANNEL: "c001"]
}
Yingyongbao {
manifestPlaceholders = [UMENG_CHANNEL: "c003"]
}
}
4.注意事项
buildTypes里面的名字不能和productFlavors里面的名字相同,不然会报错。
比如,把productFlavors里面的 Weixin 改成 inner 。
productFlavors {
inner {
manifestPlaceholders = [UMENG_CHANNEL: "c002"]
}
Official {
manifestPlaceholders = [UMENG_CHANNEL: "c001"]
}
Yingyongbao {
manifestPlaceholders = [UMENG_CHANNEL: "c003"]
}
}
会爆出下面的错误
Gradle 'DiskCacheDemo' project refresh failed
Error:Cannot add task ':app:assembleInnerRelease' as a task with that name already exists.
5.最后,打包命令
5.1,输出单个包
gradlew assembleOfficialRelease (输出正式包–渠道官网)
gradlew assembleOfficialInnerRelease (输出内部测试包–渠道官网)
5.2,输出所有渠道包
gradlew assembleRelease (所有正式包)
gradlew assembleInnerRelease (输出所有内部测试包)