我有一個項目A,由庫B引用,A和B具有相同的名稱和類型,但它們的值不同。我認爲aapt應該處理這個問題,以確保項目和圖書館獲得正確的價值。除了重命名項目或庫中的所有資源外,還應該做些什麼來解決這個問題?爲什麼Android無法處理Project和Library之間的資源名稱衝突?
回答
構建系統有意使所有項目資源重疊在庫資源之上。這是爲了能夠根據使用它的應用以不同方式自定義庫資源而完成的。
如果您想在不知情的情況下防止這種情況發生,我們一直建議用戶在庫資源中使用前綴。
改變此時的行爲將會破壞許多人的項目。我們已經考慮過讓它成爲一個選項,但是在新的構建系統完成之前它不會發生。
我認爲它應該是一個選項。假設一個庫有數千個沒有前綴的資源,我們不能確保名稱衝突不會發生。 – handrenliang 2013-05-03 03:49:07
我同意,我們已採取措施在新的構建系統中實現這一目標。雖然需要更多的工作。 – 2013-05-03 03:50:11
順便說一句,爲什麼aapt不能收集東西在斷言庫的目錄到apk中? – handrenliang 2013-05-03 04:00:03
根據Android Building process,所有項目和庫(以及所有這些庫中的所有資源)被合併爲apkbuilder進程的一部分。如果您的項目和庫(或兩個庫之間)存在衝突,則最終構建將不知道要共享相同名稱的引用。當然,這樣做的好處在於,您可以通過名稱引用項目中的庫資源,即使基礎構建過程與基礎ID相沖突。
所以你的意思是我應該重命名項目或庫中衝突的所有資源?有成千上萬的資源需要重新命名!我的天啊! – handrenliang 2013-05-03 03:27:53
導入相應的R.java文件來解決資源衝突。
請確保您的包名稱和庫的包名稱不同。
如果你需要那麼你的圖書館資源,通過
library.packagename.R.drawable.resourceId
,而不是指它們通過R.drawable.resourceId
檢查你的根文件,如果它有2個R.java文件。
1.包裝絕對不同。 2. library.packagename.R.drawable.resourceId和R.drawable.resourceId在編譯aapt時是相同的 – handrenliang 2013-05-03 03:36:37
3. gen dir有2個R.java並且它們在不同的包中 – handrenliang 2013-05-03 03:40:48
然後就跟在2.請參考你的資源packagename.R.drawable.resourceID。 – 2013-05-03 03:41:40
- 1. Rails:命名空間資源和非命名空間資源之間的衝突
- 2. 名稱空間和類之間的名稱衝突
- 3. 我應該如何處理名稱空間和類名衝突
- 4. 屬性名稱和外鍵名稱之間的衝突
- 5. 圖層之間的名稱衝突
- 6. 如何處理Mercurial存儲庫和子庫之間的目標名稱衝突?
- 7. Android Gradle插件如何處理庫中的衝突資源?
- 8. Android資源關鍵衝突
- 9. 處理模塊名稱衝突
- 10. 控制器名稱和演示者命名空間之間的名稱衝突
- 11. 合同名稱空間 - 沒有衝突,爲什麼?
- 12. XML名稱空間衝突
- 13. Android - Library Project
- 14. 從Android-Library-Project
- 15. Windows和Android之間的衝突?
- 16. MVC路由 - 參數和控制器名稱之間的衝突
- 17. 爲什麼JScript中的變量和同名函數之間存在衝突?
- 18. 無法加載資源:服務器的狀態爲409(衝突)
- 19. Android庫中的XML資源衝突
- 20. 解決名稱空間之間的類命名衝突的最佳方法
- 21. 產生無名UIImageViews無名稱衝突
- 22. 名稱衝突
- 23. 名稱衝突
- 24. 名稱衝突
- 25. 處理自動佈局和核心動畫之間的衝突
- 26. 無法覆蓋的方法,因爲名稱衝突
- 27. Underscorejs和gettext名稱衝突
- 28. jaxB命名空間之間的衝突
- 29. gzipping資產和預編譯資產之間的Heroku衝突
- 30. 爲什麼控制器名稱被稱爲資源?
「A」和「B」的類路徑應該不同。不是嗎? – Raptor 2013-05-03 03:10:09
@ShivanRaptor類路徑和包是不同的 – handrenliang 2013-05-03 03:14:52