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