Manifest merger failed with multiple errors, see logs

 

导入第三方库,由于在Android Studio进行build的时候,默认使用了Manifest Merger Tool,如果在Library项目的Manifest文件中,定义了与主项目相同的属性,则会合并失败。

解决办法
在app module的AndroidManifest.xml的manifest根节点处,引入xmlns:tools="http://schemas.android.com/tools",然后在<application节点处,添加tools:replace="android:icon, android:label, android:theme" (多个属性中间用逗号隔开)。

我想说的是,这个在清单文件属性冲突的时候,确实能够解决,但是这种错误提示,可能的原因有很多,当你用上面这种方式不能解决的时候,试试下面这种办法。

 

 

首先进入命令行,输入命令
gradlew processDebugManifest --stacktrace  
其中,processDebugManifest是log里面 Exceution failed for task ‘:app processDebugManifest’  的,根据自己的manifest来填入

找到Error这一行。情况就一目了然了

1、合并优先级
清单文件合并是按照优先级进行合并的,低优先级的清单文件内容合并到高优先级的,假如合并的时候产生了冲突就需要解决冲突
2、主工程(又区分构建体、渠道、风味) > module(按照依赖关系) > jar 包(aar)。
3、合并冲突
当低优先级的清单文件属性合并到高优先级中,假如高优先级中没有对应的属性,则直接合并,假如有并且不一样,这时候就有了冲突,应该去解决,怎么解决?
4、补充规则:
针对要合并的值不一样,该如何去合并呢?这时候就要对一些不同属性的值在不同的情况具体对待?注意manifest中的任何attribute 都可以使用补充规则

常用的需要合并的属性值有
.Android的解决方式是使用标记,合并工具会优先在高优先级的清单文件中寻找这些标记,这一点要记住。另外,在使用标记的时候,需要在根节点manifest中添加 tools 命名空间:

节点标记
merge tools:node = “merge/replace/strict/remove/removeAll/merge-only-attribute”

合并规则中很重要的一个规则是节点标记,而merge 是默认行为,当manifest 各节点属性没有声明节点标记时候,就会使用默认值。现在一一解释每个值的含义

merge  合并该attribute 所有的属性和子属性;
replace 替换其他的值,使用该清单文件的值(一般而言,都是替换掉低优先级的值)
strict    严格的意思,就是不同的清单文件,相同属性的值应该一样,否则编译失败。(一般而言,就是不同的清单文件同一个属性其值要一样)
remove  删除某个属性。
removeAll 删除某个属性及其嵌套的子属性。(相当于remove,不过是有些时候删除很多子属性时,方便一些)
merge-only-attribute :Merge attributes in this tag only; do not merge nested elements 。只合并属性,不合并嵌套的属性

属性标记
tools:remove = “attr, …” 、
tools:replace=“attr, …”
tools:strict=“attr, …”

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值