多渠道打包还有多种方法,如美团、AS自定义。今天我介绍下现我在想用中用的友盟多渠道打包及自定义输出文件路径等配置的方法。
1、配置友盟依赖:根据自身需求可添加别的sdk依赖
implementation 'com.umeng.umsdk:analytics:7.5.4'
1、首先在清单列表AndroidManifest中配置umeng的value及appkey值
<meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}" />
<meta-data
android:name="UMENG_APPKEY"
android:value="填写你的appkey" />
2、App级gradle文件中统一配置渠道(android标签中)
/*配置渠道*/
productFlavors {
huawei {}
yingyongbao {}
xiaomi {}
oppo {}
vivo {}
......
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
}
3、设置apk输出位置(此步骤可选,as3.0以后的版本默认会在app下会出现多个包含apk的文件夹)
//自定义APK名称,多渠道打包
android.applicationVariants.all { variant ->
variant.outputs.all { output ->
variant.productFlavors.each { flavor ->
// def project = "lipstick"
// def separator = "_"
def buildType = variant.variantData.variantConfiguration.buildType.name
// def versionName = variant.versionName
// def versionCode = variant.versionCode
// def date = new Date()
// def formattedDate = date.format('yyyyMMdd')
// def apkName = project + separator + "v" + versionName + separator + versionCode + separator + buildType + separator + flavor.name + ".apk"
// if (buildType == "release") {
// apkName = project + separator + "v" + versionName + separator + versionCode + separator + buildType + separator + flavor.name + separator + formattedDate + ".apk"
// }
// def apkName = variant.productFlavors[0].name+versionCode
def apkName = variant.productFlavors[0].name
if (buildType.toLowerCase().contains("release")) {
outputFileName = "../../../apks/${variant.versionName}/" + apkName + ".apk"
} else {
outputFileName = apkName + ".apk"
}
output.outputFileName = outputFileName
}
}
}
4、安装app并获取channel:通过友盟提供的api,只需传入当前Application对象实例即可
AnalyticsConfig.getChannel(App.instance)
注:新工程同步完中可能会有报错,android标签中加入如下代码就好了
flavorDimensions "default" //为防止添加多渠道打包时报错,flavor dimension的维度为默认值