当2个库想要使用相同的权限时,Manifest Merger失败

时间:2017-12-18 14:01:35

标签: android push-notification android-manifest manifest-merging

我们目前正在尝试将我们的系统更新到最新的Android Studio / Gradle工具,并在途中遇到一些错误。

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

当我们调查这个问题时,我们发现了以下定义:

火力地堡

x = 1
size = 16
for i in range(size):
    spaces = (' ' * (size - i))
    binary = bin(x)[2:]
    print(spaces + binary
        .replace('0', '  ').replace('1', ' *'))
    x ^= x << 1

XtremePush

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

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

由于这两个定义都在外部库中,因此我们无法设置合并规则或更改清单详细信息。此外,这两个库都是迄今为止的最新版本,因此在各自的开发人员方面似乎都没有解决方案。在我们的清单中设置权限也没有改变任何内容。

非常感谢!

2 个答案:

答案 0 :(得分:1)

在Android Manifest文件中添加:

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

答案 1 :(得分:0)

我通过首先找出哪些库发生冲突来解决问题。对我来说,XtremePush的包名是“ie.imobile.extremepush&#39;和Firebase一起使用软件包名称&#39; com.google.firebase&#39;。

然后我将我的实现改为..

<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"/>

..以便我的清单可以覆盖两个清单,这些清单会发生冲突并导致合并问题。这没有问题,因为它们的功能几乎相同。