1

我们正在尝试将我们的系统更新为最新的Android Studio/Gradle工具,并且在途中遇到了一些错误。当2个图书馆想要使用相同的权限时,Manifest Merger失败

我们有2个使用permission.C2D_MESSAGE的库,即Firebase和XtremePush。问题是,只要我们想构建我们的应用程序,Manifest Merger的构建失败,因为他无法完成合并,出现错误“找不到记录(这是合并清单中的错误)。 ”。

当我们观察到的问题,我们发现了以下定义:

火力地堡

<permission android:name="${applicationId}.permission.C2D_MESSAGE" 
      android:protectionLevel="signature"/> 

<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE"/> 

XtremePush

<permission 
    android:name=".permission.C2D_MESSAGE" 
    android:protectionLevel="signature" /> 

<uses-permission android:name=".permission.C2D_MESSAGE" /> 

由于这两个定义外部库,我们是不是可以设置合并规则或更改清单细节。而且,这两个库都是最新的,所以似乎在各自的开发者方面都没有解决方案。在我们的清单中设置权限也没有改变任何东西。

非常感谢!

+1

“我们无法设置合并规则或更改清单细节” - 在您自己的清单中定义元素并使用'tools:overrideLibrary',IIRC。 – CommonsWare

+0

现在这两个属性(权限和使用权限)是正确的根目录-标志,我没有-标志,除了facebook库。我可以用库的包名创建另一个,并在那里添加overrideLibrary? – Essi

+1

您可以在清单中放入''和''元素,并根据需要进行配置,并在这些元素中包含'tools:overrideLibrary'。然后希望最好。 – CommonsWare

回答

0

我首先找出哪些库做冲突解决了这个问题。对于我来说,XtremePush的软件包名称为'ie.imobile.extremepush',Firebase的软件包名称为'com.google.firebase'。

然后我改变我的落实..

<permission 
    android:name="${applicationId}.permission.C2D_MESSAGE" 
    android:protectionLevel="signature" 
    tools:overrideLibrary="com.google.firebase, ie.imobile.extremepush" /> 

<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE" 
       tools:overrideLibrary="com.google.firebase, ie.imobile.extremepush"/> 

..所以,我的表现会超越这两个体现,这是发生冲突,并导致合并问题。这是没有问题的,因为它们在功能上已经几乎完全相同了。

1

在您的Android清单文件中加入:

<uses-sdk tools:overrideLibrary="com.example.firebase, com.example.xtremepush"/> 
+0

这不会影响''或''元素,只会影响''元素。 – CommonsWare

+0

你是对的,对我来说正确的解决方案是在最初的问题的意见。 – Essi