2017-07-17 84 views
1

我創建了一個android庫模塊並將其託管在我的Github上。但是,該庫與Android Studio項目的圖標和版本衝突。當添加到我的Android項目的gradle產出,顯示以下錯誤:新創建的Android庫模塊與圖標和版本衝突

清單合併失敗:從[com.android屬性meta-data#[email protected]值=(25.3.1) .support:cardview-v7:25.3.1] AndroidManifest.xml:24:9-31 也出現在[com.android.support:appcompat-v7:26.0.0-alpha1] AndroidManifest.xml:27:9- 38值=(26.0.0-alpha1)。 建議:在AndroidManifest.xml:22:5-24:34的元素中添加'tools:replace =「android:value」'以覆蓋。

清單合併失敗:26::屬性應用@圖標值=從AndroidManifest.xml中(@繪製/ ic_launcher)9-45 也存在於[com.github.dinukapj :ATM-EditText:1.2] AndroidManifest.xml:13:9-43 value =(@ mipmap/ic_launcher)。 建議:在AndroidManifest.xml:23:5-305:19的元素中添加'tools:replace =「android:icon」'以覆蓋。

據我所知,通過增加tools:replace="android:value"tools:replace="android:icon"到清單中的應用程序標籤將解決這個問題,但因爲它是一個圖書館,我不想強​​迫開發人員爲每一個項目做到這一點。

我的圖書館:https://github.com/dinukapj/ATM-EditText/

有沒有解決從我的庫項目這個矛盾的方法嗎?

+1

您正在使用lib項目sdk版本25,並且主項目版本是26,因此它們相互衝突。嘗試用25更改主項目的版本,這將解決您的問題。 –

+0

解決了它。謝謝。請添加,作爲答案:) @AndyDeveloper – Dinuka

+0

歡迎先生:)我把它作爲一個答案:) –

回答

1

我與框架兼容性問題在庫模塊處理的首選方式是編譯庫對一個給定的版本(在你的情況下支持庫V25),但不包括圖書館在編譯的輸出。


通常情況下,dependencies將包括:

compile 'com.android.support:appcompat-v7:25.3.1' 

這條線做三件事情:

  • 它可以讓你的代碼中使用的類和方法在該庫
  • 編譯進入庫輸出AAR文件的那些類和方法
  • 這意味着使用您的庫人有權訪問他們沒有宣佈他們在應用程序的文件的build.gradle

第二點是衝突可以進來,


我的首選方式是使用provided關鍵字這樣以包括外部dependencies到庫模塊:

provided 'com.android.support:appcompat-v7:25.3.1' 

這是輕微LY不同以上:

  • 它可以讓你的代碼中使用的類和方法(如上)
  • 不會編譯類進庫輸出AAR文件
  • 它告訴圖書館用戶/開發的類必須在應用程序的構建gradle這個文件中提供
  • 這意味着使用你的庫的人沒有訪問類,而不會增加在應用程序的的build.gradle依賴自己

這很好的一部分是,使用你的庫的開發人員可以依賴於他們想要的任何(兼容)版本的外部框架,例如,你的情況,他們將包括,在其應用的的build.gradle如下:

compile 'com.android.support:appcompat-v7:26.0.0' 

一些額外的鏈接:


此技術最適合在任何情況下很有可能包含在應用程序中的庫,例如Android的支持庫,GSON等

總結:

  • 我們構建庫對1版
  • 用戶必須提供他們的項目依賴

您的用戶就可以自由使用他們想要的任何庫版本。

+1

謝謝你的綜合答案我的天哪,愛我從它學到的所有新事物。我接受它作爲答案。再次感謝Richard! – Dinuka

+0

我很高興它可以幫助。由於我最近一直在處理這個問題,所以你的問題的時間不會更好。 –

+0

哈哈我明白了。好東西然後:)快樂的編碼,好先生! – Dinuka

0

你可以添加一個wiki說它應該排除你的圖書館的AppCompat版本。

compile (project(":ATM-EditText")){ 
     exclude module: 'appcompat-v7' 
     exclude group: 'com.android.support' 
} 

這不會要求您的用戶在清單中添加工具屬性。

1

您正在使用lib項目SDK版本25和主項目版本是26,因此它們相互衝突。嘗試用25更改主項目的版本,這將解決您的問題。