Android項(xiàng)目編譯時(shí)碰到的異常境钟,而我們查看日志的話顯示如下
ERROR: Manifest merger failed : Attribute application@appComponentFactory value=(androidx.core.app.CoreComponentFactory) from [androidx.core:core:1.1.0] AndroidManifest.xml:24:18-86
is also present at [com.android.support:support-compat:28.0.0] AndroidManifest.xml:22:18-91 value=(android.support.v4.app.CoreComponentFactory).
Suggestion: add 'tools:replace="android:appComponentFactory"' to <application> element at AndroidManifest.xml:5:5-19:19 to override.
下面是AndroidStudio的日志截圖
AndroidStudio的日志顯示
編譯異常通常比較難搞,這是因?yàn)槲覀儗?duì)Gradle掌握的太少的緣故俭识,不過(guò)這并不影響我們排錯(cuò)慨削。
出了錯(cuò)首先就是要看日志,日志通常能解決我們90%的問(wèn)題鱼的,剩下的10%我們多看幾遍多碰到幾遍也能記住【手動(dòng)微笑】
我們來(lái)仔細(xì)看日志
ERROR: Manifest merger failed :
Attribute application@appComponentFactory value=(androidx.core.app.CoreComponentFactory) from[androidx.core:core:1.1.0] AndroidManifest.xml:24:18-86is also present at
[com.android.support:support-compat:28.0.0] AndroidManifest.xml:22:18-91 value=(android.support.v4.app.CoreComponentFactory).Suggestion: add 'tools:replace="android:appComponentFactory"' to <application> element at AndroidManifest.xml:5:5-19:19 to override.
日志的開(kāi)頭說(shuō):
ERROR: Manifest merger failed
,翻譯過(guò)來(lái)就是清單文件合并失敗了理盆,千萬(wàn)不要看到這里就去檢查清單文件,接著往下看,當(dāng)你看到xxx is alos present at xxx的時(shí)候凑阶,你應(yīng)該明白是包沖突了
猿规。發(fā)生沖突的包就是 is also present at 前后描述的兩個(gè)包
從Suggestion開(kāi)始的就是ide自動(dòng)提示給我們的解決方案,而這個(gè)推薦的解決方案宙橱,很多時(shí)候都并不夠準(zhǔn)確
解決方案
仔細(xì)看日志中發(fā)生沖突的兩個(gè)包姨俩,刪掉自己不想使用的那一個(gè)
一般發(fā)生包沖突都是我們導(dǎo)入了相同的包,在Android開(kāi)發(fā)中师郑,導(dǎo)入包的操作通常有:
- 添加本地jar包环葵,即在lib目錄下添加jar包
- 添加遠(yuǎn)程依賴(lài)的時(shí)候
看到這里明白了吧,你應(yīng)該仔細(xì)去檢查你的lib目錄下和你的gradle文件中的依賴(lài)宝冕,看看是不是有依賴(lài)沖突
本例的gradle文件
紅框中的就是發(fā)生沖突的依賴(lài)张遭,appcompat同時(shí)依賴(lài)了android和androidx包下的,刪掉一個(gè)依賴(lài)就行了
PS:ERROR: Manifest merger failed是非常常見(jiàn)的一個(gè)編譯異常地梨,一定要仔細(xì)看日志菊卷,否則你可能照著帖子處理了半天發(fā)現(xiàn)依然解決不了問(wèn)題缔恳,然后說(shuō)別人的帖子寫(xiě)的不對(duì),其實(shí)很多時(shí)候很有可能是別人的帖子中的情況與你的情況不匹配洁闰。就像是大夫看病一樣歉甚,找到病癥了才能藥到病除,否則只看表像永遠(yuǎn)難以解決問(wèn)題扑眉。
祝大家在Android開(kāi)發(fā)的道路上越走越順利V叫埂!腰素!