第一步:配置AndroidManifest.xml
如果没有多渠道打包的话,我们需要每次修改android:value="umeng",然后一次次的重新打包。
如果使用Gradle多渠道打包的话,我们需要把 value 的值设置成:
其中${UMENG_CHANNEL_VALUE}中的值就是你在gradle中自定义配置的值。
第二步:在build.gradle设置productFlavors
productFlavors {
wandoujia {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
}
xiaomi{
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
}
qq {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "qq"]
}
_360 {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "360"]
}
}
其中[UMENG_CHANNEL_VALUE: “wandoujia”]就是对应${UMENG_CHANNEL_VALUE}的值
可以将代码简化成:
android {
productFlavors {
wandoujia{}
xiaomi{}
qq{}
_360 {}
}
productFlavors.all {
flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
}
其中name的值对相对应各个productFlavors的选项值,这样就达到自动替换渠道值的目的了。
这样生成apk时,选择相应的Flavors来生成指定渠道的包就可以了,而且生成的apk会自动帮你加上相应渠道的后缀,非常方便和直观。大家可以自己反编译验证。
第三步: 生成渠道包
Android Studio中的下方底栏中有个命令行工具Terminal,你也可以直接打开,输入命令:
gradle assembleRelease
也可以使用CMD命令,进入到项目所在的目录,直接输入命令(注意 :需要配置gradle 的环境变量)
第四步: 在 build.gradle 进行签名配置
//签名
signingConfigs{
release {
storeFile file("keystore路径")
storePassword "keystore密码"
keyAlias "别名"
keyPassword "别名密码"
}
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
}
第五步:修改导出包的APK名称
当我们的渠道包多起来以后为了方便运营人员查看和投放市场,所以我们需要根据渠道自定义apk的名称:
android {
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
//输出文件格式
applicationVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
def fileName = outputFile.name.replace("app", readApkName() + "-" + defaultConfig.versionName + "-" + releaseTime())
def file = new File(outputFile.parent, fileName)
if (file.exists()) {
file = new File(outputFile.parent, fileName.replace("-release", "2-release"))
}
output.outputFile = file
}
}
}
}
最后打包完成之后,apk文件就会生成在项目的build\outputs\apk下。
最后:完整的Gradle 代码
android {
signingConfigs{
release {
storeFile file("keystore路径")
storePassword "keystore密码"
keyAlias "别名"
keyPassword "别名密码"
}
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
//输出文件格式
applicationVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
def fileName = outputFile.name.replace("app", readApkName() + "-" + defaultConfig.versionName + "-" + releaseTime())
def file = new File(outputFile.parent, fileName)
if (file.exists()) {
file = new File(outputFile.parent, fileName.replace("-release", "2-release"))
}
output.outputFile = file
}
}
}
productFlavors {
wandoujia {}
xiaomi {}
yingyongbao {}
360 {}
}
productFlavors.all {
flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
}
最后,喜欢的同学可以关注我的微信公众号,我会不定期的写一些相关的文章,吹一些牛逼、砍一些大山、来一些心灵鸡汤、搞一些不为人知的故事
↑↑↑↑↑识别二维码就行↑↑↑↑↑