赞
踩
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, …”
解决方案:
首先进入命令行,输入命令
gradlew processDebugManifest --stacktrace
其中,processDebugManifest是log里面提到的,这个命令是会了获取更多的log信息。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。