报错:
Attribute meta-data#UMENG_CHANNEL@value at AndroidManifest.xml requires a placeholder substitution but no value for is provided.
Execution failed for task ':module_login:processDebugManifest'.
> Manifest merger failed with multiple errors, see logs
原因:在AndroidMainfest.xml中meta-data元素使用了占位符,但是却没有为这个占位符设置参数值;占位符:${UMENG_CHANNEL},没有为UMENG_CHANNEL设置值,这个值一般都是动态设置,不然就直接写死了;
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL}" />
解决办法:
1,把占位符去掉直接把值写死;
2,module下的build.gradle中为UMENG_CHANNEL设置值;
2.1,如果是多渠道打包,则在build.gradle中的android闭包下添加:
flavorDimensions "channel"
productFlavors {
//多渠道打包,关键就在于定义多个productFlavor。
huawei{
}
xiaomi{
}
oppo{
}
vivo{
}
productFlavors.all {
flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL: name]//name的值不同渠道的渠道名:"huawei","xiaomi","oppo","vivo"
}
}
以上是以下代码
productFlavors {
huawei{
manifestPlaceholders = [UMENG_CHANNEL: "huawei"]
}
xiaomi {
manifestPlaceholders = [UMENG_CHANNEL: "xiaomi"]
}
oppo{
manifestPlaceholders = [UMENG_CHANNEL: "oppo"]
}
vivo{
manifestPlaceholders = [UMENG_CHANNEL: "vivo"]
}
}
的简写;
2.2,没有用到多渠道打包,直接在对应打包方式下为UMENG_CHANNEL设置值即可;
buildTypes {
release {
minifyEnabled false
shrinkResources false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
manifestPlaceholders = [UMENG_CHANNEL: "\"abc\""]
}
debug {
minifyEnabled false
shrinkResources false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard- rules.pro'
manifestPlaceholders = [UMENG_CHANNEL: "\"123\""]
}
}
2.3,或者在defaultConfig下统一设置,但是这样就没必要在AndroidManifest.xml设置占位符了直接赋值即可;
android {
defaultConfig {
manifestPlaceholders = [ UMENG_CHANNEL: "\"test\"" ]
}
}