先说下出现该问题的背景:项目中之前应用了个推,之后又要求接入一个在线会议的sdk,造成了清单文件的冲突,完成的报错信息如下:
Attribute permission#包名.permission.MIPUSH_RECEIVE@protectionLevel value=(signatureOrSystem) from [com.getui:xmp:1.0.0] AndroidManifest.xml:22:9-52
is also present at [:sdk:] AndroidManifest.xml:22:9-44 value=(signature).
Suggestion: add 'tools:replace="android:protectionLevel"' to <permission> element at AndroidManifest.xml:20:5-22:55 to override.
官方提出解决大意为:重写出现冲突的清单文件22行,并且添加
tools:replace="android:protectionLevel"
在 </permission>
标签下
但是因为我们引用的是第三方依赖,无法知道22行写了什么,但是官方在报错信息中已经指出了,我们可以根据报错信息来重写。重写如下:
<permission
android:name="包名.permission.MIPUSH_RECEIVE"
android:protectionLevel="signatureOrSystem"
tools:replace="android:protectionLevel" />
可以看出name和android:protectionLevel在报错信息中都有指出,那么我们在项目的清单文件中重写并且按照提示添加’tools:replace="android:protectionLevel"即可。
注:若第三方依赖使用的版本过高的话,也编译不通过,需要更改项目的compileSdkVersion版本。