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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当2个库想要使用相同的权限时,Manifest Merger失败相关的知识,希望对你有一定的参考价值。

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

我们有两个使用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" />

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

非常感谢!

答案

在Android Manifest文件中添加:

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

我通过首先找出哪些库发生冲突来解决问题。对我来说,XtremePush的包名为“in.imobile.xtremepush”,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"/>

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

以上是关于当2个库想要使用相同的权限时,Manifest Merger失败的主要内容,如果未能解决你的问题,请参考以下文章

解决pyinstaller在单一文件时无法正确添加权限清单问题,(UAC,uac_admin,manifest,asInvoker,python,requireAdministrator)

Android manifest 与 facebook 和 firebase 库合并

想要精通Python,必须收藏好这二十个库

Android悬浮窗

Android悬浮窗

c#通过app.manifest使程序以管理员身份运行