最近做了个混合开发的app,现在马上做完要上线了。发现自己只会简单的打包,什么多渠道打包都还不会。然后就各种查找了,好了,现在做好了。自己也写个博客记录下,,毕竟就我这记性.....
首先呢,在AndroidManifest.xml中配置如下值:
<meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}" />
value值就是渠道标识来的,例如360,baidu,tencent什么的。在这里就不直接写某个渠道名,而是写一个占位符霸占住,到时在build.gradle中进行配置,之后gradle编译的时候就会动态的把这个占位符给换掉。
好了,接下来该在build.gradle中配置啦。
1、先在androdid{}中添加 flavorDimensions "versionCode"。配个图吧,清楚一点,往下看:
至于为什么要添加这句,em....我之前就是没加这句,结果就报Error:All flavors must now belong to a named flavor dimension. Learn more at https://d.android.com/了
2、还是在androdid{}里写的。
signingConfigs {
debug {
keyAlias 'xxx'
keyPassword '123123'
storeFile file('xxx.jks')
storePassword '123123'
}
release {
keyAlias 'xxx'
keyPassword '123123'
storeFile file('xxx.jks')
storePassword '123123'
}
}
buildTypes {
release {
// 启用混淆代码的功能
minifyEnabled true
//压缩对齐生成的apk包
zipAlignEnabled true
//指定混淆规则,需要压缩优化的混淆要把proguard-android.txt换成proguard-android.txt
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
//移除无用的资源文件
shrinkResources true
//启用multidex的支持
multiDexEnabled true
signingConfig signingConfigs.release
//自定义输入框配置
/*
Android plugin 3.0 不建议使用这样的写法
applicationVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
//输入框apk
def fileName = "xx_v${defaultConfig.versionCode}.apk"
output.outputFile = new File(outputFile.parent, fileName)
}
}
}*/
applicationVariants.all { variant ->
variant.outputs.all{
//输入apk
def fileName = "xx_v${defaultConfig.versionCode}.apk"
outputFileName = fileName
}
}
}
debug {
minifyEnabled true
signingConfig signingConfigs.debug
}
}
productFlavors {
huawei {}
tencent {}
// kuan {}
// xiaomi {}
// qh360 {}
// baidu {}
// wandoujia {}
}
productFlavors.all {
flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
最后sync now就好了,打包的时候就可以看到添加的huawei和tencent的渠道名啦。如图: