一、在 AndroidManifest.xml 里设置动态渠道变量
<!-- 使用Maven,gradle打包时会用具体的渠道号替换掉${channel} -->
<meta-data
android:name="channel"
android:value="${channel}" />
二、在 build.gradle 设置 productFlavors
defaultConfig {
//版本名后面添加一句话,意思就是flavor dimension 它的维度就是该版本号,这样维度就是都是统一的了
flavorDimensions "versionCode"
}
productFlavors {
google {
// manifestPlaceholders = [test_value: "这是测试值",test_value_activity:"Activity 中的测试值",channel:"google",name_activity:"Test M"]
manifestPlaceholders = [channel:"google"]
}
qh360 {
// manifestPlaceholders = [test_value: "这是测试值",test_value_activity:"Activity 中的测试值",channel:"qh360",name_activity:"Test M"]
manifestPlaceholders = [channel:"qh360"]
}
baidu {
// manifestPlaceholders = [test_value: "这是测试值",test_value_activity:"Activity 中的测试值",channel:"baidu",name_activity:"Test M"]
manifestPlaceholders = [channel:"baidu"]
}
self {
// manifestPlaceholders = [test_value: "这是测试值",test_value_activity:"Activity 中的测试值",channel:"self",name_activity:"Test M"]
manifestPlaceholders = [channel:"self"]
}
}
三、执行打包命令 gradlew assembleRelease

或者

四、配置签名文件
//签名
signingConfigs {
release{
keyAlias 'alias'
keyPassword APK_SIGN_KEY_PASSWORD
storeFile file('KeyStore.KeyStore')
storePassword APK_SIGN_STORE_PASSWORD
}
debug{
keyAlias 'alias'
keyPassword APK_SIGN_KEY_PASSWORD
storeFile file('KeyStore.KeyStore')
storePassword APK_SIGN_STORE_PASSWORD
}
}
buildTypes {
release {
//启用混淆代码的功能
minifyEnabled false
//指定混淆规则,需要压缩优化的混淆要把proguard-android.txt换成proguard-android.txt
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
}
//构建APK包名 可用一
applicationVariants.all { variant ->
def today = new Date().format('yyyyMMddHHmmss')
//这个修改输出的APK路径
if (variant.buildType.name != "debug") {//防止AS无法安装debug包(apk)
variant.getPackageApplicationProvider().get().outputDirectory = new File(project.rootDir.absolutePath + "/ader")
}
variant.getPackageApplicationProvider().get().outputScope.apkDatas.forEach { apkData ->
//这个修改输出APK的文件名
apkData.outputFileName = "Ader_" +
"v" + defaultConfig.versionName + "_" +
today + "_" +
variant.buildType.name + "_" +
variant.productFlavors[0].name +
".apk"
}
}
// //构建APK包名 可用二
// android.applicationVariants.all { variant ->
// //判断是release还是debug版本
// def buildType = variant.buildType.name
// //获取渠道名称
// def channel = variant.productFlavors[0].name
// def fileName//获取当前时间的"YYYY-MM-dd"格式。
// def createTime = new Date().format("YYYY-MM-dd", TimeZone.getTimeZone("GMT+08:00"))
// //println variant.getPackageApplicationProvider().outputFile
// //def output = variant.outputFile()
// variant.outputs.each {
// if (buildType == "release") {
// variant.getPackageApplicationProvider().get().outputDirectory = new File(project.rootDir.absolutePath + "/apks/${buildType}/${createTime}")
// fileName = "${channel}_v${defaultConfig.versionName}_${createTime}_${buildType}.apk"
// //it.outputFile = new File(it.outputFile.parent, fileName)
// it.outputFileName = fileName
// }
// }
// }
参考资料
1.API 'variantOutput.getPackageApplication()' is obsolete and has been replaced 解决方案
425

被折叠的 条评论
为什么被折叠?



